커뮤니티

문의 드립니다.^.^

프로필 이미지
하늘북
2018-06-17 11:54:30
2165
글번호 224476
답변완료
안녕하세요? 작성해 주심 전략 감사합니다... 아래 전략에 오일거래를 할수 있도록 수정 부탁드리겠습니다. 감사합니다...^.^ var CallCode,CallID,CallNum,CallFill; var PutCode,PutID,PutNum,PutFill; var entry; var vol = 1;//진입수량 function Main_OnStart() { //타이머 5초단위 Main.SetTimer(1, 5000); step = 0; CallFill = false; PutFill = false; } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (step == 0 && HHHMMSS > 110000) { //step은 1로 변경 step = 1; //ATM콜 종목코드 CallCode = Option1.GetATMCallRecent(0); //ATM풋 종목코드 PutCode = Option1.GetATMPutRecent(0); //Call종목 매수3호가로 매도주문하고 주문아이디는 CallID에 저장 CallID = Account1.OrderSell(CallCode,vol,Option1.GetBid(CallCode,3),0); //Put종목 매수3호가로 매도주문하고 주문아이디는 PutID에 저장 PutID = Account1.OrderSell(PutCode,vol,Option1.GetBid(PutCode,3),0); } //양매도 후 콜/풋 모두 체결이 되었으면 if (HHHMMSS > 110000 && step == 1 && CallFill == true && PutCall == true ) { //손익저장할 변수(초기값0) var sumPL = 0; //CallCode 잔고셋팅 Account1.SetBalance(CallCode,0); //수량이 1이상이고 매도포지션이면 손익을 sumPL에 합산저장 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) { sumPL = SumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current); } //PutlCode 잔고셋팅 Account1.SetBalance(CallCode,0); //수량이 1이상이고 매도포지션이면 손익을 sumPL에 합산저장 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) { sumPL = SumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current); } //합산손익이 +0.5 이상이면 if (sumPL >= 0.5) { //step은 2로 변경 step = 2; //콜풋 모두 매도3호가로 매수주문 Account1.OrderBuy(CallCode, vol, Option1.GetAsk(CallCode, 3), 0); Account1.OrderBuy(PutCode, vol, Option1.GetAsk(PutCode, 3), 0); } } //수익청산되지 않고 15시가 되면 if (step == 1 && HHHMMSS >= 150000) { //step은 2로 변경 step = 2; Main.KillTimer(1); //콜풋 모두 매도3호가로 매수주문 Account1.OrderBuy(CallCode, vol, Option1.GetAsk(CallCode, 3), 0); Account1.OrderBuy(PutCode, vol, Option1.GetAsk(PutCode, 3), 0); } } //주문응답수신 function Main_OnOrderResponse(OrderResponse) { //수신된 주문응답의 아이디가 CallID와 같으면 if (OrderResponse.orderID == CallID) { //CallNum에 주문번호저장 CallNum = OrderResponse.orderNum; } //수신된 주문응답의 아이디가 PutID와 같으면 if (OrderResponse.orderID == PutID) { //PutNum에 주문번호저장 PutNum = OrderResponse.orderNum; } } //체결응답수신 function Main_OnNotifyFill(NotifyFill) { //CallNum에 대한 체결응답이면 if (NotifyFill.orderNum == CallNum) { //CallNum에 대한 미체결객체 세팅하고 Account1.SetUnfill(CallNum); //미체결수량이 없으면(주문전량체결) if (Account1.Unfill.count == 0) { //CallFill에 true 저장 CallFill = true; } } //PutNum에 대한 체결응답이면 if (NotifyFill.orderNum == PutNum) { //PutNum에 대한 미체결객체 세팅하고 Account1.SetUnfill(PutNum); //미체결수량이 없으면(주문전량체결) if (Account1.Unfill.count == 0) { //PutFill에 true 저장 PutFill = true; } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-06-29 13:00:46

안녕하세요 예스스탁입니다. 해외선물에 맞추 변경해 드립니다. 진입시간, 청산시간, 수익은 종목에 맞게 재지정하시기 바랍니다. 스크립트객체 화면설정 계좌객체 추가 --> 속성에서 객체명은 Acccount, 주문낼 계좌번호 지정 종목객체 추가 --> 속성에서 객체명은 MarketData1,주문낼 종목으로 지정 var ID,Fill; var entry,HHMMSS,HHMMSS; var vol = 1;//진입수량 var 진입시간 = 110000; var 청산시간 = 150000; var 수익 = 0.5; function Main_OnStart() { //타이머 5초단위 Main.SetTimer(1, 5000); step = 0; Fill = false; } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS1 = HHMMSS; HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (step == 0 && HHHMMSS >= 진입시간 && HHMMSS1 < 진입시간) { //step은 1로 변경 step = 1; EID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),vol,MarketData1.Bid(3),2); } if (HHHMMSS > 110000 && step == 1 && Fill == true ) { //CallCode 잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),2); //수량이 1이상이고 매도포지션이면 손익을 sumPL에 저장 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) { var sumPL = (Account1.Balance.avgUnitCost - Account1.Balance.current); //손익이 지정한 수익 이상이면 if (sumPL >= 수익) { //step은 2로 변경 step = 2; //매도3호가로 매수주문 Account1.OrderBuy(GetOrderCode(MarketData1.code), vol,MarketData1.Ask(3), 2); } } } //수익청산되지 않고 15시가 되면 if (step == 1 && HHHMMSS >= 청산시간 && HHHMMSS1 < 청산시간 ) { //step은 2로 변경 step = 2; Main.KillTimer(1); //콜풋 모두 매도3호가로 매수주문 Account1.OrderBuy(GetOrderCode(MarketData1.code), vol,MarketData1.Ask(3), 2); } } //주문응답수신 function Main_OnOrderResponse(OrderResponse) { //수신된 주문응답의 아이디가 CallID와 같으면 if (OrderResponse.orderID == ID) { //CallNum에 주문번호저장 Num = OrderResponse.orderNum; } } //체결응답수신 function Main_OnNotifyFill(NotifyFill) { //CallNum에 대한 체결응답이면 if (NotifyFill.orderNum == Num) { //Num에 대한 미체결객체 세팅하고 Account1.SetUnfill(Num); //미체결수량이 없으면(주문전량체결) if (Account1.Unfill.count == 0) { //Fill에 true 저장 Fill = true; } } } 즐거운 하루되세요 > 하늘북 님이 쓴 글입니다. > 제목 : 문의 드립니다.^.^ > 안녕하세요? 작성해 주심 전략 감사합니다... 아래 전략에 오일거래를 할수 있도록 수정 부탁드리겠습니다. 감사합니다...^.^ var CallCode,CallID,CallNum,CallFill; var PutCode,PutID,PutNum,PutFill; var entry; var vol = 1;//진입수량 function Main_OnStart() { //타이머 5초단위 Main.SetTimer(1, 5000); step = 0; CallFill = false; PutFill = false; } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (step == 0 && HHHMMSS > 110000) { //step은 1로 변경 step = 1; //ATM콜 종목코드 CallCode = Option1.GetATMCallRecent(0); //ATM풋 종목코드 PutCode = Option1.GetATMPutRecent(0); //Call종목 매수3호가로 매도주문하고 주문아이디는 CallID에 저장 CallID = Account1.OrderSell(CallCode,vol,Option1.GetBid(CallCode,3),0); //Put종목 매수3호가로 매도주문하고 주문아이디는 PutID에 저장 PutID = Account1.OrderSell(PutCode,vol,Option1.GetBid(PutCode,3),0); } //양매도 후 콜/풋 모두 체결이 되었으면 if (HHHMMSS > 110000 && step == 1 && CallFill == true && PutCall == true ) { //손익저장할 변수(초기값0) var sumPL = 0; //CallCode 잔고셋팅 Account1.SetBalance(CallCode,0); //수량이 1이상이고 매도포지션이면 손익을 sumPL에 합산저장 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) { sumPL = SumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current); } //PutlCode 잔고셋팅 Account1.SetBalance(CallCode,0); //수량이 1이상이고 매도포지션이면 손익을 sumPL에 합산저장 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) { sumPL = SumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current); } //합산손익이 +0.5 이상이면 if (sumPL >= 0.5) { //step은 2로 변경 step = 2; //콜풋 모두 매도3호가로 매수주문 Account1.OrderBuy(CallCode, vol, Option1.GetAsk(CallCode, 3), 0); Account1.OrderBuy(PutCode, vol, Option1.GetAsk(PutCode, 3), 0); } } //수익청산되지 않고 15시가 되면 if (step == 1 && HHHMMSS >= 150000) { //step은 2로 변경 step = 2; Main.KillTimer(1); //콜풋 모두 매도3호가로 매수주문 Account1.OrderBuy(CallCode, vol, Option1.GetAsk(CallCode, 3), 0); Account1.OrderBuy(PutCode, vol, Option1.GetAsk(PutCode, 3), 0); } } //주문응답수신 function Main_OnOrderResponse(OrderResponse) { //수신된 주문응답의 아이디가 CallID와 같으면 if (OrderResponse.orderID == CallID) { //CallNum에 주문번호저장 CallNum = OrderResponse.orderNum; } //수신된 주문응답의 아이디가 PutID와 같으면 if (OrderResponse.orderID == PutID) { //PutNum에 주문번호저장 PutNum = OrderResponse.orderNum; } } //체결응답수신 function Main_OnNotifyFill(NotifyFill) { //CallNum에 대한 체결응답이면 if (NotifyFill.orderNum == CallNum) { //CallNum에 대한 미체결객체 세팅하고 Account1.SetUnfill(CallNum); //미체결수량이 없으면(주문전량체결) if (Account1.Unfill.count == 0) { //CallFill에 true 저장 CallFill = true; } } //PutNum에 대한 체결응답이면 if (NotifyFill.orderNum == PutNum) { //PutNum에 대한 미체결객체 세팅하고 Account1.SetUnfill(PutNum); //미체결수량이 없으면(주문전량체결) if (Account1.Unfill.count == 0) { //PutFill에 true 저장 PutFill = true; } } }