커뮤니티

수식작성 부탁드립니다.

프로필 이미지
시고르시고르
2023-03-15 19:56:23.0
1250
글번호 225774
답변완료
1. 차트에서 매수신호발생 >> 매수 수량과 같은 수량으로 1번째 외가격 콜매도. (매도1호가에 주문.3초안에 체결이 되지 않을시 매수1호가에 매도주문으로 변경 아래 주문에서도 같은 방식으로 주문) 2. 차트에서 매수청산 신호 발생 >> 콜옵션 청산 3. 차트에서 매도신호발생 >> 매도 수량과 같은 수량으로 1번째 외가격 풋매도 4. 차트에서 매도청산 신호 발생 >> 풋옵션 청산 5. 3시30분까지 수량이 남아있으면 청산주문 발생 스팟언어가 익숙치 않아 부득이 부탁드리게 되었습니다. 감사합니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-04-06 11:42:56.0

안녕하세요 예스스탁입니다. 아래 내용을 참고하시기 바랍니다. 스크립트 객체설정 차트객체추가 --> 객체명 Chart1, 차트와 동일 아이디 지정 옵션객체추가 --> 객체명 Option1, 코스피200지수옵션으로 지정 계좌객체추가 --> 객체명 Account1, 주문낼 계좌번호 지정 var CallOrderCode, PutOrderCode; var BVOL,BID,BNUM,SVOL,SID,SNUM; var BXVOL,BXID,BXNUM,SXVOL,SXID,SXNUM; //스팟시작 이벤트 function Main_OnStart() { Main.MessageList("Start"); } //신호발생 이벤트 function Chart1_OnRiseSignal(Signal) { //매수진입신호 if (Signal.signalKind == 1) { //+1외가격 콜옵션 CallOrderCode = Option1.GetATMCallRecent(1); BVOL = Signal.count; //매수1호가로 매수주문 BID = Account1.OrderBuy(CallOrderCode, BVOL, Option1.GetBid(CallOrderCode, 1), 0); //1번 타이머 3초 셋팅 Main.SetTimer(1, 3000); } //매수청산신호 if (BVOL > 0 && Signal.signalKind == 2) { //청산수량은 진입수량 BXVOL = BVOL; //진입주문 미체결 셋팅 Account1.SetUnfill(BNUM); //미체결이 있으면 if (Account1.Unfill.count > 0) { //진입수량에서 미체결수량 차감해서 청산수량 산정 BXVOL = BVOL-Account1.Unfill.count; //미체결 진입주문은 취소 Account1.OrderCancel(BNUM); } //청산수량이 있으면 if (BXVOL > 0) { //매도 1호가로 매도주문 Account1.OrderSell(CallOrderCode, BXVOL, Option1.GetAsk(CallOrderCode, 1), 0); //2번 타이머 3초 셋팅 Main.SetTimer(2, 3000); } } //매도진입신호이면 if (Signal.signalKind == 3) { //1외가격 풋옵션 PutOrderCode = Option1.GetATMPutRecent(1); SVOL = Signal.count; //매도1호가로 매도주문 SID = Account1.OrderSell(PutOrderCode, SVOL, Option1.GetAsk(PutOrderCode, 1), 0); //3번 타이머 3초 셋팅 Main.SetTimer(3, 3000); } //매도청산신호 if (SVOL > 0 && Signal.signalKind == 4) { //청산수량은 진입수량 SXVOL = SVOL; //진입주문 미체결 셋팅 Account1.SetUnfill(SNUM); //미체결이 있으면 if (Account1.Unfill.count > 0) { //진입수량에서 미체결수량 차감해서 청산수량 산정 SXVOL = SVOL-Account1.Unfill.count; //미체결 진입주문은 취소 Account1.OrderCancel(SNUM); } //청산수량이 있으면 if (SXVOL > 0) { //매수1호가로 매수주문 Account1.OrderBuy(PutOrderCode, BXVOL, Option1.GetBid(PutOrderCode, 1), 0); //4번 타이머 3초 셋팅 Main.SetTimer(4, 3000); } } } //주문응답 이벤트 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID) { BNUM = OrderResponse.orderNum; } if (OrderResponse.orderID == BXID) { BXNUM = OrderResponse.orderNum; } if (OrderResponse.orderID == SID) { SNUM = OrderResponse.orderNum; } if (OrderResponse.orderID == SXID) { SXNUM = OrderResponse.orderNum; } } //타이머 이벤트 function Main_OnTimer(nEventID) { //1번 타이머 동작 if (nEventID == 1) { //1번 타이머 종료 Main.KillTimer(1); //매수진입주문 미체결셋팅 Account1.SetUnfill(BNUM); //미체결수량이 있으면 if (Account1.Unfill.count > 0) { //매도1호가로 정정 Account1.OrderReplacePrice(BNUM,Option1.GetAsk(Account1.Unfill.code, 1)) } } //2번 타이머 동작 if (nEventID == 2) { //2번 타이머 종료 Main.KillTimer(2); //매수청산주문 미체결셋팅 Account1.SetUnfill(BXNUM); //미체결수량이 있으면 if (Account1.Unfill.count > 0) { //매수1호가로 정정 Account1.OrderReplacePrice(BXNUM,Option1.GetBid(Account1.Unfill.code, 1)) } } //3번 타이머 동작 if (nEventID == 3) { //3번 타이머 종료 Main.KillTimer(3); //매도진입주문 미체결셋팅 Account1.SetUnfill(SNUM); //미체결수량이 있으면 if (Account1.Unfill.count > 0) { //매수1호가로 정정 Account1.OrderReplacePrice(SNUM,Option1.GetBid(Account1.Unfill.code, 1)) } } //4번 타이머 동작 if (nEventID == 4) { //4번 타이머 종료 Main.KillTimer(1); //매도청산주문 미체결셋팅 Account1.SetUnfill(SXNUM); //미체결수량이 있으면 if (Account1.Unfill.count > 0) { //매도1호가로 정정 Account1.OrderReplacePrice(SXNUM,Option1.GetAsk(Account1.Unfill.code, 1)) } } } 즐거운 하루되세요 > 시고르시고르 님이 쓴 글입니다. > 제목 : 수식작성 부탁드립니다. > 1. 차트에서 매수신호발생 >> 매수 수량과 같은 수량으로 1번째 외가격 콜매도. (매도1호가에 주문.3초안에 체결이 되지 않을시 매수1호가에 매도주문으로 변경 아래 주문에서도 같은 방식으로 주문) 2. 차트에서 매수청산 신호 발생 >> 콜옵션 청산 3. 차트에서 매도신호발생 >> 매도 수량과 같은 수량으로 1번째 외가격 풋매도 4. 차트에서 매도청산 신호 발생 >> 풋옵션 청산 5. 3시30분까지 수량이 남아있으면 청산주문 발생 스팟언어가 익숙치 않아 부득이 부탁드리게 되었습니다. 감사합니다.