커뮤니티

문의 드립니다.

프로필 이미지
지킴이
2017-10-24 17:13:37
2733
글번호 224233
답변완료
항상 답변 감사하게 받아보고 있습니다. 하이투자에서 선물거래를 하고 잇습니다. 질문1 : <<진입식>> 예스트레이더에서 신호발생시, 현재가진입 체결이 안되었으면 30초후 한틱위로 정정 미체결시 180초후에 취소. 일부만 체결되고 미체결된것은 취소 <<청산식>> 예스트레이더에서 신호발생시, 현재가진입 체결이 안되었으면 20초후 시장가청산. 청산식은 매수이든 매도이든 잔고를 확인해서 체결잔고가 있을때만 발생되도록 부탁드립니다. 청산식은 항상 포지션잔고 체크하고 잔고에 있는 전량이 전부 주문이 이루어지게 부탁합니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2017-11-09 17:22:52

안녕하세요 예스스탁입니다. 예스스팟은 간단한 가이드 정도만 답변해 드립니다. 아래수식 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체설정 계좌객체 --> 객체명 Account1,속성에서 주문낼 계좌번호 지정 차트객체 --> 객체명 Chart1, 속성에서 연동할 차트와 아이디 지정 종목객체 --> 객체명 MarketData1, 속성에서 차트와 동일종목으로 지정 var BID,BXID,SID,SXID; var BID1,BXID1,SID1,SXID1; var BNum,BXNum,SNum,SXNum; var BNum1,BXNum1,SNum1,SXNum1; function Chart1_OnRiseSignal(Signal) { //buy신호 발생 if (Signal.signalKind == 1) { BID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Signal.count,MarketData1.current, 0); } //Exitlong신호 발생 if (Signal.signalKind == 2) { //진입미체결취소 Account1.SetUnfill(BNum); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNum); } //보유중인 수량만 청산 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { BXID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.current, 0); } } //Sell신호 발생 if (Signal.signalKind == 3) { SID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Signal.count,MarketData1.current, 0); } //Exitshort신호 발생 if (Signal.signalKind == 4) { //진입 미체결 취소 Account1.SetUnfill(SNum); if (Account1.Unfill.count > 0) { Account1.OrderCancel(SNum); } //보유중인 수량만 청 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { SXID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.current, 0); } } } //주문응답 function Main_OnOrderResponse(OrderResponse) { //매수진입 최초주문 if (OrderResponse.orderID == BID) { BNum = OrderResponse.orderNum; Main.SetTimer(1,30000); //1번 타이머셋팅 30초 } //매수진입 30초후 정정주문 if (OrderResponse.orderID == BID1) { BNum1 = OrderResponse.orderNum; Main.SetTimer(11,180000); //11번 타이머셋팅 180초 } //매수청산 최초주문 if (OrderResponse.orderID == BXID) { BXNum = OrderResponse.orderNum; Main.SetTimer(2,20000); //2번 타이머셋팅 20초 } //매수청산 취소주문 후 시장가 청산 if (OrderResponse.orderID == BXID1) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, 0, 1); } } //매도진입 최초주문 if (OrderResponse.orderID == SID) { SNum = OrderResponse.orderNum; Main.SetTimer(3,30000); //3번 타이머셋팅 30초 } //매도진입 30초 후 정정주문 if (OrderResponse.orderID == SID1) { SNum1 = OrderResponse.orderNum; Main.SetTimer(33,180000); //33번 타이머셋팅 180초 } //매수청산 최초주문 if (OrderResponse.orderID == SXID) { SXNum = OrderResponse.orderNum; Main.SetTimer(4,20000); //4번 타이머셋팅 20초 } //매수청산 취소주문 후 시장가로 청산 if (OrderResponse.orderID == SXID1) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, 0, 1); } } } function Main_OnTimer(nEventID) { //매수진입주문 타이머 동작 if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfill(BNum); if (Account1.Unfill.count > 0) { BID1 = Account1.OrderReplacePrice(BNum, Account1.Unfill.price + MarketData1.GetTickSize()); } } if (nEventID == 11) { Main.KillTimer(11); Account1.SetUnfill(BNum1); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNum1) } } //매수청산주문 타이머 동작 //20초 후 미체결은 취소(최수주문에 응답들어오면 시장가로 청산주문) if (nEventID == 2) { Main.KillTimer(2); Account1.SetUnfill(BXNum); if (Account1.Unfill.count > 0) { BXID1 = Account1.OrderCancel(BXNum); } } //매도진입주문 타이머 동작 if (nEventID == 3) { Main.KillTimer(3); Account1.SetUnfill(SNum); if (Account1.Unfill.count > 0) { SID1 = Account1.OrderReplacePrice(SNum, Account1.Unfill.price - MarketData1.GetTickSize()); } } if (nEventID == 33) { Main.KillTimer(33); Account1.SetUnfill(SNum1); if (Account1.Unfill.count > 0) { Account1.OrderCancel(SNum1) } } //매도청산주문 타이머 동작 //20초 후 미체결은 취소(최수주문에 응답들어오면 시장가로 청산주문) if (nEventID == 4) { Main.KillTimer(4); Account1.SetUnfill(SXNum); if (Account1.Unfill.count > 0) { SXID1 = Account1.OrderCancel(SXNum); } } } 즐거운 하루되세요 > 지킴이 님이 쓴 글입니다. > 제목 : 문의 드립니다. > 항상 답변 감사하게 받아보고 있습니다. 하이투자에서 선물거래를 하고 잇습니다. 질문1 : <<진입식>> 예스트레이더에서 신호발생시, 현재가진입 체결이 안되었으면 30초후 한틱위로 정정 미체결시 180초후에 취소. 일부만 체결되고 미체결된것은 취소 <<청산식>> 예스트레이더에서 신호발생시, 현재가진입 체결이 안되었으면 20초후 시장가청산. 청산식은 매수이든 매도이든 잔고를 확인해서 체결잔고가 있을때만 발생되도록 부탁드립니다. 청산식은 항상 포지션잔고 체크하고 잔고에 있는 전량이 전부 주문이 이루어지게 부탁합니다.