커뮤니티

문의드립니다.

프로필 이미지
극동해
2013-10-27 19:56:26
1127
글번호 222665
답변완료
다음과 같이 선물챠트를 이용해서 옵션을 거래를 하고자 하는데요.. 예스스팟 수식 전환을 부탁드립니다. 답변 감사드립니다. ================================================================= 1. 진입 선물챠트A 그리고 선물챠트B 그리고 선물챠트C에서 매수신호가 발생하면 등가+2 당월물 콜옵션을 시장가로 600만원어치 매수한다. 2. 청산 (1) 선물챠트A 또는 선물챠트B에서 매도신호가 발생하면 현재 잔고상 보유 콜옵션을 전량 청산한다. (2) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 0.5pt이상 상승을 한 후, 진입한 선물가격으로 다시 하락하면 잔고상 보유 콜옵션 전량 청산한다.(본절처리) (3) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 0.9pt상승하면 진입시점에 매수한 콜옵션 수량의 30%를 청산한다. (4) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 1.5pt상승하면 진입시점에 매수한 콜옵션 수량의 30%를 청산한다. (5) 선물챠트D에서 매수 익절신호가 발생하면 진입시점에 매수한 콜옵션 수량의 40%를 청산한다. 3. 거래시간 제한 당일 오후 12시 30분 이후부터 챠트에서 발생하는 신호는 진입하지 않는다.(당일 오후 12시 30분에 청산한다는 것이 아니라 새로운 진입을 금지하는 것임) 풋옵션 거래는 이와 반대로 하면 될 것 같은데요. 감사합니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-10-30 17:58:16

안녕하세요 예스스탁입니다. 예스스팟의 답변은 저희쪽에서 가이드만 제송합니다. 아래 내용 참고하셔서 수정/보완해 사용하시기 바랍니다. 스크립트 객체설정 차트객체 4개 --> 객체명 Chart1, Chart2, Chart3, Chart4 옵션객체 계좌객체 --> 객체명 Account1 종목객체 --> 객체명 MarketData1 --> 선물지정 수식내 게시판 금칙어가 있습니다. ₩ 영문 업데이트가 Up*date로 작성이 되어 있으므로 별표 제거하시기 바랍니다. var Start; var S1, S2, S3, S4; var BuyCode, Bvol; var BC, BH; var BxCond1,BxCond2,BxCond3; var SellCode, Svol; var SC, SL; var SxCond1,SxCond2,SxCond3; function Main_OnStart() { Start = 0; } //A차트 function Chart1_OnRiseSignal(Signal) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); S1 = Signal.signalKind; if (Start == 0 && S1 == 1 && S2 == 1 && S3 == 1 && HHMMSS <= 123000) { Start = 1; BuyCode = Option.GetATMCallRecent(2, 0); Bvol = Math.round((6000000/(Option.GetCurrentByCode(BuyCode)*500000))); Account1.OrderBuy(BuyCode,Bvol,0,1); BC = MarketData1.current; BH = MarketData1.current; BxCond1 = false; BxCond2 = false; BxCond3 = false; } if (Start == 1 && (S1 == 2 || S1 == 3)) { Account1.SetBalanceItem(BuyCode, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(BuyCode, Account1.Balance.count, 0,1); Start = 0; } } if (Start == 0 && S1 == 3 && S2 == 3 && S3 == 3 && HHMMSS <= 123000) { Start = -1; SellCode = Option.GetATMPutRecent(2, 0); Svol = Math.round((6000000/(Option.GetCurrentByCode(SellCode)*500000))); Account1.OrderSell(SellCode,Svol,0,1); SC = MarketData1.current; SL = MarketData1.current; SxCond1 = false; SxCond2 = false; SxCond3 = false; } if (Start == -1 && (S1 == 4 || S1 == 1)) { Account1.SetBalanceItem(SellCode, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(SellCode, Account1.Balance.count, 0,1); Start = 0; } } } //B차트 function Chart2_OnRiseSignal(Signal) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); S2 = Signal.signalKind; if (Start == 0 && S1 == 1 && S2 == 1 && S3 == 1 && HHMMSS <= 123000) { Start = 1; BuyCode = Option.GetATMCallRecent(2, 0); Bvol = Math.round((6000000/(Option.GetCurrentByCode(BuyCode)*500000))); Account1.OrderBuy(BuyCode,Bvol,0,1); BC = MarketData1.current; BH = MarketData1.current; BxCond1 = false; BxCond2 = false; BxCond3 = false; } if (Start == 1 && (S1 == 2 || S1 == 3)) { Account1.SetBalanceItem(BuyCode, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(BuyCode, Account1.Balance.count, 0,1); Start = 0; } } if (Start == 0 && S1 == 3 && S2 == 3 && S3 == 3) { Start = -1; SellCode = Option.GetATMPutRecent(2, 0); Svol = Math.round((6000000/(Option.GetCurrentByCode(SellCode)*500000))); Account1.OrderSell(SellCode,Svol,0,1); SC = MarketData1.current; SL = MarketData1.current; SxCond1 = false; sxCond2 = false; SxCond3 = false; } if (Start == 1 && (S1 == 4 || S1 == 1)) { Account1.SetBalanceItem(SellCode, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(SellCode, Account1.Balance.count, 0,1); Start = 0; } } } //C차트 function Chart3_OnRiseSignal(Signal) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); S3 = Signal.signalKind; if (Start == 0 && S1 == 1 && S2 == 1 && S3 == 1 && HHMMSS <= 123000) { Start = 1; BuyCode = Option.GetATMCallRecent(2, 0); Bvol = Math.round((6000000/(Option.GetCurrentByCode(BuyCode)*500000))); Account1.OrderBuy(BuyCode,Bvol,0,1); BC = MarketData1.current; BH = MarketData1.current; BxCond1 = false; BxCond2 = false; BxCond3 = false; } if (Start == 0 && S1 == 3 && S2 == 3 && S3 == 3) { Start = 1; SellCode = Option.GetATMPutRecent(2, 0); Svol = Math.round((6000000/(Option.GetCurrentByCode(SellCode)*500000))); Account1.OrderSell(SellCode,Svol,0,1); SC = MarketData1.current; SL = MarketData1.current; SxCond1 = false; SxCond2 = false; SxCond3 = false; } } //D차트 function Chart4_OnRiseSignal(Signal) { S4 = Signal.signalKind; if (Start == 1 && S4 == 2 && Signal.name == "StopProfittarget" && BxCond3 == false) { Bxcond3 = true; Account1.SetBalanceItem(BuyCode, 0); if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { if (Math.round(Bvol*0.4) < Account1.Balance.count ) { Account1.OrderSell(BuyCode,Math.round(Bvol*0.4),0,1); } if (Math.round(Bvol*0.4) >= Account1.Balance.count ) { Account1.OrderSell(BuyCode,Account1.Balance.count, 0,1); Start = 0; } } } if (Start == -1 && S4 == 4 && Signal.name == "StopProfittarget" && SxCond3 == false) { Sxcond3 = true; Account1.SetBalanceItem(BuyCode, 0); if (Account1.Balance.position == 1 && Account1.Balance.count > 0) { if (Math.round(Svol*0.4) < Account1.Balance.count ) { Account1.OrderBuy(SellCode,Math.round(Svol*0.4),0,1); } if (Math.round(Svol*0.4) >= Account1.Balance.count) { Account1.OrderBuy(SellCode,Account1.Balance.count, 0,1); Start = 0; } } } } function Main_OnUp*dateMarket(sItemCode, lUp*dateID)*제거 { if (Start == 1 && lUp*dateID == 20001)*제거 { if (MarketData1.current >= BH) { BH = MarketData1.current; } if (BH >= BC+0.5 && MarketData1.current <= BC) { Account1.SetBalanceItem(BuyCode, 0); if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { Account1.OrderSell(BuyCode, Account1.Balance.count,0,1); Start = 0; } } if (MarketData1.current >= BC+0.9 && BxCond1 == false) { BxCond1 = true; Account1.SetBalanceItem(BuyCode, 0); if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { if (Math.round(Bvol*0.3) < Account1.Balance.count) { Account1.OrderSell(BuyCode,Math.round(Bvol*0.3),0,1); } if (Math.round(Bvol*0.3) >= Account1.Balance.count) { Account1.OrderSell(BuyCode,Account1.Balance.count, 0,1); Start = 0; } } } if (MarketData1.current >= BC+1.5 && BxCond2 == false ) { BxCond2 = true; Account1.SetBalanceItem(BuyCode, 0); if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { if (Math.round(Bvol*0.3) < Account1.Balance.count) { Account1.OrderSell(BuyCode,Math.round(Bvol*0.3),0,1); } if (Math.round(Bvol*0.3) >= Account1.Balance.count) { Account1.OrderSell(BuyCode,Account1.Balance.count, 0,1); Start = 0; } } } } if (Start == -1 && lUp*dateID == 20001)//*제거 { if (MarketData1.current <= SL) { SL = MarketData1.current; } if (SL <= SC-0.5 && MarketData1.current >= SC) { Account1.SetBalanceItem(SellCode, 0); if (Account1.Balance.position == 1 && Account1.Balance.count > 0) { Account1.OrderBuy(SellCode, Account1.Balance.count,0,1); Start = 0; } } if (MarketData1.current <= SC-0.9 && SxCond1 == false) { Account1.SetBalanceItem(SellCode, 0); if (Account1.Balance.position == 1 && Account1.Balance.count > 0) { SxCond1 = true; if (Math.round(Svol*0.3) < Account1.Balance.count ) { Account1.OrderBuy(SellCode,Math.round(Svol*0.3),0,1); } if (Math.round(Svol*0.3) >= Account1.Balance.count ) { Account1.OrderBuy(SellCode,Account1.Balance.count, 0,1); Start = 0; } } } if (MarketData1.current <= SC-1.5 && SxCond2 == false ) { Account1.SetBalanceItem(SellCode, 0); if (Account1.Balance.position == 1 && Account1.Balance.count > 0) { SxCond2 = true; if (Math.round(Svol*0.3) < Account1.Balance.count ) { Account1.OrderBuy(SellCode,Math.round(Svol*0.3),0,1); } if (Math.round(Svol*0.3) >= Account1.Balance.count ) { Account1.OrderBuy(SellCode,Account1.Balance.count, 0,1); Start = 0; } } } } } 즐거운 하루되세요 > 극동해 님이 쓴 글입니다. > 제목 : 문의드립니다. > 다음과 같이 선물챠트를 이용해서 옵션을 거래를 하고자 하는데요.. 예스스팟 수식 전환을 부탁드립니다. 답변 감사드립니다. ================================================================= 1. 진입 선물챠트A 그리고 선물챠트B 그리고 선물챠트C에서 매수신호가 발생하면 등가+2 당월물 콜옵션을 시장가로 600만원어치 매수한다. 2. 청산 (1) 선물챠트A 또는 선물챠트B에서 매도신호가 발생하면 현재 잔고상 보유 콜옵션을 전량 청산한다. (2) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 0.5pt이상 상승을 한 후, 진입한 선물가격으로 다시 하락하면 잔고상 보유 콜옵션 전량 청산한다.(본절처리) (3) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 0.9pt상승하면 진입시점에 매수한 콜옵션 수량의 30%를 청산한다. (4) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 1.5pt상승하면 진입시점에 매수한 콜옵션 수량의 30%를 청산한다. (5) 선물챠트D에서 매수 익절신호가 발생하면 진입시점에 매수한 콜옵션 수량의 40%를 청산한다. 3. 거래시간 제한 당일 오후 12시 30분 이후부터 챠트에서 발생하는 신호는 진입하지 않는다.(당일 오후 12시 30분에 청산한다는 것이 아니라 새로운 진입을 금지하는 것임) 풋옵션 거래는 이와 반대로 하면 될 것 같은데요. 감사합니다.