커뮤니티

문의 드립니다

프로필 이미지
파인애플
2021-06-30 11:15:51
2451
글번호 225503
답변완료
1 매수진입명"B" 매수청산명"BX" 매도진입명"S" 매도청산명"SX" SetStopProfitTarget 매수매도+진입청산+익절 시스템 해외선물에서 스팟으로 아래와같이 주문하고싶습니다 <매수진입 신호발생> 매도 5호가로 매수주문 신호가격 10호가 위로 매도주문(미리익절주문넣기) <매수진입 정정> 1초뒤 미체결시 매도 5호가로 1차정정 매수주문 <매수익절SetStopProfitTarget 신호발생> (주문은 매수진입신호발생시 미리 넣어놨음) <매수익절SetStopProfitTarget 정정> 1초뒤 미체결시 매수 5호가로 1차정정 매도주문 <매수청산 신호발생> 매수 5호가로 매도주문 미리넣은 익절매도주문 취소 <매수청산 정정> 1초뒤 미체결시 매수 5호가로 1차정정 매도주문 <매도진입 신호발생> 매수 5호가로 매도주문 신호가격 10호가 아래로 매수주문(미리익절주문넣기) <매도진입 정정> 1초뒤 미체결시 매수 5호가로 1차정정 매도주문 <매도익절SetStopProfitTarget 신호발생> (주문은 매도진입신호발생시 미리 넣어놨음) <매도익절SetStopProfitTarget 정정> 1초뒤 미체결시 매도 5호가로 1차정정 매수주문 <매도청산 신호발생> 매도 5호가로 매수주문 미리넣은 매수주문 취소 <매도청산 정정> 1초뒤 미체결시 매도 5호가로 1차정정 매수주문 2 SetStopProfitTarget 대신 진입신호와 동시에 익절을 미리 걸어두고싶은데 다른 아이디어가 있을까요?
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-07-27 13:12:58

안녕하세요 예스스탁입니다. 아래 가이드 수식 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체설정 차트객체추가 --> 속성에서 객체명은 Chart1, 차트와 아이디 연결 좀옥객체추가 --> 속성에서 객체명은 MarketData1, 차트동일종목으로 지정 계좌객체추가 --> 속성에서 객체명은 Account1, 주문낼 계좌번호 지정 var BEID,BTID,BXID,SEID,STID,SXID; var BENUM,BTNUM,BXNUM,SENUM,STNUM,SXNUM; function Main_OnStart() { Main.MessageList("Start"); } function Chart1_OnRiseSignal(Signal) { //매수진입신호 발생 if (Signal.signalKind == 1) { //매도5호가로 매수주문 BEID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count,MarketData1.Ask(5), 2); //신호가격 +10틱으로 매도주문 BTID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count,Signal.price + MarketData1.GetTickSize()*10, 2); } //매수청산신호 발생 if (Signal.signalKind == 2 ) { //목표수익청산이 아니면 if (Signal.name != "StopProfitTarget") { //목표수익청산 미체결확인 Account1.SetUnfill(BTNUM); //미체결되어 있으면 if (Account1.Unfill.count > 0 ) { //취소 Account1.OrderCancel(BTMUN); //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0); //잔고가 매수포지션으로 수량이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { //잔고수량 전량 매수5호가로 매도주문 BXID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(5), 2) } } } else //목표수익청산이면 { //2번 타이머 1초 타이머 셋팅 Main.SetTimer(2, 1000); } } //매수진입신호 발생 if (Signal.signalKind == 3) { //매수5호가로 매도주문 SEID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count,MarketData1.Bid(5), 2); //신호가격 -10틱으로 매수주문 STID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count,Signal.price - MarketData1.GetTickSize()*10, 2); } //매도청산신호 발생 if (Signal.signalKind == 4 ) { //목표수익청산이 아니면 if (Signal.name != "StopProfitTarget") { //목표수익청산 미체결확인 Account1.SetUnfill(STNUM); //미체결되어 있으면 if (Account1.Unfill.count > 0 ) { //취소 Account1.OrderCancel(STMUN); //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0); //잔고가 매도포지션으로 수량이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { //매도5호가로 매수주문 SXID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(5), 2) } } } else //목표수익청산이면 { //4번 타이머 1초 타이머 셋팅 Main.SetTimer(4, 1000); } } } function Main_OnTimer(nEventID) { //1번타이머 동작 if (nEventID == 1) { //1번타이머 종료 Main.KillTimer(1); //미체결셋팅 Account1.SetUnfillOrderNumber(BENUM); //정정할 주문가격 var RP = MarketData1.Ask(5); //미체결이 있고 정정할 가격이 기존주문가격과 다르면 if (Account1.Unfill.count > 0 && RP != Account1.Unfill.price) { //정정주문 Account1.OrderReplace(BENUM, Account1.Unfill.count , RP); } } //2번타이머 동작 if (nEventID == 2) { //타이머종료 Main.KillTimer(2); //목표수익청산주문에 대해 미체결 셋팅 Account1.SetUnfillOrderNumber(BTNUM); //정정할 주문가격 var RP = MarketData1.Bid(5); //미체결이 있고 정정할 가격이 기준 주문가격과 다르면 if (Account1.Unfill.count > 0 && RP != Account1.Unfill.price) { //정정 Account1.OrderReplace(BTNUM, Account1.Unfill.count , RP); } } //3번타이머 동작 if (nEventID == 3) { //3번타이머 종료 Main.KillTimer(3); //미체결셋팅 Account1.SetUnfillOrderNumber(SENUM); //정정할 주문가격 var RP = MarketData1.Bid(5); //미체결이 있고 정정할 가격이 기존주문가격과 다르면 if (Account1.Unfill.count > 0 && RP != Account1.Unfill.price) { //정정주문 Account1.OrderReplace(SENUM, Account1.Unfill.count , RP); } } //4번타이머 동작 if (nEventID == 4) { //타이머종료 Main.KillTimer(4); //목표수익청산주문에 대해 미체결 셋팅 Account1.SetUnfillOrderNumber(STNUM); //정정할 주문가격 var RP = MarketData1.Ask(5); //미체결이 있고 정정할 가격이 기준 주문가격과 다르면 if (Account1.Unfill.count > 0 && RP != Account1.Unfill.price) { //정정 Account1.OrderReplace(STNUM, Account1.Unfill.count , RP); } } } //각 주문이 접수되면 주분별로 주문번호 저장 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BEID) { BENUM = OrderResponse.orderNum; Main.SetTimer(1, 1000); } if (OrderResponse.orderID == BTID) { BTNUM = OrderResponse.orderNum; } if (OrderResponse.orderID == BXID) { BXNUM = OrderResponse.orderNum; } if (OrderResponse.orderID == SEID) { SENUM = OrderResponse.orderNum; } if (OrderResponse.orderID == STID) { STNUM = OrderResponse.orderNum; } if (OrderResponse.orderID == SXID) { SXNUM = OrderResponse.orderNum; } } 즐거운 하루되세요 > 파인애플 님이 쓴 글입니다. > 제목 : 문의 드립니다 > 1 매수진입명"B" 매수청산명"BX" 매도진입명"S" 매도청산명"SX" SetStopProfitTarget 매수매도+진입청산+익절 시스템 해외선물에서 스팟으로 아래와같이 주문하고싶습니다 <매수진입 신호발생> 매도 5호가로 매수주문 신호가격 10호가 위로 매도주문(미리익절주문넣기) <매수진입 정정> 1초뒤 미체결시 매도 5호가로 1차정정 매수주문 <매수익절SetStopProfitTarget 신호발생> (주문은 매수진입신호발생시 미리 넣어놨음) <매수익절SetStopProfitTarget 정정> 1초뒤 미체결시 매수 5호가로 1차정정 매도주문 <매수청산 신호발생> 매수 5호가로 매도주문 미리넣은 익절매도주문 취소 <매수청산 정정> 1초뒤 미체결시 매수 5호가로 1차정정 매도주문 <매도진입 신호발생> 매수 5호가로 매도주문 신호가격 10호가 아래로 매수주문(미리익절주문넣기) <매도진입 정정> 1초뒤 미체결시 매수 5호가로 1차정정 매도주문 <매도익절SetStopProfitTarget 신호발생> (주문은 매도진입신호발생시 미리 넣어놨음) <매도익절SetStopProfitTarget 정정> 1초뒤 미체결시 매도 5호가로 1차정정 매수주문 <매도청산 신호발생> 매도 5호가로 매수주문 미리넣은 매수주문 취소 <매도청산 정정> 1초뒤 미체결시 매도 5호가로 1차정정 매수주문 2 SetStopProfitTarget 대신 진입신호와 동시에 익절을 미리 걸어두고싶은데 다른 아이디어가 있을까요?