첨부 이미지
그림1
안녕하세요 계좌잔고 에 있는데 중복매수되는걸 어떻게 해야하는지 문의드립니다
계좌에 잇다면 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계약이 체결됩니다