아래코드는 차트와 연동하여 체결확인을 하면서 청산주문이나 취소주문을 내는 경우의 예제입니다.
다만... 이렇게 체결확인 안하고 미체결 잔량에 대하여 정정주문으로 한방에 하는 것도 방법일 겁니다. Maybe...
var Position
var OrderCode
var BID, SID //requesID
var BNum, SNum //주문번호
var BuyFill, SellFill
function Main::[안내]태그제한으로등록되지않습니다-xxOnStart()
{
//디버깅출력
Main.MessageLog("시작");
Position = 0;
//Main객체의 GetOrderCode함수는 입력한 종목코드를 주문용 종목코드로 리턴해 주는 함수입니다.
//일반적으로 차트등에서 많이 사용하는 연결선물지수는 선물근월물을 연결한 데이터이므로
//종목코드인 00000000은 실제 존재하는 종목의 코드가 아니라 데이터 구분용 코드로 보시면 됩니다.
//이런 종목코드를 주문함수에 이용하면 에러가 발생하므로 연결선물지수나 ATM연결콜풋과 같은
//데이터를 종목객체나 차트의 종목으로 사용한다면 주문용 종목코드로 변경해서 주문함수에서
//이용해야 합니다.
OrderCode = Main.GetOrderCode(F1.Code);
}
//OnRiseSignal은 연결된 차트에서 완성신호가 발생했을 때 호출되는 이벤트이고
//완성신호 정보는 완성신호객체(Signal)가 제공합니다
function C1::OnRiseSignal(Signal)
{
//디버깅출력
Main.MessageLog("신호완성"+Signal.signalKind);
//Buy 완성신호
if (Signal.signalKind == 1)
{
Position = 1;
//주문수량으로 지정한 Signal.count는 차트시스템에서 설정된 수량입니다
BID = A1.OrderBuy(OrderCode, Signal.count, F1.current, 0);
BuyFill = 0;
Main.MessageLog("매수진입");
}
//ExitLong 완성신호 발생했을 경우
if (Position == 1 && Signal.signalKind == 2)
{
if (BuyFill == 1)
{
A1.OrderSell(OrderCode, Signal.count, F1.Bid(2), 0)
Main.MessageLog("매수청산실행");
}
if (BuyFill == 0)
{
A1.OrderCancel(BNum)
Main.MessageLog("매수청산취소");
}
}
//Sell 완성신호 발생했을 경우
if (Signal.signalKind == 3)
{
Position = -1;
//주문수량으로 지정한 Signal.count는 차트시스템에서 설정된 수량입니다
SID = A1.OrderSell(OrderCode, Signal.count, F1.current, 0);
SellFill = 0;
Main.MessageLog("매도진입");
}
//ExitShort 완성신호 발생했을 경우
if (Position == -1 && Signal.signalKind == 4)
{
if (SellFill == 1)
{
A1.OrderBuy(OrderCode, Signal.count, F1.Bid(2), 0)
Main.MessageLog("매도청산실행");
}
if (SellFill == 0)
{
A1.OrderCancel(SNum)
Main.MessageLog("매도청산취소");
}
}
}
// 주문응답 이벤트 발생
function Main::OnOrderResponse(OrderResponse)
{
if (Position == 1 && OrderResponse.orderID == BID)
{
BNum = OrderResponse.orderNum;
}
if (Position == -1 && OrderResponse.orderID == SID)
{
SNum = OrderResponse.orderNum;
}
}
// 체결통보 이벤트 발생
function Main::OnNotifyFill(NotifyFill)
{
if (Position == 1 && NotifyFill.orderNum == BNum)
{
BuyFill = 1;
}
if (Position == -1 && NotifyFill.orderNum == SNum)
{
SellFill = 1;
}
}
첫댓글 이안님 좋은글 감사합니다..!!
더 많은 좋은 예제 팍팍 올려주세요!!