커뮤니티

재접속시 진입된 종목 판단

프로필 이미지
anyhelp
2014-07-26 08:36:38
1203
글번호 223102
답변완료
안녕하세요. 선물신호를 예스스팟에서 받아 옵션으로 매매중입니다. 앞에서 유사한 질문들이 있던데... 시스템이 강제 종료된 이후 재시작을 하게되면 예스스팟은 이전의 변수값이 초기화 되어 시스템이 진입되어 있는 경우 처리가 곤란하더라구요. 한개 시스템을 한개계좌에서 사용할 때는 보유계좌에 있는 잔고를 확인해서 처리하도록 했는데 이때도, 기존에 다른 종목을 보유하고 있으면 어떤 놈이 시스템 신호에 의해서 나온놈인지 알수가 없네요.. 더더구나 한개 계좌를 가지고 사용할때, 여러개 선물 시스템 신호를 받아 처리를 하고 있는데, 보유중이 종목이 어느 신호에 의해서 나온 건지 알 방법은 도저히 못찾겠더라구요.. 그렇다고 시스템 마다 계좌를 만들 수 도 없구... 질문사항입니다. 질문1 : 위와 같은 상황에서 최적의 대처 방안은 ? 질문2 : 정안된다면 계좌에 보유종목을 유형별로 쪼개는 방법 좀 부탁드립니다. (예 : 풋종목과 콜종목으로 구분하는 수식 등)
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-08-05 14:07:04

안녕하세요 예스스탁입니다. 문의하신 내용은 내부파일등에 변수명을 지정해 기록을 하고(SetUserValue) 나중에 해당 값을 불러서(GetUserValue) 사용하셔야 합니다. 아래 UserValue 사용에 대한 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 스팟이 종료가 될때 필요한 값들을 내부파일에 이름을 지정해 저장해 놓고 스팟이 시작할때 내부파일에 저장된 값들을 불러와 사용하게 됩니다. 아래 식은 스팟식이 종료될때 날짜와 최근 발생한 신호와 수량,종목코드,주문번호를 저장하고 스팟이 시작할때 해당 값을 불러와 직전 종료시점의 저장된 값에 따라 진입식 혹은 청산식이 먼저 동작되게 하는 내용입니다. 유의하신 부분은 내부파일은 공용으로 사용되므로 다른 스팟식에서 동일이름으로 값을 저장하시면 안되므로 구별해서 이름정하셔서 값 저장해 사용하셔야 합니다. var Pst,EntryVol,EntryCode,EntryID, EntryNum; //스팟시작 function Main_OnStart() { var d = new Date(); var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); Pst = 0; var GetDate = Main.GetUserValue("S1_EntryDate"); var GetPst = Main.GetUserValue("S1_Pst"); var GetEntryCode = Main.GetUserValue("S1_EntryVol"); var GetEntryVol = Main.GetUserValue("S1_EntryCode"); var GetEntryNum = Main.GetUserValue("S1_EntryNum"); //직전종료시 최종신호의 날짜가 오늘이고 //매수나 매도포지션이었으면 if (YYYYMMDD == GetDate && (Pst == 1 || Pst == -1)) { Pst = GetPst; EntryCode = GetEntryCode; EntryVol = GetEntryVol; EntryNum = GetEntryNum; } } //스팟 종료 function Main_OnClose() { Main.SetUserValue("S1_EntryDate",EntryDate); //스팟종료시 최종신호의 날짜 Main.SetUserValue("S1_Pst",Pst); //스팟종료시 포지션 Main.SetUserValue("S1_EntryVol",EntryVol); //스팟종료시 최종 진입수량 저장 Main.SetUserValue("S1_EntryCode",EntryCode); //스팟종료시 최종 진입종목코드 저장 Main.SetUserValue("S1_EntryNum",EntryNum); //스팟종료시 최종 진입주문의 주문번호 } //차트신호 발생 function Chart1_OnRiseSignal(Signal) { var d = new Date(); var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); if (Pst == 0 && Signal.signalKind == 1) { Pst = 1; EntryDate = YYYYMMDD; EntryCode = Option.GetATMCallRecent(0,0);//진입종목 EntryVol = 10;//진입수량 EntryID = Account1.OrderBuy(EntryCode, EntryVol,Option.GetAsk(EntryCode, 5),0); } if (Pst == 1 && Signal.signalKind == 2) { Pst = 0; Account1.SetUnfillOrderNumber(EntryNum); //미체결 취소 var Xvol = 0; if (Account1.Unfill.count > 0) { //진입수량에서 미체결 수량 차감 Xvol = EntryVol-Account1.Unfill.count; Account1.OrderCancel(EntryNum); } Account1.OrderSell(EntryCode, Xvol,Option.GetAsk(EntryCode, 3,0); EntryCode = ""; EntryVol = 0; EntryNum = 0; } if (Pst == 0 && Signal.signalKind == 3) { Pst = -1; EntryDate = YYYYMMDD; EntryCode = Option.GetATMPutRecent(0,0);//진입종목 EntryVol = 10; //진입수량 EntryID = Account1.OrderSell(EntryCode, EntryVol,Option.GetBid(EntryCode, 3),0); } if (Pst == -1 && Signal.signalKind == 4) { Pst = 0; //미체결 취소 Account1.SetUnfillOrderNumber(EntryNum); var Xvol = 0; if (Account1.Unfill.count > 0) { //진입수량에서 미체결 수량 차감 Xvol = EntryVol-Account1.Unfill.count; Account1.OrderCancel(EntryNum); } Account1.OrderBuy(EntryCode, Xvol,Option.GetAsk(EntryCode, 3,0); EntryCode = ""; EntryVol = 0; EntryNum = 0; } } function Main_OnOrderResponse(OrderResponse) { if (EntryID == OrderResponse.orderNum) { EntryNum = OrderResponse.orderNum; } } 즐거운 하루되세요 > anyhelp 님이 쓴 글입니다. > 제목 : 재접속시 진입된 종목 판단 > 안녕하세요. 선물신호를 예스스팟에서 받아 옵션으로 매매중입니다. 앞에서 유사한 질문들이 있던데... 시스템이 강제 종료된 이후 재시작을 하게되면 예스스팟은 이전의 변수값이 초기화 되어 시스템이 진입되어 있는 경우 처리가 곤란하더라구요. 한개 시스템을 한개계좌에서 사용할 때는 보유계좌에 있는 잔고를 확인해서 처리하도록 했는데 이때도, 기존에 다른 종목을 보유하고 있으면 어떤 놈이 시스템 신호에 의해서 나온놈인지 알수가 없네요.. 더더구나 한개 계좌를 가지고 사용할때, 여러개 선물 시스템 신호를 받아 처리를 하고 있는데, 보유중이 종목이 어느 신호에 의해서 나온 건지 알 방법은 도저히 못찾겠더라구요.. 그렇다고 시스템 마다 계좌를 만들 수 도 없구... 질문사항입니다. 질문1 : 위와 같은 상황에서 최적의 대처 방안은 ? 질문2 : 정안된다면 계좌에 보유종목을 유형별로 쪼개는 방법 좀 부탁드립니다. (예 : 풋종목과 콜종목으로 구분하는 수식 등)