커뮤니티

예스스팟 Q&A

답변완료

매수주문 청산주문 리피트 부탁드립니다.

항상 도움주셔서 감사하게 생각하고 있습니다. 하이투자증권을 사용하고 있고 지난번에 올려놓은 스팟식으로 선물신호☞ 옵션주문 형태로 스팟식을 6개 돌리고 있습니다. 이번에 호가인하와 관련하여 주문계약수가 늘었을때 조금이나마 슬리피지를 줄이고자 시간을 나누어 주문을 내려고 합니다. 스팟식 6개에 각각 시간지연주문식을 넣지않로 하나의 스팟식으로 지연주문을 하고자합니다. 1. 계좌에서 옵션매수나 청산 주문이 나오면 같은 종목 같은 수량으로 5초 뒤 똑같이 한번 더 주문한다. 2. 5초뒤 1.번 작업을 한번 더 수행한다. 3. 5초뒤 1.번 작업을 한 번 더 수행한다. 4. 1.번 작업과 2.번 작업 사이에 나오는 새로운 주문이 나오면 이 작업을 반복한다.
프로필 이미지
피니트
2017-03-26
2616
글번호 224149

영원한자유 님에 의해서 삭제되었습니다.

프로필 이미지
영원한자유
2017-03-19
32
글번호 224144
답변완료

지표문의(현대선물, 한투)

차트에서 첨부파일의 사진의 동그라미 부분(2개)처럼 빨간색 계통, 파란색 계통의 선이 나오게 하는 지표는 무엇인지 궁금합니다. 대충이라도 알려주세요. 밑에 처럼 입력하고 검증했는데, 오류나네요. input : N(120); var1 = highest(H,N); var2 = Lowest(L,N); plot1(var1+PriceScale*2,"최고가+2틱"); plot2(var1-PriceScale*2,"최고가-2틱"); plot3(var2+PriceScale*2,"최저가+2틱"); plot4(var2-PriceScale*2,"최저가-2틱");
프로필 이미지
살구바
2017-03-16
2762
글번호 224143
답변완료

문의드립니다.

FX 거래를 위하여 수식 작성중 모의거래로 테스트시 보유 포지션이 있는데도 잔고수량이 계속 "0"으로만 나옵니다. 수식확인 부탁드립니다. ------------------------------------------------------------- function Main_OnStart() { Account1.SetBalanceItem(MarketDataFX1.code, 0); var Fx1 = Account1.Balance.count; var FP1 = Account1.Balance.position; Account1.SetBalanceItem(MarketDataFX2.code, 0); var Fx2 = Account1.Balance.count; var FP2 = Account1.Balance.position; Main.MessageLog("Fx1= "+Fx1); Main.MessageLog("Fx2= "+Fx2); }
프로필 이미지
simtang3
2017-03-15
2642
글번호 224140
답변완료

당일 개인,외국인 등의 수급 데이터 가져오는 방법이 있나요?

안녕하세요. 아래의 함수를 통해서 전일 개인 매수/매도 수량은 가져 왔는데요. MarketData.GetInvestorInfoByCategory(1, 0, 2, 1) 당일 수급데이터는 가져올 수 없나요? 함수 인자의 마지막 1을 0으로 하면 범위를 벗어 났다고 오류 나오네요. 방법 좀 알려 주시면 감사하겠습니다.
프로필 이미지
파워풀맨
2017-03-14
2656
글번호 224139
답변완료

수식에서 참조할 첫번째 종목데이터가 없습니다

이 문구가 뜨는데 어떻게 해결해야 하나요? 또한 시스템에서, 다른 주기 봉차트를 참조로 걸어두려고 하는데, 하는 방법을 잘 모르겠습니다.. 감사합니다
프로필 이미지
이대규
2017-03-14
2451
글번호 224138

파워풀맨 님에 의해서 삭제되었습니다.

프로필 이미지
파워풀맨
2017-03-12
0
글번호 224137
답변완료

옵션매매 문의드립니다.

항상 도움 주셔서 감사히 공부하고 있습니다. 선물신호로 옵션매수후 청산하고 있는데. 한계약일 경우에는 문제가 전혀 없는데 피라미딩으로 하나의 차트에서 2계약 이상 매수할 때, 행사가가 다른 옵션 매수후 청산할 경우에는 마지막 행사가로만 청산이 되어 계좌에 매도계약이 남게 되어 질문드립니다. 예를 들면 P 272.5 1계약 매수후 P270.0 1계약 추가 매수후 청산이 될 때 P270.0 2계약 매도 신호가 나옵니다. 결국 완전청산이 되지않고 P 272.5 1계약 매수 , P272.0 1계약 매도 상태가 됩니다. 완전한 청산을 위해서 스팟식을 어떻게 바꾸면 좋을 지 조언 부탁 드립니다. var ChartName = "pyramiding"; var d = new Date(); var OpPrice = 1.00; //진입가격대, OpPrice에 가장 근접한 값 주문 var LowPrice = 0.40; //최소가격대 이상일때로 제한하는 변수 var HighPrice = 9.90; //최대가격대 이하일때로 제한하는 변수 var OrderGap = 0.30; //주문시 체결가격 설정(현재가 + OrderGap) var ForPrice; // 옵션값후보 var Delta; var MaxCall; // 콜을 여기에 저장 var MaxCallcode; // 콜의 코드를 여기에 저장 var MaxPut; var MaxPutcode; function Main_OnStart() { Delta = 100; for(var i = -5; i <= 5; i++) { ForPrice = Option.GetCurrent(0,i); // GetCurrent 0 은 콜 , 1은 풋 if ( Math.abs(ForPrice - OpPrice) <= Delta && LowPrice < ForPrice && ForPrice < HighPrice ) { Delta = Math.abs(ForPrice - OpPrice); MaxCallcode = Option.GetATMCallRecent(i); MaxCall = Option.GetCurrentByCode(MaxCallcode); } } Delta = 100; for(var i = -10; i <= 10; i++) { ForPrice = Option.GetCurrent(1,i); // GetCurrent 0 은 콜 , 1은 풋 if ( Math.abs(ForPrice - OpPrice) <= Delta && LowPrice < ForPrice && ForPrice < HighPrice ) { Delta = Math.abs(ForPrice - OpPrice); MaxPutcode = Option.GetATMPutRecent(i); MaxPut = Option.GetCurrentByCode(MaxPutcode); } } Main.MessageLog("<< "+ChartName+" >> 콜 : "+MaxCall+" ("+MaxCallcode+") , 풋 : "+MaxPut+" ("+MaxPutcode+") ----- 구동시각 "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()+" , 잔존일 "+Option.GetRemainDays(0,0)+"일"); } //////////////////////////////////////////////////////// 신호 뜰때 매매 /////////////////////////////////////////// function Chart1_OnRiseSignal(Signal) { var EntryVol = Signal.count; // 선물신호 수량 d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if ( HHMMSS >= 90001 ) { ////////////////////////////////////////////// if (Signal.signalKind == 1) // Call 매수 { Delta = 100; for(var i = -5; i <= 5; i++) { ForPrice = Option.GetCurrent(0,i); // GetCurrent 0 은 콜 , 1은 풋 if ( Math.abs(ForPrice - OpPrice) <= Delta && LowPrice < ForPrice && ForPrice < HighPrice ) { Delta = Math.abs(ForPrice - OpPrice); MaxCallcode = Option.GetATMCallRecent(i); MaxCall = Option.GetCurrentByCode(MaxCallcode); } } OrderPrice = parseInt((MaxCall+OrderGap)*100)/100; //부동소수점 오류방지 ACC.OrderBuy(MaxCallcode, EntryVol, OrderPrice, 0); //괄호 의미는 (코드, 수량, 가격, 지정가) Main.MessageLog("("+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()+" ☞ "+ChartName+" 콜 매수진입) 종목명:"+MaxCallcode+", 수량:"+EntryVol+", 현재가:"+MaxCall+", 주문가:"+OrderPrice +" CCC"); } ////////////////////////////////////////////// if (Signal.signalKind == 2) // Call 청산 { ExitPrice = Option.GetCurrentByCode(MaxCallcode); OrderPrice = parseInt((ExitPrice - OrderGap)*100)/100; //부동소수점 오류방지 ACC.OrderSell(MaxCallcode, EntryVol, OrderPrice, 0); Main.MessageLog("("+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()+" ☞ "+ChartName+" 콜 청산주문) 종목명:"+MaxCallcode+", 수량:"+EntryVol+", 현재가:"+ExitPrice+", 주문가:"+OrderPrice+ " c"); } ///////////////////////////////////////////// if (Signal.signalKind == 3) // Put 매수 { Delta = 100; for(var i = -10; i <= 10; i++) { ForPrice = Option.GetCurrent(1,i); // GetCurrent 0 은 콜 , 1은 풋 if ( Math.abs(ForPrice - OpPrice) <= Delta && LowPrice < ForPrice && ForPrice < HighPrice ) { Delta = Math.abs(ForPrice - OpPrice); MaxPutcode = Option.GetATMPutRecent(i); MaxPut = Option.GetCurrentByCode(MaxPutcode); } } OrderPrice = parseInt((MaxPut+OrderGap)*100)/100; //부동소수점 오류방지 ACC.OrderBuy(MaxPutcode, EntryVol, OrderPrice , 0); Main.MessageLog("("+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()+" ☞ "+ChartName+" 풋 매수진입) 종목명:"+MaxPutcode+", 수량:"+EntryVol+", 현재가:"+MaxPut+", 주문가:"+OrderPrice +" PPP"); } ///////////////////////////////////////////// if (Signal.signalKind == 4) // Put 청산 { ExitPrice = Option.GetCurrentByCode(MaxPutcode); OrderPrice = parseInt((ExitPrice - OrderGap)*100)/100; //부동소수점 오류방지 ACC.OrderSell(MaxPutcode, EntryVol, OrderPrice, 0); Main.MessageLog("("+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()+" ☞ "+ChartName+" 풋 청산주문) 종목명:"+MaxPutcode+", 수량:"+ EntryVol+", 현재가:"+ExitPrice+", 주문가:"+OrderPrice+" p" ); } } }
프로필 이미지
피니트
2017-03-03
2546
글번호 224136

한바다 님에 의해서 삭제되었습니다.

프로필 이미지
한바다
2017-03-03
0
글번호 224135
답변완료

일일손실제한 다음 식을 사용해도 되나요?

항상 감사드립니다. 여러개의 스팟식을 사용해서 포트폴리오 매매를 하고 있습니다. 아래 조건으로 스팟식을 만들고자 합니다. 금일 매매중에 총 100만원 손실 보고 있을시 모든 포지션 청산하고 + 금일은 추가 매매금지 var i1; var X; var dayloss = 1000000; //스팟 시작시 function Main_OnStart() { //i1에 예수금/예탁총액 저장 i1 = ACC.GetBalanceETCinfo(0); X = 0; Main.SetTimer(1, 5000);//5초 타이머 셋팅 } function Main_OnTimer(nEventID) { // 현재 정산금이 스팟시작시값보다 ""dayloss"" 이상 감소했으면 if (nEventID == 1 && ACC.GetBalanceETCinfo(100) <= i1-dayloss) { //타이머 중지 Main.KillTimer(1); var Bnum = ACC.GetTheNumberOfBalances(); for(var i = 0; i < Bnum; i++) { ACC.SetBalance(i); //콜이나 풋이면 if (ACC.Balance.code.substring(0,1) == "2" || ACC.Balance.code.substring(0,1) == "3") { // 포지션 청산 if (ACC.Balance.position == 1) ACC.OrderBuy(ACC.Balance.code,ACC.Balance.count,0,1); if (ACC.Balance.position == 2) ACC.OrderSell(ACC.Balance.code,ACC.Balance.count,0,1); } } X = 1; } } 1. 위의 식에 오류는 없나요? 2. 812글 답변에 보면 //현재 예수금/예탁총액이 스팟시작시값보다 20% 이상 감소했으면 if (nEventID == 1 && Account1.GetBalanceETCinfo(0) <= i1*0.8) { 이라는 부분이 나옵니다.GetBalanceETCinfo(0) 값은 "예수금"인데 , 0 대신 100 "정산금" 값이 실시간 값 아닌지요? 3. 다른 스팟 주문식에 && X ==0 을 넣으라고 하셨는데 , 이 때 그 주문식에도 var X; 라고 정의를 해야 하나요? 4. 만일 3개의 스팟식을 운영한다고 할 때 저 조건식을 3개의 스팟식에 모두 넣어야 하는지요? 5. 아니면 하나의 스팟식에서 변수를 정의하면 동시에 실행하는 다른 스팟식에도 두루 사용할 수 있는지도 궁금합니다. ======= 전화통화로 해결되었습니다. 감사드립니다^^
프로필 이미지
피니트
2017-03-03
2505
글번호 224131