커뮤니티

문의 드립니다.

프로필 이미지
무명
2013-11-06 05:32:28
868
글번호 222700
답변완료
1. 아래는 게시판에 올라와 있는 스팟로직입니다. 선물신호로 옵션을 매매하는 로직으로 알고 있습니다. 아래 수식은 선물매수신호 발생하면 콜옵션등가 매수, 선물매도신호 발생하면 풋옵션등가매수식인데,,, 반대로 선물매수신호 발생하면 콜옵션등가 매도, 선물매도신호 발생하면 풋옵션등가 매도할 수 있도록 수정부탁드립니다. 2. 당일매매나 오버매매에 동일하게 진입/청산될 수 있도록 하고... 예스트레이더 선물신호와 동일한 진입계약수로 진입/청산될 수 있도록 부탁드립니다. 3. 예스스팟 처음사용자라서 그러는데 위의 로직을 가지고 실제 매매를 하기위한 객체추가등의 절차와 방법등을 알려주시면 감사하겠습니다. 안녕하세요 예스스탁입니다. 전화로 답변드린 부분에서 좀더 강화하여 스팟 적용시점에 UserValue의 BuyCall와 BuyPut에 종목코드가 저장되어 있고 해당 종목코드의 종목이 실제 잔고에도 있으면 적용시점 이후에 최초 신호가 청산일때도 신호가 발생하게 했습니다. 아래식으로 테스트 해 보시기 바랍니다. var BStart = 0; var SStart = 0; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; function Main_OnStart() { Main.MessageList("시작"); var AA = Main.GetUserValue("BuyCall"); if (AA == "") { BStart = 0; Main.MessageList("UserValue의 BuyCall - 저장된 종목코드 없음"); } else { A1.SetBalanceItem(AA,0); if (A1.Balance.count > 0) { BStart = 1; BuyCallCode = AA; Main.MessageList("UserValue의 BuyCall - : ",BuyCallCode); } } var BB = Main.GetUserValue("BuyPut"); if (BB == "") { SStart = 0; Main.MessageList("UserValue의 BuyPut - 저장된 종목코드 없음"); } else { A1.SetBalanceItem(BB,0); if (A1.Balance.count > 0) { SStart = 1; BuyPutCode = BB; Main.MessageList("UserValue의 BuyPut - : ",BuyPutCode,"계좌에도 해당 종목 있음"); } } Main.MessageList(BStart,SStart); } function C1_OnRiseSignal(Signal) { Kind = Signal.signalKind; Main.MessageLog("신호완성/"+Kind); //선물차트에서 매수신호발생하면 콜 매수 if (Signal.signalKind ==1) { BStart = 1; BuyCallCode = Option.GetATMCallRecent(0);//ATM콜 종목코드 var BuyCallPrice = Option.GetBidByCode(BuyCallCode, 2);//ATM콜 매수2호가 A1.OrderBuy(BuyCallCode, vol, BuyCallPrice, 0); Main.MessageLog("등가콜매수 : "+BuyCallCode); //주문 후 내부파일에 콜종목코드를 BuyCall이름으로 저장 Main.SetUserValue("BuyCall",BuyCallCode); } //선물차트에서 매도신호발생하면 풋 매수 if (Signal.signalKind ==3) { SStart =1; BuyPutCode = Option.GetATMPutRecent(0);//ATM풋 종목코드 var BuyPutPrice = Option.GetBidByCode(BuyPutCode, 2);//ATM풋 매수 2호가 A1.OrderBuy(BuyPutCode, vol, BuyPutPrice, 0); Main.MessageLog("등가풋매수 : "+BuyPutCode); //주문 후 내부파일에 풋종목코드를 BuyPut이름으로 저장 Main.SetUserValue("BuyPut",BuyCallCode); } if (BStart == 1 && Signal.signalKind == 2)//선물차트 매수 청산신호발생하면 콜 매수 청산 { var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2); A1.OrderSell(BuyCallCode, vol, BxCallPrice, 0); Main.MessageLog("등가콜청산 : "+BuyCallCode); // 매수청산 주문후 내부파일의 BuyCall의 값을 ""저장(공백) Main.SetUserValue("BuyCall",""); } if (SStart == 1 && Signal.signalKind == 4)//선물차트 매도 청산신호발생하면 풋 매수 청산 { var BxPutPrice = Option.GetBidByCode(BuyPutCode, 2); A1.OrderSell(BuyPutCode, vol, BxPutPrice, 0); Main.MessageLog("등가풋청산 : "+BuyPutCode); // 매수청산 주문후 내부파일의 BuyPut의 값을 ""저장(공백) Main.SetUserValue("BuyPut",""); } } 즐거운 하루되세요 > 몬자 님이 쓴 글입니다. > 제목 : Re : Re : 스팟문의드립니다. > 답변감사합니다. 매수주문 완료되고, 프로그램 재접속 후 시험적용으로 확인하는도중 주문가격과 종목코드에서 이상한 결과가 나옵니다. 위 그림과 같이 매수 주문가격 1.46 매도 주문가격 1.-2147483648 주문가격과 종목코드가 이상합니다. 어떻게 된 것인지 궁금합니다. 고민 중에 SetBalance 함수를 이용하면 될 것 같은데 많이 어렵습니다. 번거롭게 질문이 잦아 죄송합니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 스팟문의드립니다. > 안녕하세요 예스스탁입니다. 아래식 참고하시기 바랍니다. SetUserValue함수와 GetUserValue 함수를 이용해 처리했습니다. 주석 참고하시기 바랍니다. //아래 전략은 기존 수식입니다. var BStart; var SStart; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; function Main_OnStart() { Main.MessageLog("시작"); SStart = 0; //스팟 적용시에 BuyCall값을 불러와 공백이면 0 아니면 1 var AA = Main.GetUserValue("BuyCall"); if (AA == "") BStart = 0; else BStart = 1; //스팟 적용시에 BuyPut값을 불러와 공백이면 0 아니면 1 var BB = Main.GetUserValue("BuyPut"); if (BB == "") SStart = 0; else SStart = 1; } function C1_OnRiseSignal(Signal) { Kind = Signal.signalKind; Main.MessageLog("신호완성/"+Kind); //선물차트에서 매수신호발생하면 콜 매수 if (Signal.signalKind ==1) { BStart = 1; BuyCallCode = Option.GetATMCallRecent(0);//ATM콜 종목코드 var BuyCallPrice = Option.GetBidByCode(BuyCallCode, 2);//ATM콜 매수2호가 A1.OrderBuy(BuyCallCode, vol, BuyCallPrice, 0); Main.MessageLog("등가콜매수 : "+BuyCallCode); //주문 후 내부파일에 콜종목코드를 BuyCall이름으로 저장 Main.SetUserValue("BuyCall",BuyCallCode); } //선물차트에서 매도신호발생하면 풋 매수 if (Signal.signalKind ==3) { SStart =1; BuyPutCode = Option.GetATMPutRecent(0);//ATM풋 종목코드 var BuyPutPrice = Option.GetBidByCode(BuyPutCode, 2);//ATM풋 매수 2호가 A1.OrderBuy(BuyPutCode, vol, BuyPutPrice, 0); Main.MessageLog("등가풋매수 : "+BuyPutCode); //주문 후 내부파일에 풋종목코드를 BuyPut이름으로 저장 Main.SetUserValue("BuyPut"",BuyCallCode); } if (BStart == 1 && Signal.signalKind == 2)//선물차트 매수 청산신호발생하면 콜 매수 청산 { var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2); A1.OrderSell(BuyCallCode, vol, BxCallPrice, 0); Main.MessageLog("등가콜청산 : "+BuyCallCode); // 매수청산 주문후 내부파일의 BuyCall의 값을 ""저장(공백) Main.SetUserValue("BuyCall",""); } if (SStart == 1 && Signal.signalKind == 4)//선물차트 매도 청산신호발생하면 풋 매수 청산 { var BxPutPrice = Option.GetBidByCode(BuyPutCode, 2); A1.OrderSell(BuyPutCode, vol, BxPutPrice, 0); Main.MessageLog("등가풋청산 : "+BuyPutCode); // 매수청산 주문후 내부파일의 BuyPut의 값을 ""저장(공백) Main.SetUserValue("BuyPut",""); } } 즐거운 하루되세요 > 몬자 님이 쓴 글입니다. > 제목 : 스팟문의드립니다. > 선물신호를 받아서 옵션 매수후 2~3 일간 포지션 홀딩시, 다음날(프로그램 재시작) 스팟전략이 디폴트되어 청산식이 제대로 되지 않습니다. 계좌함수를 통해 해결할 수 있다고 들었는데요, 계좌함수를 이용해 선물에서 청산신호 발생시 포지션을 청산하고 싶습니다. 부탁드립니다. //아래 전략은 기존 수식입니다. var BStart; var SStart; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; function Main_OnStart() { Main.MessageLog("시작"); BStart = 0; SStart = 0; } function C1_OnRiseSignal(Signal) { Kind = Signal.signalKind; Main.MessageLog("신호완성/"+Kind); //선물차트에서 매수신호발생하면 콜 매수 if (Signal.signalKind ==1) { BStart = 1; BuyCallCode = Option.GetATMCallRecent(0);//ATM콜 종목코드 var BuyCallPrice = Option.GetBidByCode(BuyCallCode, 2);//ATM콜 매수2호가 A1.OrderBuy(BuyCallCode, vol, BuyCallPrice, 0); Main.MessageLog("등가콜매수 : "+BuyCallCode); } //선물차트에서 매도신호발생하면 풋 매수 if (Signal.signalKind ==3) { SStart =1; BuyPutCode = Option.GetATMPutRecent(0);//ATM풋 종목코드 var BuyPutPrice = Option.GetBidByCode(BuyPutCode, 2);//ATM풋 매수 2호가 A1.OrderBuy(BuyPutCode, vol, BuyPutPrice, 0); Main.MessageLog("등가풋매수 : "+BuyPutCode); } if (BStart == 1 && Signal.signalKind == 2)//선물차트 매수 청산신호발생하면 콜 매수 청산 { var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2); A1.OrderSell(BuyCallCode, vol, BxCallPrice, 0); Main.MessageLog("등가콜청산 : "+BuyCallCode); } if (SStart == 1 && Signal.signalKind == 4)//선물차트 매도 청산신호발생하면 풋 매수 청산 { var BxPutPrice = Option.GetBidByCode(BuyPutCode, 2); A1.OrderSell(BuyPutCode, vol, BxPutPrice, 0); Main.MessageLog("등가풋청산 : "+BuyPutCode); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-11-13 09:45:11

안녕하세요 예스스탁입니다. 차트의 신호로 보고 옵션에 주문을 넣으시므로 시크립트 객체화면에 총 3개의 객체가 필요합니다. 옵션객체 추가 --> 속성에서 지정하실 부분이 없습니다 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트아이디는 차트와 동일한 이름으로 지정 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌변호는 거래하고자 하는 선옵계좌를 지정 아래는 수식내용입니다. var Start = 0; var SelCallCode; var SelCallPrice; var SelCallVol; var SellPutCode; var SellPutPrice; var SellPutVol; function Main_OnStart() { Start = 0; } function Chart1_OnRiseSignal(Signal) { //차트에서 매수신호 발생하면 콜 매수 if (Signal.signalKind ==1) { Start = 1; SellCallCode = Option.GetATMCallRecent(0);//주문종목 : ATM콜 종목코드 SellCallPrice = Option.GetBidByCode(SellCallCode, 2);//주문가격 매수2호가 SelCallVol = Signal.count;//주문수량 : 차트신호의 수량 Account1.OrderSell(SellCallCode,SelCallVol, SellCallPrice, 0); Main.MessageList("등가콜매도 : "+SellCallCode); } //차트에서 매수청산신호 발생하면 콜매도 청산 if (Start == 1 && Signal.signalKind == 2) { //매도2호가로 청산 Account1.OrderBuy(SellCallCode, SelCallVol, Option.GetAskByCode(SellCallCode, 2), 0); Main.MessageList("콜청산 : ",SellCallCode); } //선물차트에서 매도신호 발생하면 풋 매수 if (Signal.signalKind ==3) { Start =1; SellPutCode = Option.GetATMPutRecent(0);//주문종목 : ATM풋 종목코드 SellPutPrice = Option.GetBidByCode(SellPutCode, 2);//주문가격 : 매수 2호가 SellPutVol = Signal.count; //수량 : 차트신호의 수량 Account1.OrderSell(SellPutCode, Signal.count, SellPutPrice, 0); Main.MessageList("등가풋매도 : "+SellPutCode); } //차트에서 매도청산신호 발생하면 풋매도 청산 if (Start == 1 && Signal.signalKind == 4) { Account1.OrderBuy(SellPutCode, SellPutVol, Option.GetAskByCode(SellPutCode, 2), 0); Main.MessageList("풋청산 : ",SellPutCode); } } 즐거운 하루되세요 > 무명 님이 쓴 글입니다. > 제목 : 문의 드립니다. > 1. 아래는 게시판에 올라와 있는 스팟로직입니다. 선물신호로 옵션을 매매하는 로직으로 알고 있습니다. 아래 수식은 선물매수신호 발생하면 콜옵션등가 매수, 선물매도신호 발생하면 풋옵션등가매수식인데,,, 반대로 선물매수신호 발생하면 콜옵션등가 매도, 선물매도신호 발생하면 풋옵션등가 매도할 수 있도록 수정부탁드립니다. 2. 당일매매나 오버매매에 동일하게 진입/청산될 수 있도록 하고... 예스트레이더 선물신호와 동일한 진입계약수로 진입/청산될 수 있도록 부탁드립니다. 3. 예스스팟 처음사용자라서 그러는데 위의 로직을 가지고 실제 매매를 하기위한 객체추가등의 절차와 방법등을 알려주시면 감사하겠습니다. 안녕하세요 예스스탁입니다. 전화로 답변드린 부분에서 좀더 강화하여 스팟 적용시점에 UserValue의 BuyCall와 BuyPut에 종목코드가 저장되어 있고 해당 종목코드의 종목이 실제 잔고에도 있으면 적용시점 이후에 최초 신호가 청산일때도 신호가 발생하게 했습니다. 아래식으로 테스트 해 보시기 바랍니다. var BStart = 0; var SStart = 0; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; function Main_OnStart() { Main.MessageList("시작"); var AA = Main.GetUserValue("BuyCall"); if (AA == "") { BStart = 0; Main.MessageList("UserValue의 BuyCall - 저장된 종목코드 없음"); } else { A1.SetBalanceItem(AA,0); if (A1.Balance.count > 0) { BStart = 1; BuyCallCode = AA; Main.MessageList("UserValue의 BuyCall - : ",BuyCallCode); } } var BB = Main.GetUserValue("BuyPut"); if (BB == "") { SStart = 0; Main.MessageList("UserValue의 BuyPut - 저장된 종목코드 없음"); } else { A1.SetBalanceItem(BB,0); if (A1.Balance.count > 0) { SStart = 1; BuyPutCode = BB; Main.MessageList("UserValue의 BuyPut - : ",BuyPutCode,"계좌에도 해당 종목 있음"); } } Main.MessageList(BStart,SStart); } function C1_OnRiseSignal(Signal) { Kind = Signal.signalKind; Main.MessageLog("신호완성/"+Kind); //선물차트에서 매수신호발생하면 콜 매수 if (Signal.signalKind ==1) { BStart = 1; BuyCallCode = Option.GetATMCallRecent(0);//ATM콜 종목코드 var BuyCallPrice = Option.GetBidByCode(BuyCallCode, 2);//ATM콜 매수2호가 A1.OrderBuy(BuyCallCode, vol, BuyCallPrice, 0); Main.MessageLog("등가콜매수 : "+BuyCallCode); //주문 후 내부파일에 콜종목코드를 BuyCall이름으로 저장 Main.SetUserValue("BuyCall",BuyCallCode); } //선물차트에서 매도신호발생하면 풋 매수 if (Signal.signalKind ==3) { SStart =1; BuyPutCode = Option.GetATMPutRecent(0);//ATM풋 종목코드 var BuyPutPrice = Option.GetBidByCode(BuyPutCode, 2);//ATM풋 매수 2호가 A1.OrderBuy(BuyPutCode, vol, BuyPutPrice, 0); Main.MessageLog("등가풋매수 : "+BuyPutCode); //주문 후 내부파일에 풋종목코드를 BuyPut이름으로 저장 Main.SetUserValue("BuyPut",BuyCallCode); } if (BStart == 1 && Signal.signalKind == 2)//선물차트 매수 청산신호발생하면 콜 매수 청산 { var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2); A1.OrderSell(BuyCallCode, vol, BxCallPrice, 0); Main.MessageLog("등가콜청산 : "+BuyCallCode); // 매수청산 주문후 내부파일의 BuyCall의 값을 ""저장(공백) Main.SetUserValue("BuyCall",""); } if (SStart == 1 && Signal.signalKind == 4)//선물차트 매도 청산신호발생하면 풋 매수 청산 { var BxPutPrice = Option.GetBidByCode(BuyPutCode, 2); A1.OrderSell(BuyPutCode, vol, BxPutPrice, 0); Main.MessageLog("등가풋청산 : "+BuyPutCode); // 매수청산 주문후 내부파일의 BuyPut의 값을 ""저장(공백) Main.SetUserValue("BuyPut",""); } } 즐거운 하루되세요 > 몬자 님이 쓴 글입니다. > 제목 : Re : Re : 스팟문의드립니다. > 답변감사합니다. 매수주문 완료되고, 프로그램 재접속 후 시험적용으로 확인하는도중 주문가격과 종목코드에서 이상한 결과가 나옵니다. 위 그림과 같이 매수 주문가격 1.46 매도 주문가격 1.-2147483648 주문가격과 종목코드가 이상합니다. 어떻게 된 것인지 궁금합니다. 고민 중에 SetBalance 함수를 이용하면 될 것 같은데 많이 어렵습니다. 번거롭게 질문이 잦아 죄송합니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 스팟문의드립니다. > 안녕하세요 예스스탁입니다. 아래식 참고하시기 바랍니다. SetUserValue함수와 GetUserValue 함수를 이용해 처리했습니다. 주석 참고하시기 바랍니다. //아래 전략은 기존 수식입니다. var BStart; var SStart; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; function Main_OnStart() { Main.MessageLog("시작"); SStart = 0; //스팟 적용시에 BuyCall값을 불러와 공백이면 0 아니면 1 var AA = Main.GetUserValue("BuyCall"); if (AA == "") BStart = 0; else BStart = 1; //스팟 적용시에 BuyPut값을 불러와 공백이면 0 아니면 1 var BB = Main.GetUserValue("BuyPut"); if (BB == "") SStart = 0; else SStart = 1; } function C1_OnRiseSignal(Signal) { Kind = Signal.signalKind; Main.MessageLog("신호완성/"+Kind); //선물차트에서 매수신호발생하면 콜 매수 if (Signal.signalKind ==1) { BStart = 1; BuyCallCode = Option.GetATMCallRecent(0);//ATM콜 종목코드 var BuyCallPrice = Option.GetBidByCode(BuyCallCode, 2);//ATM콜 매수2호가 A1.OrderBuy(BuyCallCode, vol, BuyCallPrice, 0); Main.MessageLog("등가콜매수 : "+BuyCallCode); //주문 후 내부파일에 콜종목코드를 BuyCall이름으로 저장 Main.SetUserValue("BuyCall",BuyCallCode); } //선물차트에서 매도신호발생하면 풋 매수 if (Signal.signalKind ==3) { SStart =1; BuyPutCode = Option.GetATMPutRecent(0);//ATM풋 종목코드 var BuyPutPrice = Option.GetBidByCode(BuyPutCode, 2);//ATM풋 매수 2호가 A1.OrderBuy(BuyPutCode, vol, BuyPutPrice, 0); Main.MessageLog("등가풋매수 : "+BuyPutCode); //주문 후 내부파일에 풋종목코드를 BuyPut이름으로 저장 Main.SetUserValue("BuyPut"",BuyCallCode); } if (BStart == 1 && Signal.signalKind == 2)//선물차트 매수 청산신호발생하면 콜 매수 청산 { var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2); A1.OrderSell(BuyCallCode, vol, BxCallPrice, 0); Main.MessageLog("등가콜청산 : "+BuyCallCode); // 매수청산 주문후 내부파일의 BuyCall의 값을 ""저장(공백) Main.SetUserValue("BuyCall",""); } if (SStart == 1 && Signal.signalKind == 4)//선물차트 매도 청산신호발생하면 풋 매수 청산 { var BxPutPrice = Option.GetBidByCode(BuyPutCode, 2); A1.OrderSell(BuyPutCode, vol, BxPutPrice, 0); Main.MessageLog("등가풋청산 : "+BuyPutCode); // 매수청산 주문후 내부파일의 BuyPut의 값을 ""저장(공백) Main.SetUserValue("BuyPut",""); } } 즐거운 하루되세요 > 몬자 님이 쓴 글입니다. > 제목 : 스팟문의드립니다. > 선물신호를 받아서 옵션 매수후 2~3 일간 포지션 홀딩시, 다음날(프로그램 재시작) 스팟전략이 디폴트되어 청산식이 제대로 되지 않습니다. 계좌함수를 통해 해결할 수 있다고 들었는데요, 계좌함수를 이용해 선물에서 청산신호 발생시 포지션을 청산하고 싶습니다. 부탁드립니다. //아래 전략은 기존 수식입니다. var BStart; var SStart; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; function Main_OnStart() { Main.MessageLog("시작"); BStart = 0; SStart = 0; } function C1_OnRiseSignal(Signal) { Kind = Signal.signalKind; Main.MessageLog("신호완성/"+Kind); //선물차트에서 매수신호발생하면 콜 매수 if (Signal.signalKind ==1) { BStart = 1; BuyCallCode = Option.GetATMCallRecent(0);//ATM콜 종목코드 var BuyCallPrice = Option.GetBidByCode(BuyCallCode, 2);//ATM콜 매수2호가 A1.OrderBuy(BuyCallCode, vol, BuyCallPrice, 0); Main.MessageLog("등가콜매수 : "+BuyCallCode); } //선물차트에서 매도신호발생하면 풋 매수 if (Signal.signalKind ==3) { SStart =1; BuyPutCode = Option.GetATMPutRecent(0);//ATM풋 종목코드 var BuyPutPrice = Option.GetBidByCode(BuyPutCode, 2);//ATM풋 매수 2호가 A1.OrderBuy(BuyPutCode, vol, BuyPutPrice, 0); Main.MessageLog("등가풋매수 : "+BuyPutCode); } if (BStart == 1 && Signal.signalKind == 2)//선물차트 매수 청산신호발생하면 콜 매수 청산 { var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2); A1.OrderSell(BuyCallCode, vol, BxCallPrice, 0); Main.MessageLog("등가콜청산 : "+BuyCallCode); } if (SStart == 1 && Signal.signalKind == 4)//선물차트 매도 청산신호발생하면 풋 매수 청산 { var BxPutPrice = Option.GetBidByCode(BuyPutCode, 2); A1.OrderSell(BuyPutCode, vol, BxPutPrice, 0); Main.MessageLog("등가풋청산 : "+BuyPutCode); } }