커뮤니티

스팟문의드립니다.

프로필 이미지
몬자
2013-05-07 14:03:25
2185
글번호 222353
답변완료
선물신호를 받아서 옵션 매수후 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); } }
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2013-05-07 16:47:50

안녕하세요 예스스탁입니다. 아래식 참고하시기 바랍니다. 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); } }
프로필 이미지

몬자

2013-05-08 19:52:42

답변감사합니다. 매수주문 완료되고, 프로그램 재접속 후 시험적용으로 확인하는도중 주문가격과 종목코드에서 이상한 결과가 나옵니다. 위 그림과 같이 매수 주문가격 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); } }
프로필 이미지

예스스탁 예스스탁 답변

2013-05-09 14:35:49

안녕하세요 예스스탁입니다. 전화로 답변드린 부분에서 좀더 강화하여 스팟 적용시점에 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); } }