커뮤니티

문의드립니다

프로필 이미지
1000djr
2024-08-16 08:56:02.0
450
글번호 226083
답변완료

첨부 이미지

안녕하세요 계좌잔고 에 있는데 중복매수되는걸 어떻게 해야하는지 문의드립니다 계좌에 잇다면 pass해야하는데 그걸 어떻게 넣어야 하는지 부탁드립니다 var 진입수량 = 2; var DH, DH1, DL, DL1; var BEID, BENM, SEID, SENM; var CC, C1; var T; function Main_OnStart() { Main.MessageList("Start"); T = 0; } function Main_OnU*dateMarket(sItemCode, lU*dateID) { if (lU*dateID == 20001) { C1 = CC; CC = MarketData1.current; Main.MessageList("Main_OnU*dateMarket", MarketData1.current); // 시초가 + 10틱 터치 if (T <= 0 && C1 > 0 && C1 < MarketData1.open + MarketData1.GetTickSize() * 10 && CC >= MarketData1.open + MarketData1.GetTickSize() * 10) { T = 1; BEID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 진입수량, MarketData1.current, 2); Main.MessageList("매수 진입 주문: " + MarketData1.current,+ MarkerDatal.open); } // 매수 후 손절, 익절, 미체결 셋팅 if (T == 1) { // 손절 셋팅 if (MarketData1.current <= MarketData1.open - MarketData1.GetTickSize() * 8) { 청산수량처리(BENM, 진입수량, "매수 포지션 손절"); T = 0; // 초기화 } // 익절 셋팅 else if (MarketData1.current >= MarketData1.open + MarketData1.GetTickSize() * 130) { 청산수량처리(BENM, 진입수량, "매수 포지션 익절"); T = 0; // 초기화 } } // 시초가 - 10틱 터치 if (T >= 0 && C1 > MarketData1.open - MarketData1.GetTickSize() * 10 && CC <= MarketData1.open - MarketData1.GetTickSize() * 10) { T = -1; SEID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 진입수량, MarketData1.current, 2); Main.MessageList("매도 진입 주문: " + MarketData1.current,+ MarkerDatal.open); } // 매도 후 손절, 익절, 미체결 셋팅 if (T == -1) { // 손절 셋팅 if (MarketData1.current >= MarketData1.open + MarketData1.GetTickSize() * 8) { 청산수량처리(SENM, 진입수량, "매도 포지션 손절"); T = 0; // 초기화 } // 익절 셋팅 else if (MarketData1.current <= MarketData1.open - MarketData1.GetTickSize() * 130) { 청산수량처리(SENM, 진입수량, "매도 포지션 익절"); T = 0; // 초기화 } } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BEID) { BENM = OrderResponse.orderNum; } if (OrderResponse.orderID == SEID) { SENM = OrderResponse.orderNum; } } function 청산수량처리(orderNum, 수량, message) { Account1.SetUnfillOrderNumber(orderNum); var 청산수량 = 수량 - Account1.Unfill.count; if (Account1.Unfill.count > 0) { Account1.OrderCancel(orderNum); } if (청산수량 > 0) { if (T == 1) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 청산수량, MarketData1.current, 2); Main.MessageList("매수 포지션 청산: " + MarketData1.current + " (" + message + ")"); } else if (T == -1) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 청산수량, MarketData1.current, 2); Main.MessageList("매도 포지션 청산: " + MarketData1.current + " (" + message + ")"); } } } 이렇게 되있는데 어떤땐 정상적으로 2계약체결되고 어떤땐 4계약이 체결됩니다
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-08-26 16:33:16.0

> 1000djr 님이 쓴 글입니다. > 제목 : 문의드립니다 > 안녕하세요 계좌잔고 에 있는데 중복매수되는걸 어떻게 해야하는지 문의드립니다 계좌에 잇다면 pass해야하는데 그걸 어떻게 넣어야 하는지 부탁드립니다 var 진입수량 = 2; var DH, DH1, DL, DL1; var BEID, BENM, SEID, SENM; var CC, C1; var T; function Main_OnStart() { Main.MessageList("Start"); T = 0; } function Main_OnU*dateMarket(sItemCode, lU*dateID) { if (lU*dateID == 20001) { C1 = CC; CC = MarketData1.current; Main.MessageList("Main_OnU*dateMarket", MarketData1.current); // 시초가 + 10틱 터치 if (T <= 0 && C1 > 0 && C1 < MarketData1.open + MarketData1.GetTickSize() * 10 && CC >= MarketData1.open + MarketData1.GetTickSize() * 10) { T = 1; BEID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 진입수량, MarketData1.current, 2); Main.MessageList("매수 진입 주문: " + MarketData1.current,+ MarkerDatal.open); } // 매수 후 손절, 익절, 미체결 셋팅 if (T == 1) { // 손절 셋팅 if (MarketData1.current <= MarketData1.open - MarketData1.GetTickSize() * 8) { 청산수량처리(BENM, 진입수량, "매수 포지션 손절"); T = 0; // 초기화 } // 익절 셋팅 else if (MarketData1.current >= MarketData1.open + MarketData1.GetTickSize() * 130) { 청산수량처리(BENM, 진입수량, "매수 포지션 익절"); T = 0; // 초기화 } } // 시초가 - 10틱 터치 if (T >= 0 && C1 > MarketData1.open - MarketData1.GetTickSize() * 10 && CC <= MarketData1.open - MarketData1.GetTickSize() * 10) { T = -1; SEID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 진입수량, MarketData1.current, 2); Main.MessageList("매도 진입 주문: " + MarketData1.current,+ MarkerDatal.open); } // 매도 후 손절, 익절, 미체결 셋팅 if (T == -1) { // 손절 셋팅 if (MarketData1.current >= MarketData1.open + MarketData1.GetTickSize() * 8) { 청산수량처리(SENM, 진입수량, "매도 포지션 손절"); T = 0; // 초기화 } // 익절 셋팅 else if (MarketData1.current <= MarketData1.open - MarketData1.GetTickSize() * 130) { 청산수량처리(SENM, 진입수량, "매도 포지션 익절"); T = 0; // 초기화 } } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BEID) { BENM = OrderResponse.orderNum; } if (OrderResponse.orderID == SEID) { SENM = OrderResponse.orderNum; } } function 청산수량처리(orderNum, 수량, message) { Account1.SetUnfillOrderNumber(orderNum); var 청산수량 = 수량 - Account1.Unfill.count; if (Account1.Unfill.count > 0) { Account1.OrderCancel(orderNum); } if (청산수량 > 0) { if (T == 1) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 청산수량, MarketData1.current, 2); Main.MessageList("매수 포지션 청산: " + MarketData1.current + " (" + message + ")"); } else if (T == -1) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 청산수량, MarketData1.current, 2); Main.MessageList("매도 포지션 청산: " + MarketData1.current + " (" + message + ")"); } } } 이렇게 되있는데 어떤땐 정상적으로 2계약체결되고 어떤땐 4계약이 체결됩니다