예스스탁
예스스탁 답변
2019-08-08 14:31:46
안녕하세요
예스스탁입니다.
주문응답은 각 주문이 발생하는 화면에만 전달됩니다.
차트에서 발생한 신호에 대한 응답은 스팟으로 수신되지 않아 스팟에서 알수가 없습니다.
그러므로 문의하신 내용을 구현하려면 차트에서는 신호만 발생하고
스팟으로 모든 주문이 나가게 설정하셔야 합니다.
아래 수식은 차트에서 신호발생하면 주문하고
주문이 주문거부 될 경우 다시 주문하는 내용입니다.
참고하셔서 수정보완해 사용하시기 바랍니다.
스크립트 객체설정
계좌객체 추가 --> 객체명 Account1, 주문계좌번호 지정
차트객체 추가 --> 객체명 Chart1, 차트와 아이디 연결
종목객체 추가 --> 객체명 MarketData1, 차트와 같은 종목으로 지정
var : BID,Bnum,SID,Snum;
var : BXID,Bnum,SXID,Snum;
function Main_OnStart()
{
Main.MessageList("Spot Start");
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
Main.MessageList("Buy신호 발생");
//매도3호가로 매수주문 후 주문아이디를 BID에 저장
BID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(3), 2);
}
if (Signal.signalKind == 2)
{
//Bnum주문번호 미체결 셋팅
Account1.SetUnfill(Bnum);
//미체결이 있으면]
if (Account1.Unfill.count > 0)
{
//취소
Account1.OrderCancel(Bnum);
}
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
//매수포지션 수량이 있으면 전량 매수3호가로 청산(매도주문)
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
BXID = Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,MarketData1.Bid(3),2);
}
}
if (Signal.signalKind == 3)
{
Main.MessageList("Sell신호 발생");
//매수3호가로 매도주문 후 주문아이디를 SID에 저장
SID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(3), 2);
}
if (Signal.signalKind == 4)
{
//Snum주문번호 미체결 셋팅
Account1.SetUnfill(Snum);
//미체결이 있으면]
if (Account1.Unfill.count > 0)
{
//취소
Account1.OrderCancel(Snum);
}
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
//매도포지션 수량이 있으면 전량 매수3호가로 청산(매수주문)
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
SXID = Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,MarketData1.Ask(3),0);
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
//주문응답 아이디가 BID와 같으면
if (OrderResponse.orderID == BID)
{
//주문이 정상접수 됐으면 Bnum에 주문번호 저장
if (OrderResponse.isNormal == true)
{
Bnum = OrderResponse.orderNum;
}
else //정상접수가 되지 않으면(주문거부등 기타사유)
{
//다시 주문
BID = Account1.OrderBuy(OrderResponse.code, OrderResponse.orderCount,OrderResponse.orderPrice, 2);
}
}
if (OrderResponse.orderID == BXID)
{
//주문이 정상접수 됐으면 BXnum에 주문번호 저장
if (OrderResponse.isNormal == true)
{
BXnum = OrderResponse.orderNum;
}
else //정상접수가 되지 않으면(주문거부등 기타사유)
{
//다시 주문
BXID = Account1.OrderSell(OrderResponse.code, OrderResponse.orderCount,OrderResponse.orderPrice, 2);
}
}
//주문응답 아이디가 SID와 같으면 Snum에 주문번호 저장
if (OrderResponse.orderID == SID)
{
//주문이 정상접수 됐으면 Snum에 주문번호 저장
if (OrderResponse.isNormal == true)
{
Snum = OrderResponse.orderNum;
}
else //정상접수가 되지 않으면(주문거부등 기타사유)
{
//다시 주문
SID = Account1.OrderSell(OrderResponse.code, OrderResponse.orderCount,OrderResponse.orderPrice, 2);
}
}
if (OrderResponse.orderID == SXID)
{
//주문이 정상접수 됐으면 SXnum에 주문번호 저장
if (OrderResponse.isNormal == true)
{
SXnum = OrderResponse.orderNum;
}
else //정상접수가 되지 않으면(주문거부등 기타사유)
{
//다시 주문
SXID = Account1.OrderBuy(OrderResponse.code, OrderResponse.orderCount,OrderResponse.orderPrice, 2);
}
}
}
즐거운 하루되세요
> 탄탄시스템 님이 쓴 글입니다.
> 제목 : 주문거부시 재주문
> 안녕하세요.
예스트레이더로 해외선물 매매를 하고 있는데,
종종 호가범위 외 주문이나 매수/매도 동시주문 등으로 주문거부가 일어납니다.
이럴 경우 예스스팟으로 재주문을 내는 방법을 부탁드립니다.
정리하면 아래그림처럼 주문거부로 자동정정 정지 상태가 되면 스팟으로 재주문 내는 수식 부탁드립니다.