커뮤니티

예스스팟 Q&A

답변완료

선물 신호로 옵션 주문하기...

1. 복수의 선물 신호로 옵션을 주문하려고 합니다. 선물 매수시 콜옵션 , 선물 매도시 풋옵션, 청산 신호시 옵션 청산. 이때 당일 시가 가격 기준으로 옵션을 주문내고 싶습니다. 3.0 에 가장 가까운 가격요. 2. 선물 매수 신호가 2개가 모일 때마다 옵션 1개를 낼 수 있나요? 선물 매수인 시스템 신호가 2개이면 콜매수 1 , 매도 2개이면 풋매수 1 이렇게 말이죠. 청산도 마찬가지로요. 3. 당일 옵션의 매매 손익 기록을 파일 등으로 기록해두고 싶습니다. 백테스트가 안되다보니 기록으로 관리할 수 밖에 없을 거 같습니다. 어떤 식으로 할 수 있나요? 옵션 행사가라던가 그런 정보도 함께 기록이 가능한지요. 감사합니다.
프로필 이미지
블레이즈
2013-05-09
2054
글번호 222359
답변완료

스팟 좋네요...

자바스크립트를 좀 아니 활용도가 상당하네요. 예스스탁에서 제공하는 객체들에 대해서만 공부좀하면 되겠네요. 예스랭귀지와의 연동이 좀 더 강화된다면, 이를테면, 스팟에서 성능보고서의 종합이나 전략분석의 항목을 참조하는 등의 기능도 추가된다면 최고일듯 싶습니다.
프로필 이미지
불꽃기사
2013-05-09
2126
글번호 222358
답변완료

스팟문의드립니다.

선물신호를 받아서 옵션 매수후 2~3 일간 포지션 홀딩시, 다음날(프로그램 재시작) 스팟전략이 디폴트되어 청산식이 제대로 되지 않습니다. 계좌함수를 통해 해결할 수 있다고 들었는데요, 계좌함수를 이용해 선물에서 청산신호 발생시 포지션을 청산하고 싶습니다. 부탁드립니다. //아래 전략은 기존 수식입니다. var BStart; var SStart; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; function Main_OnStart() { Main.MessageLog("시작"); BStart = 0; SStart = 0; } function C1_OnRiseSignal(Signal) { Kind = Signal.signalKind; Main.MessageLog("신호완성/"+Kind); //선물차트에서 매수신호발생하면 콜 매수 if (Signal.signalKind ==1) { BStart = 1; BuyCallCode = Option.GetATMCallRecent(0);//ATM콜 종목코드 var BuyCallPrice = Option.GetBidByCode(BuyCallCode, 2);//ATM콜 매수2호가 A1.OrderBuy(BuyCallCode, vol, BuyCallPrice, 0); Main.MessageLog("등가콜매수 : "+BuyCallCode); } //선물차트에서 매도신호발생하면 풋 매수 if (Signal.signalKind ==3) { SStart =1; BuyPutCode = Option.GetATMPutRecent(0);//ATM풋 종목코드 var BuyPutPrice = Option.GetBidByCode(BuyPutCode, 2);//ATM풋 매수 2호가 A1.OrderBuy(BuyPutCode, vol, BuyPutPrice, 0); Main.MessageLog("등가풋매수 : "+BuyPutCode); } if (BStart == 1 && Signal.signalKind == 2)//선물차트 매수 청산신호발생하면 콜 매수 청산 { var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2); A1.OrderSell(BuyCallCode, vol, BxCallPrice, 0); Main.MessageLog("등가콜청산 : "+BuyCallCode); } if (SStart == 1 && Signal.signalKind == 4)//선물차트 매도 청산신호발생하면 풋 매수 청산 { var BxPutPrice = Option.GetBidByCode(BuyPutCode, 2); A1.OrderSell(BuyPutCode, vol, BxPutPrice, 0); Main.MessageLog("등가풋청산 : "+BuyPutCode); } }
프로필 이미지
몬자
2013-05-07
2184
글번호 222353
답변완료

자동주문관련

안녕하세요? 자동실행에서 매수포지션에서 매도로진입시 또는 매도포지션에서 매수로진입시 포지션청산이 되지않고 주문이 1회만 이루어집니다. 그래프상에서는 정상적으로 포지션청산과 진입주문이 이루어진것으로 표기가 되는데요.. 원인과 해결방법 문의드립니다. 조건 then buy(); 조건 then sell(); 식에서 발생이 됩니다. 답변 꼭 부탁드립니다. 수고하세요.
프로필 이미지
HI_danu
2013-05-07
2011
글번호 222352
답변완료

데이타베이스 객체 SendQuery 메쏘드

안녕하세요 SendQuery(sQuery, sTabTitle) 데이타베이스 객체의 위.. 메쏘드를 써서 인서트 query를 실행해 보려고 하는데요 TypeError: Object [object Object] has no method 'SendQuery' 라는 에러메시지가 뜨네요. 어떻게 하면 좋을까요?
프로필 이미지
러브게임
2013-05-04
1880
글번호 222350
답변완료

계좌에서 옵션 종목별 평균 단가 구하기

수고 많으십니다. 옵션 매매 수식을 만드는 중인데요. 257.5 콜 옵션을 하나 매도 하고 255 콜 옵션을 하나 매도 했을 때 257.5는 1포인트 올랐을 때 손절하고 255는 0.5포인트 올랐을 때 손절하려고 합니다. 내 계좌의 옵션 종목별 평균단가를 구하려고 하는데요. 어떤 함수를 이용해야 하나요?
프로필 이미지
유기농옵션
2013-05-02
1823
글번호 222348
답변완료

스팟 주문 수량

챠트에서 선물 신호를 받아서 거래를 하는데.. 챠트에서 나오는 신호 수량대로 체결하게 하는 방법이 있나오.. 스팟에서 정하는 수량 말고 챠트에서 나오는 거래수량 대로 거래할수 있는 방법 좀 알려주세요.. 수식이 따로 있다면 그것도 부탁드립니다.
프로필 이미지
nadogaja
2013-04-29
1774
글번호 222339
답변완료

예스스팟에서

안녕하세요. 예스스팟에서 여러개의 차트를 연결하여 처리할 수 있는데요. 각 차트의 옵션종목을 가격의 등락에 따라 옵션종목코드를 예스스팟에서 변경할 수 있는지요? 예) 예스스팟에서 등가종목인 252를 매매하다가 가격이 올라서 257일 되었을 경우 현재는 차트에서 종목을 수동으로 변경해야 하는데 예스스팟에서 등가격종목이 변하면 해당 차트의 종목코드를 변경하고 매매할 수 있는지요?
프로필 이미지
richon
2013-04-26
1739
글번호 222338
답변완료

기능 문의

안녕하세요. 다음과 같은 기능이 가능한지 문의 드립니다. A, B 두개의 관심그룹을 비교해서 서로 다른 종목이 존재 할 경우, 1. 사운드를 울림 2. 관심 그룹 A의 종목을 모두 삭제하고 B로 대체. 그룹 B 종목 삭제. 감사합니다.
프로필 이미지
hugnkiss
2013-04-25
1825
글번호 222337
답변완료

수정 문의

선물신호연계(옵션 매수. 옵션 매도)식입니다만, 가격설정을 1.0~2.0 사이로 했더니 가끔 두 종목이 겹치네요. * 수정 문의 부탁드릴 것은, 그런 오류 없게끔 이식을 (2.0)에 제일 가까운 종목 한 개종목만 매매하도록 수정 부탁드립니다 (매수. 매도식 두개다 수정 부탁드립니다) * 추가로 질문인데, 1. 이렇게 가격이 겹칠 때 두 종목중 한 종목만 체결되는 것인지요? 2. 또 손절식이setstop이나 setstopprofit같은 함수식 조건이라도 오류없이 청산이 되는지요? 감사합니다 1. 옵션매수 var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; function Main_OnStart() { Start = 0; } function Chart1_OnRiseSignal(Signal) { UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= 2.0 && Option.GetCurrent(0, i) >= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= 2.0 && Option.GetCurrent(1, ii) >= 1.0) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } //buy신호 발생시 if (Signal.signalKind == 1) { Start = 1; CC = -1; CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } if (CC > 0) { Account1.OrderBuy(CallOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } // Exitlong신호 발생시 if (Start == 1 && Signal.signalKind == 2) { Start = 0; if (CC > 0) { Account1.OrderSell(CallOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } //sell신호 발생시 if (Signal.signalKind == 3) { Start = -1; PP = -1; PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } if (PP > 0) { Account1.OrderBuy(PutOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } //exitshort신호 발생시 if ( Start == -1 && Signal.signalKind == 4) { Start = 0; if (PP > 0) { Account1.OrderSell(PutOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } } 2. 옵션매도 var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; function Main_OnStart() { Start = 0; } function Chart1_OnRiseSignal(Signal) { UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= 2.0 && Option.GetCurrent(0, i) >= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= 2.0 && Option.GetCurrent(1, ii) >= 1.0) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } //buy신호 발생시 if (Signal.signalKind == 1) { Start = 1; PP = -1; PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } if (PP > 0) { Account1.OrderSell(PutOrderCode, 1, 0, 1); Main.MessageLog("S신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } else { Main.MessageLog("S신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } //exitlong신호 발생시 if ( Start == 1 && Signal.signalKind == 2) { Start = 0; if (PP > 0) { Account1.OrderBuy(PutOrderCode, 1, 0, 1); Main.MessageLog("S신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } else { Main.MessageLog("S신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } //sell신호 발생시 if (Signal.signalKind == 3) { Start = -1; CC = -1; CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } if (CC > 0) { Account1.OrderSell(CallOrderCode, 1, 0, 1); Main.MessageLog("S신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } else { Main.MessageLog("S신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } // Exitshort신호 발생시 if (Start == -1 && Signal.signalKind == 4) { Start = 0; if (CC > 0) { Account1.OrderBuy(CallOrderCode, 1, 0, 1); Main.MessageLog("S신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } else { Main.MessageLog("S신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } }
프로필 이미지
털보
2013-04-30
1863
글번호 222336