수동으로 주문을 내고 체결이 되면 즉, 계좌에 종목이 추가되면 청산 로직이 동작하도록 하는 스팟 로직을 사용하고 있습니다. 계약을 추가해서 진입시켜도 스팟이 계좌를 체크하여 평균단가를 기준으로 청산이 진행되도록 동작하고 있습니다.
추가로 주문을 넣었는데 추가 주문은 체결되지 않고 목표 청산 가격에 도달하여 청산을 시작하게 되었을 때 현재 미체결 추가 주문은 취소되도록 하고 싶습니다.
예를 들어,아래와 같은 상황이 순차적으로 일어난다고 가정해보겠습니다.
1) 수동으로 1계약 250에 매수 진입 후 1계약을 251에 추가 매수 체결
(스팟에서 첫번째 체결이 들어오면서 동작 시작했고 현재 평균단가 250.5를 기준으로 2p 도달하면 청산합니다.)
2) 스팟이 동작을 시작한 상태에서 수동으로 250에 1계약 그리고 250.5에 1계약을 추가로 주문을 넣습니다.
3) 추가로 주문 넣은 2계약은 체결되지 못하고 2p 청산 기준에 도달하여 청산 로직 동작
위의 경우에 3)번 상황에 왔을 때 수동으로 추가 주문한 2계약의 미체결 주문을 스팟에서 확인하고 취소할 수 있는지요?
답변 1
예스스탁
예스스탁 답변
2013-08-12 18:10:44
안녕하세요
예스스탁입니다.
아래식 참고하시기 수정보완해 사용하시기 바랍니다.
+2포인트 수익나 청산매도를 내기전에
선물에 대해 미체결이 있으면 모두 취소하고 주문내게 하는 식입니다.
스크립트 객체화면에 계좌객체와 종목객체가 있어야 합니다.
계좌객체명 Account1 --> 속성에서 계좌지정
종목객체명 MarketData1 --> 속성에서 선물로 지정
수식상 게시판 금칙어가 있습니다.
영문 업데이트가 Up*date와 같이 *가 추가되어 있으니 삭제하시고 사용하셔야 합니다.
//계좌에 선물 종목 편입/추가될때 잔고 셋팅
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)// *삭제
{
if (sAccntNum == Account1.number &&
sItemCode == Main.GetOrderCode(MarketData1.code) &&
(lUp*dateID == 30001 || lUp*dateID == 30003))// *삭제
{
//잔고 셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
}
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)// *삭제
{
//선물종목 시세 업데이트가 되면
if (sItemCode == MarketData1.current && lUp*dateID == 20001)// *삭제
{
//잔고가 매수포지션이고 현재가격이 잔고 평균단가 +2보다 크면 청산
if (Account1.Balance.position == 2 && MarketData1.current >= Account1.Balance.avgUnitCost+2)
{
//총 미체결수
var UnFillCnt = Account1.GetTheNumberOfUnfills();
//미체결을 리스트에서 가장 위부터 불러와 선물종목이면 모두 취소
for (var i = 0; i < UnFillCnt; i++ )
{
//미체결 셋팅
Account1.SetUnfillIndex(i)
if (Account1.Unfill.code == Main.GetOrderCode(MarketData1.code))
{
Account1.OrderCancel(Account1.Unfill.orderNum);
}
}
//잔고수량을 매수5호가로 매도
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0);
}
//잔고가 매도포지션이고 현재가격이 잔고 평균단가 -2보다 크면 청산
if (Account1.Balance.position == 1 && MarketData1.current <= Account1.Balance.avgUnitCost-2)
{
//총 미체결수
var UnFillCnt = Account1.GetTheNumberOfUnfills();
//미체결을 리스트에서 가장 위부터 불러와 선물종목이면 모두 취소
for (var i = 0; i < UnFillCnt; i++ )
{
//미체결 셋팅
Account1.SetUnfillIndex(i)
if (Account1.Unfill.code == Main.GetOrderCode(MarketData1.code))
{
Account1.OrderCancel(Account1.Unfill.orderNum);
}
}
//잔고수량을 매도5호가로 매수
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0);
}
}
}
즐거운 하루되세요
> 곰탈 님이 쓴 글입니다.
> 제목 : 수동 주문한 미체결 주문 취소
> 수동으로 주문을 내고 체결이 되면 즉, 계좌에 종목이 추가되면 청산 로직이 동작하도록 하는 스팟 로직을 사용하고 있습니다. 계약을 추가해서 진입시켜도 스팟이 계좌를 체크하여 평균단가를 기준으로 청산이 진행되도록 동작하고 있습니다.
추가로 주문을 넣었는데 추가 주문은 체결되지 않고 목표 청산 가격에 도달하여 청산을 시작하게 되었을 때 현재 미체결 추가 주문은 취소되도록 하고 싶습니다.
예를 들어,아래와 같은 상황이 순차적으로 일어난다고 가정해보겠습니다.
1) 수동으로 1계약 250에 매수 진입 후 1계약을 251에 추가 매수 체결
(스팟에서 첫번째 체결이 들어오면서 동작 시작했고 현재 평균단가 250.5를 기준으로 2p 도달하면 청산합니다.)
2) 스팟이 동작을 시작한 상태에서 수동으로 250에 1계약 그리고 250.5에 1계약을 추가로 주문을 넣습니다.
3) 추가로 주문 넣은 2계약은 체결되지 못하고 2p 청산 기준에 도달하여 청산 로직 동작
위의 경우에 3)번 상황에 왔을 때 수동으로 추가 주문한 2계약의 미체결 주문을 스팟에서 확인하고 취소할 수 있는지요?