커뮤니티

문의

프로필 이미지
털보
2013-04-02 09:53:33
2015
글번호 222291
답변완료
아래 스팟식은 잘 사용중에 있습니다. 약간 응용하여 추가로 문의를 드립니다. 예제) 1. 선물신호에 옵션 매도 주문(2.0에 가장 근접한 종목) 2. 수익신호에는 진입한 옵션 매도 청산 3.손절 신호에만 손절 청산을 하는 게 아니라 반대옵션 매도(반드시 손절 신호에만) 4. 양 매도(포지션)구축이 되면 (손실금-백만 원) 도달시 자동 손절 청산 5. 양매도 구축시 당일 3시 청산 요약해 보면 수익일땐 네이키드 청산. 손절(손실일 땐)엔 양 매도 포지션 =============================================================== //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); } } }
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2013-04-05 16:42:34

안녕하세요 예스스탁입니다. 시간이 다소 걸릴것 같습니다. 다음주 중에 작성해서 올려드리도록 하겠습니다. 즐거운 하루되세요 > 털보 님이 쓴 글입니다. > 제목 : 문의 > 아래 스팟식은 잘 사용중에 있습니다. 약간 응용하여 추가로 문의를 드립니다. 예제) 1. 선물신호에 옵션 매도 주문(2.0에 가장 근접한 종목) 2. 수익신호에는 진입한 옵션 매도 청산 3.손절 신호에만 손절 청산을 하는 게 아니라 반대옵션 매도(반드시 손절 신호에만) 4. 양 매도(포지션)구축이 되면 (손실금-백만 원) 도달시 자동 손절 청산 5. 양매도 구축시 당일 3시 청산 요약해 보면 수익일땐 네이키드 청산. 손절(손실일 땐)엔 양 매도 포지션 =============================================================== //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-11 13:12:28

안녕하세요 예스스탁입니다. 차트에 매수신호 발생하면 2.0 이하 중 가장 큰 풋옵션 매도하고 매도신호 발생하면 2.0 이하 중 가장 큰 콜옵션 매도합니다. 매수청산신호 발생시 신호상 수익이면 풋옵션 매도청산하고 손실이면 행사가의 반대 콜옵션을 매도합니다. 매도청산신호 발생시 신호상 수익이면 콜옵션 매도청산하고 손실이면 행사가의 반대 픗옵션을 매도합니다. 각 청산후 양매도상태이면 손실 100만원 발생하면 모두 청산합니다. 기본틀이므로 테스트 충분히 하신후에 수정보완해 사용하시기 바랍니다. 옵션객체 차트객체 : 객체명 chart1 --> 속송에서 차트아이디 차트와 동일하게 부여 계좌객체 : 객체명 Account1 --> 속성에서 계좌지정 var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; var CallOrderCodeR; var PutOrderCodeR; var BuyEntryPrice; var SellEntryPrice; var BuyStep; var SellStep; function Main_OnStart() { Start = 0; BuyStep = 0; SellStep = 0; Main.SetTimer(1, 10000); } 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) { 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) { 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; PutOrderCodeR = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; //2.0이하 중 가장 큰 풋옵션의 종목코드 PutOrderCodeR = Option.GetATMCallRecent(-iiii); //반대 콜옵션의 종목코드 } } if (PP > 0) { Account1.OrderSell(PutOrderCode, 1, 0, 1); BuyEntryPrice = Signal.price; //매수신호시 신호가격 BuyStep = 1; Main.MessageLog("차트신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } else { Main.MessageLog("차트신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } //exitlong신호 발생시 if ( Start == 1 && Signal.signalKind == 2) { Start = 0; if (PP > 0 && Signal.price > BuyEntryPrice) //차트신호 수익 { Account1.OrderBuy(PutOrderCode, 1, 0, 1); BuyStep = 0; Main.MessageLog("차트신호종류: 수익:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } if (PP > 0 && Signal.price < BuyEntryPrice)//차트신호 손실 { Account1.OrderSell(PutOrderCodeR, 1, 0, 1); BuyStep = 2; Main.MessageLog("차트신호종류 : 손실:"+Signal.signalKind+" /종목코드:"+PutOrderCodeR+" /START:"+Start); } } //sell신호 발생시 if (Signal.signalKind == 3) { Start = -1; CC = -1; CallOrderCode = -1; CallOrderCodeR = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum]; //2.0이하 중 가장큰 콜종목의 종목코드 CallOrderCodeR = Option.GetATMPutRecent(-iii) //반대 풋옵션의 종목코드 } } if (CC > 0) { Account1.OrderSell(CallOrderCode, 1, 0, 1); SellStep = 1; Main.MessageLog("차트신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } else { Main.MessageLog("차트신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } // Exitshort신호 발생시 if (Start == -1 && Signal.signalKind == 4) { Start = 0; if (CC > 0 && Signal.price < SellEntryPrice)//차트신호수익 { Account1.OrderBuy(CallOrderCode, 1, 0, 1); SellStep = 0; Main.MessageLog("차트신호종류: 수익 : "+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } if (CC > 0 && Signal.price > SellEntryPrice)//차트신호손실 { Account1.OrderSell(CallOrderCodeR, 1, 0, 1); SellStep = 2; Main.MessageLog("차트신호종류: 손"+Signal.signalKind+" /종목코드:"+CallOrderCodeR+" /START:"+Start); } } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (BuyStep == 2) { var TotalPL = 0; Account1.SetBalanceItem(PutOrderCode, 1); TotalPL = TotalPL + (Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count*500000; Account1.SetBalanceItem(PutOrderCodeR, 1); TotalPL = TotalPL + (Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count*500000; if (TotalPL <= -1000000) { Account1.SetBalanceItem(PutOrderCode, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); Account1.SetBalanceItem(PutOrderCodeR, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); BuyStep = 0; } } if (SellStep == 2) { var TotalPL = 0; Account1.SetBalanceItem(CallOrderCode, 1); TotalPL = TotalPL + (Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count*500000; Account1.SetBalanceItem(CallOrderCodeR, 1); TotalPL = TotalPL + (Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count*500000; if (TotalPL <= -1000000) { SellStep = 0; Account1.SetBalanceItem(CallOrderCode, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); Account1.SetBalanceItem(CallOrderCodeR, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); } } //15시 분에 종목청산 if (nEventID == 1 && HHMMDD >= 150000) { Main.KillTimer(1); if (BuyStep == 2) { Account1.SetBalanceItem(PutOrderCode, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); Account1.SetBalanceItem(PutOrderCodeR, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); BuyStep = 0; } if (SellStep == 2) { Account1.SetBalanceItem(CallOrderCode, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); Account1.SetBalanceItem(CallOrderCodeR, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); SellStep = 0; } } } 즐거운 하루되세요 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 문의 > 안녕하세요 예스스탁입니다. 시간이 다소 걸릴것 같습니다. 다음주 중에 작성해서 올려드리도록 하겠습니다. 즐거운 하루되세요 > 털보 님이 쓴 글입니다. > 제목 : 문의 > 아래 스팟식은 잘 사용중에 있습니다. 약간 응용하여 추가로 문의를 드립니다. 예제) 1. 선물신호에 옵션 매도 주문(2.0에 가장 근접한 종목) 2. 수익신호에는 진입한 옵션 매도 청산 3.손절 신호에만 손절 청산을 하는 게 아니라 반대옵션 매도(반드시 손절 신호에만) 4. 양 매도(포지션)구축이 되면 (손실금-백만 원) 도달시 자동 손절 청산 5. 양매도 구축시 당일 3시 청산 요약해 보면 수익일땐 네이키드 청산. 손절(손실일 땐)엔 양 매도 포지션 =============================================================== //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); } } }