커뮤니티

문의드립니다.

프로필 이미지
지나리
2014-05-09 13:17:13
1024
글번호 222968
답변완료
1. 조건 만족 시 아래와 같은 수식을 사용하여 콜옵션을 매수하고 있는데요. "등가 +1 항목인 당월물 콜옵션을 시장가에 300만원만큼의 수량으로 매수한다" Callcode = Option.GetATMCallRecent(1, 0); Bvol = Math.round((3000000/(Option.GetCurrentByCode(Callcode)*500000))); A1.OrderBuy(Callcode, Bvol, Option.GetAskByCode(Callcode, 3), 0); 2. 조건 만족 시 상기 식을 다음과 같이 수정 부탁드립니다. (1) "당월물 콜옵션 중 2에 가까운 콜옵션을 시장가에 300만원만큼의 수량으로 매수한다" (2) "당월물 풋옵션 중 2에 가까운 풋옵션을 시장가에 300만원만큼의 수량으로 매수한다" 감사합니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-05-15 17:48:07

안녕하세요 예스스탁입니다. 1. 예 정상적으로 작성되었습니다. 다만 round는 반올림이 되므로 floor를 사용하시는게 좋습니다. Callcode = Option.GetATMCallRecent(1, 0); Bvol = Math.floor((3000000/(Option.GetCurrentByCode(Callcode)*500000))); A1.OrderBuy(Callcode, Bvol, Option.GetAskByCode(Callcode, 3), 0); 2. 아래식 참고하시기 바랍니다. 차트에서 매수신호 발생하면 2.5이하 콜/풋 옵션을 골라 매수 차트에서 매도신호 발생하면 2.5이하 콜/풋 옵션을 골라 매도 하는 식입니다. //스크립트 객체설정 //chart1 차트객체 //Option 객체 //Account1 계좌객체 var S1; var Entry; var CallOrderCode; var PutOrderCode; function Main_OnStart() { S1 = 0; Entry = 0; Main.MessageLog("시작"); } function Chart1_OnRiseSignal(Signal) { S1 = Signal.signalKind; //Buy신호 발생하면 양옵션매수(2.5이하중 가장 큰 종목)) if (S1 == 1 ) { var UNum = Option.uppersATM; var LNum = Option.lowersATM; var CallCode = new Array(UNum+LNum+1); var CallPrice = new Array(UNum+LNum+1); var PutCode = new Array(UNum+LNum+1); var PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= 2.5)//2.5지정 { 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.5)//2.5 지정 { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } var CC = -1; CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } var 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 (CC > 0 && PP > 0) { Entry = 1; Account1.OrderBuy(CallOrderCode, 1,Option.GetAskByCode(CallOrderCode, 3), 0); Account1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 3), 0); } } //매수진입 중에 exitlong신호 발생하면 buy신호시 매수한 양옵션 청산 if (Entry == 1 && S1 == 2) { Account1.OrderSell(CallOrderCode, 1,Option.GetBidByCode(CallOrderCode, 3), 0); Account1.OrderSell(PutOrderCode, 1, Option.GetBidByCode(PutOrderCode, 3), 0); } //Sell신호 발생하면 양옵션매도(2.5이하 중 가장 큰 종목)) if (S1 == 3) { var UNum = Option.uppersATM; var LNum = Option.lowersATM; var CallCode = new Array(UNum+LNum+1); var CallPrice = new Array(UNum+LNum+1); var PutCode = new Array(UNum+LNum+1); var PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= 2.5)// 2.5 지정 { 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.5 )//2.5지정 { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } var CC = -1; CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } var 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 (CC > 0 && PP > 0) { Entry = -1; Account1.OrderSell(CallOrderCode, 1,Option.GetBidByCode(CallOrderCode, 3), 0); Account1.OrderSell(PutOrderCode, 1, Option.GetBidByCode(PutOrderCode, 3), 0); } } //매수진입 중에 exitshort신호 발생하면 sell신호시 매도한 양옵션 청산 if (Entry == -1 && S1 == 4) { Account1.OrderBuy(CallOrderCode, 1,Option.GetAskByCode(CallOrderCode, 3), 0); Account1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 3), 0); } } 즐거운 하루되세요 > 지나리 님이 쓴 글입니다. > 제목 : 문의드립니다. > 1. 조건 만족 시 아래와 같은 수식을 사용하여 콜옵션을 매수하고 있는데요. "등가 +1 항목인 당월물 콜옵션을 시장가에 300만원만큼의 수량으로 매수한다" Callcode = Option.GetATMCallRecent(1, 0); Bvol = Math.round((3000000/(Option.GetCurrentByCode(Callcode)*500000))); A1.OrderBuy(Callcode, Bvol, Option.GetAskByCode(Callcode, 3), 0); 2. 조건 만족 시 상기 식을 다음과 같이 수정 부탁드립니다. (1) "당월물 콜옵션 중 2에 가까운 콜옵션을 시장가에 300만원만큼의 수량으로 매수한다" (2) "당월물 풋옵션 중 2에 가까운 풋옵션을 시장가에 300만원만큼의 수량으로 매수한다" 감사합니다.