커뮤니티

문의드립니다.

프로필 이미지
착한이
2014-07-29 18:17:18
1134
글번호 223105
답변완료
안녕하세요. 아래 내용으로 전략식 부탁드립니다. // 예스트레이더의 선물 매수매도시 합성선물 매수/매도 // 3.0 이하의 콜옵션과 풋옵션중에 델타 0.5에 가장 근접하는 콜/풋 종목을 찾고 // 선물매수신호 -> 합성선물매수(콜매수 and 풋매도) // 선물매도신호 -> 합성선물매수(콜매도 and 풋매수) // 선물청산신호 -> 합성선물청산 // 리버스주문으로 반대포지션 진입시 보유종목 청산후 그 시점에서 3.0 이하의 델타 0.5 종목 진입 // 오후 3시 잔고청산기능(미청산종목보유시) // 모든주문은 시장가 // 옵션수량 조절가능하도록 감사합니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-08-05 15:16:22

안녕하세요 예스스탁입니다. 예스스팟의 수식답변은 가이드 입니다. 아래내용 참고하셔서 수정 보완해 사용하시기 바랍니다. 스크립트 객체화면에서 아래와 같이 설정하고 식 적용하셔야 합니다. 차트객체 추가 --> 속성에서 객체명 Chart1, 아이디 지정 계좌객체 추가 --> 속성에서 객체명 Account1, 계좌번호 지정 옵션객체 추가 외부변수 추가 --> 속성에서 변수명 Vol, 초기값 1, 데이터형 숫자 var Start; var CC, CallOrderCode; var PP, PutOrderCode; function Main_OnStart() { Start = 0; Main.SetTimer(1, 5000); } function Chart1_OnRiseSignal(Signal) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (Signal.signalKind == 1 && HHMMSS < 150000) { 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) <= 3.0 && Option.GetDelta(0,i) != 0) { CallPrice[i+LNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(0,i))); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = 999999; CallCode[i+LNum] = 999999; } } for (var i = -UNum; i <= LNum; i++) { if (Option.GetCurrent(1, i) <= 3.0 && Option.GetDelta(1,i) != 0 ) { PutPrice[i+UNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(1,i))); PutCode[i+UNum] = Option.GetATMPutRecent(i); } else { PutPrice[i+UNum] = 999999; PutCode[i+UNum] = 999999; } } CC = 999999; CallOrderCode = 999999; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } PP = 999999; PutOrderCode = 999999; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] < PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } if (CC < 999999 && PP < 999999) { Start = 1; Account1.OrderBuy(CallOrderCode, Vol, 0, 1); Account1.OrderSell(PutOrderCode, Vol, 0, 1); } } if (Start == 1 && Signal.signalKind == 2 && HHMMSS < 150000 ) { Start = 0; Account1.OrderSell(CallOrderCode, Vol, 0, 1); Account1.OrderBuy(PutOrderCode, Vol, 0, 1); } if (Signal.signalKind == 3 && HHMMSS < 150000 ) { 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) <= 3.0 && Option.GetDelta(0,i) != 0) { CallPrice[i+LNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(0,i))); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = 999999; CallCode[i+LNum] = 999999; } } for (var i = -UNum; i <= LNum; i++) { if (Option.GetCurrent(1, i) <= 3.0 && Option.GetDelta(1,i) != 0 ) { PutPrice[i+UNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(1,i))); PutCode[i+UNum] = Option.GetATMPutRecent(i); } else { PutPrice[i+UNum] = 999999; PutCode[i+UNum] = 999999; } } CC = 999999; CallOrderCode = 999999; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } PP = 999999; PutOrderCode = 999999; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] < PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } if (CC < 999999 && PP < 999999) { Start = -1; Account1.OrderSell(CallOrderCode, Vol, 0 , 1); Account1.OrderBuy(PutOrderCode, Vol, 0, 1); } } if (Start == -1 && Signal.signalKind == 4 && HHMMSS < 150000 ) { Start = 0; Account1.OrderBuy(CallOrderCode, Vol, 0, 1); Account1.OrderSell(PutOrderCode, Vol, 0, 1); } } //15시 청산 function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 150000) { Main.KillTimer(1); if (Start == 1) { Start = 0; Account1.OrderSell(CallOrderCode, Vol, 0, 1); Account1.OrderBuy(PutOrderCode, Vol, 0, 1); } if (Start == -1) { Start = 0; Account1.OrderBuy(CallOrderCode, Vol, 0, 1); Account1.OrderSell(PutOrderCode, Vol, 0, 1); } } } 즐거운 하루되세요 > 착한이 님이 쓴 글입니다. > 제목 : 문의드립니다. > 안녕하세요. 아래 내용으로 전략식 부탁드립니다. // 예스트레이더의 선물 매수매도시 합성선물 매수/매도 // 3.0 이하의 콜옵션과 풋옵션중에 델타 0.5에 가장 근접하는 콜/풋 종목을 찾고 // 선물매수신호 -> 합성선물매수(콜매수 and 풋매도) // 선물매도신호 -> 합성선물매수(콜매도 and 풋매수) // 선물청산신호 -> 합성선물청산 // 리버스주문으로 반대포지션 진입시 보유종목 청산후 그 시점에서 3.0 이하의 델타 0.5 종목 진입 // 오후 3시 잔고청산기능(미청산종목보유시) // 모든주문은 시장가 // 옵션수량 조절가능하도록 감사합니다.