답변완료
문의 드립니다.
안녕하세요.
매수진입(롱포)-매수청산(롱포청산)-매수진입(롱포)-매수청산(롱포청산)... 이런 과정이 계속되도록 하고 싶은데,
실제로 시스템과 스팟을 실행시키면, 매도(숏)포지션이 발생하고, 또 그 게 두 개 세 개로 쌓이기까지 합니다.
YesSpotHelp 파일 속의 예제4번(취소주문)이나, 또 이 곳의 질의응답 글을 보면서 방법을 찾고 있는데, 이리 저리 해서 고치고 실행시켜도 계속 실제 매매포지션이 쌓이는 현상이 계속되고 있습니다.
아마도
Balance,
Unfill,
NotifyFill,
GetTheNumberOfBalances,
GetTheNumberOfUnfills,
SetBalanceIndex,
SetUnfillIndex
등등을 잘 이용하면 될 듯도 한데 아직까지 성공하지 못했습니다.
그래서, 두 가지로 질문을 요약하여 올리오니, 만일 여러 가지 다양한 방법들이 가능하다면, 가능한 대로 이런 저런 조금씩 다른 방법들도 알려 주시면 대단히 감사하겠습니다.
1. 이미 매도(숏)포지션이 계좌 잔고에 존재한다면, 절대로 다시 스팟에 의한 매도 주문이 나가지 않도록 하는 방법.
2. 또한, 이미 미체결인 매도주문이 존재한다면, 절대로 다시 스팟에 의한 매도 주문이 나가지 않도록 하는 방법.
이 두 문제에 대해서, 위에서 언급드린 Unfill 등을 사용해서라든지, 여하튼 어떤 방법으로라도, 하나만이 아니라 여러가지 가능한 방법들이 있다면 가능하면 다양하게, 해결할 수 있는 방법을 알려 주시면 대단히 감사하겠습니다.
감사합니다.
2013-07-25
1339
글번호 222459
답변완료
시간정정주문 문의드립니다
항상수고 많으십니다
선물챠트의 시그널을 이용해 옵션 등가 양매도 전략을 구사 할려고 합니다
진입 및 청산로직은 최초 우선1호가 -> 1차정정 우선1호가 -> 2차정정 현재가 -> 3차정정 상대2호가 체결입니다.
최초주문은 우선1호가에 잘들어가나 진입시 1차정정 청산시 2차정정주문이 들어 가지 않습니다. 틀린부분 지적 부탁드립니다.
var Start;
var BuyCallCode;
var BuyPutCode;
var SellCallCode;
var SellPutCode;
var SellCallPrice;
var SellPutPrice;
var BxCallPrice;
var BxPutPrice;
var ExCallNum;
var ExPutNum;
var SellCallNum;
var SellPutNum;
var CallInID;
var PutExID;
var CallExID;
var PutInID;
function Main_OnStart()
{
Main.MessageLog("시작");
Start = 0;
}
function C1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1 )
{
Start = 1;
SellPutCode = Option.GetATMPutRecent(0);
SellPutPrice = Option.GetAskByCode(SellPutCode,1);
PutInID = A1.OrderSell(SellPutCode, 1, SellPutPrice, 0);
Main.SetTimer(21, 10000);
Main.SetTimer(22, 20000);
Main.SetTimer(23, 30000);
}
if (Start == 1 && Signal.signalKind == 2 )
{
BxPutPrice = Option.GetBidByCode(SellCallCode,1);
PutExID = A1.OrderBuy(SellPutCode, 1, BxPutPrice, 0);
Main.SetTimer(31, 60000);
Main.SetTimer(32, 120000);
Main.SetTimer(33, 170000);
}
if (Signal.signalKind == 3 )
{
Start = 1;
SellCallCode = Option.GetATMCallRecent(0);
SellCallPrice = Option.GetAskByCode(SellCallCode,1);
CallInID = A1.OrderSell(SellCallCode, 1, SellCallPrice, 0);
Main.SetTimer(1, 10000);
Main.SetTimer(2, 20000);
Main.SetTimer(3, 30000);
}
if (Start == 1 && Signal.signalKind == 4 )
{
BxCallPrice = Option.GetBidByCode(SellCallCode,1);
CallExID = A1.OrderBuy(SellCallCode, 1, BxCallPrice, 0);
Main.SetTimer(11, 60000);
Main.SetTimer(12, 120000);
Main.SetTimer(13, 170000);
}
}
//PUT매도진입
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == PutInID)
{
SellPutNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 21)
{
Main.KillTimer(21);
A1.SetUnfillOrderNumber(SellPutNum);
if (A1.Unfill.count > 0)
{
PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetAskByCode(SellPutCode,1));
}
}
if (nEventID == 22)
{
Main.KillTimer(22);
A1.SetUnfillOrderNumber(SellPutNum);
if (A1.Unfill.count > 0)
{
PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetCurrentByCode(SellPutCode));
}
}
if (nEventID == 23)
{
Main.KillTimer(23);
A1.SetUnfillOrderNumber(SellPutNum);
if (A1.Unfill.count > 0)
{
PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetBidByCode(SellPutCode,2));
}
}
}
//PUT 매도청산
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == PutExID)
{
ExPutNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 31)
{
Main.KillTimer(31);
A1.SetUnfillOrderNumber(ExPutNum);
if (A1.Unfill.count > 0)
{
PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetBidByCode(SellPutCode,1));
}
}
if (nEventID == 32)
{
Main.KillTimer(32);
A1.SetUnfillOrderNumber(ExPutNum);
if (A1.Unfill.count > 0)
{
PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetCurrentByCode(SellPutCode));
}
}
if (nEventID == 33)
{
Main.KillTimer(33);
A1.SetUnfillOrderNumber(ExPutNum);
if (A1.Unfill.count > 0)
{
PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetAskByCode(SellPutCode,2));
}
}
}
//CALL 매도
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == CallInID)
{
SellCallNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
Main.KillTimer(1);
A1.SetUnfillOrderNumber(SellCallNum);
if (A1.Unfill.count > 0)
{
CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetAskByCode(SellCallCode,1));
}
}
if (nEventID == 2)
{
Main.KillTimer(2);
A1.SetUnfillOrderNumber(SellCallNum);
if (A1.Unfill.count > 0)
{
CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetCurrentByCode(SellCallCode));
}
}
if (nEventID == 3)
{
Main.KillTimer(3);
A1.SetUnfillOrderNumber(SellCallNum);
if (A1.Unfill.count > 0)
{
CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetBidByCode(SellCallCode,2));
}
}
}
//CALL 매도청산
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == CallExID)
{
ExCallNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 11)
{
Main.KillTimer(11);
A1.SetUnfillOrderNumber(ExCallNum);
if (A1.Unfill.count > 0)
{
CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetBidByCode(SellCallCode,1));
}
}
if (nEventID == 12)
{
Main.KillTimer(12);
A1.SetUnfillOrderNumber(ExCallNum);
if (A1.Unfill.count > 0)
{
CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetCurrentByCode(SellCallCode));
}
}
if (nEventID == 13)
{
Main.KillTimer(13);
A1.SetUnfillOrderNumber(ExCallNum);
if (A1.Unfill.count > 0)
{
CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetAskByCode(SellCallCode,2));
}
}
}
2013-07-17
1329
글번호 222454