예스스탁
예스스탁 답변
2013-07-19 10:53:27
안녕하세요
예스스탁입니다.
1.
식상 잘못작성하신 부분이 있습니다.
자바스크립트에서 하나의 수식에서 특정이벤트는 한번만 사용하셔야 합니다.
간단하게 아래식 테스트 해보시면
가장 아래에 메세지만 찍히는 것을 보실수 있습니다.
function Main_OnStart()
{
Main.SetTimer(1, 5000);
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
Main.MessageList("1");
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
Main.MessageList("2");
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
Main.MessageList("3");
}
2.
정정주문은 정정주문할 가격과 원주문의 가격이 동일할 경우
발생할 수가 없습니다. 정정주문시에 정정가격과 같은지를 확인하는 작업이 필요합니다
3. 아래는 수정한 식입니다
최초 우선1호가로 주문후에
1차정정 - 현재 우선1호가가 주문가격과 동일하지 않으면 정정주문
동일하면 패스.
2차정정 - 현재가격이 주문가격과 동일하지 않으면 정정주문
동일하면 패스.
3차정정 - 상대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);
}
}
function Main_OnOrderResponse(OrderResponse)
{
//PUT매도진입
if (OrderResponse.orderID == PutInID)
{
SellPutNum = OrderResponse.orderNum;
}
//PUT 매도청산
if (OrderResponse.orderID == PutExID)
{
ExPutNum = OrderResponse.orderNum;
}
//CALL 매도
if (OrderResponse.orderID == CallInID)
{
SellCallNum = OrderResponse.orderNum;
}
//CALL 매도청산
if (OrderResponse.orderID == CallExID)
{
ExCallNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
//PUT매도진입 타이머 동작
if (nEventID == 21)
{
Main.KillTimer(21);
A1.SetUnfillOrderNumber(SellPutNum);
var SellPutRePrice1 = Option.GetAskByCode(SellPutCode,1);
if (A1.Unfill.count > 0 && A1.Unfill.Price != SellPutRePrice1)
{
PutInID = A1.OrderReplacePrice(SellPutNum, SellPutRePrice1);
}
}
if (nEventID == 22)
{
Main.KillTimer(22);
A1.SetUnfillOrderNumber(SellPutNum);
var SellPutRePrice2 = Option.GetCurrentByCode(SellPutCode);
if (A1.Unfill.count > 0 && A1.Unfill.Price != SellPutRePrice2)
{
PutInID = A1.OrderReplacePrice(SellPutNum,SellPutRePrice2);
}
}
if (nEventID == 23)
{
Main.KillTimer(23);
A1.SetUnfillOrderNumber(SellPutNum);
var SellPutRePrice3 = Option.GetBidByCode(SellPutCode,2);
if (A1.Unfill.count > 0 && A1.Unfill.Price != SellPutRePrice3)
{
PutInID = A1.OrderReplacePrice(SellPutNum,SellPutRePrice3);
}
}
//PUT 매도청산 타이머동작
if (nEventID == 31)
{
Main.KillTimer(31);
A1.SetUnfillOrderNumber(ExPutNum);
var ExPutRePrice1 = Option.GetBidByCode(SellPutCode,1);
if (A1.Unfill.count > 0 && A1.Unfill.Price != ExPutRePrice1)
{
PutExID = A1.OrderReplacePrice(ExPutNum,ExPutRePrice1);
}
}
if (nEventID == 32)
{
Main.KillTimer(32);
A1.SetUnfillOrderNumber(ExPutNum);
var ExPutRePrice2 = Option.GetCurrentByCode(SellPutCode);
if (A1.Unfill.count > 0 && A1.Unfill.Price != ExPutRePrice2)
{
PutExID = A1.OrderReplacePrice(ExPutNum, ExPutRePrice2);
}
}
if (nEventID == 33)
{
Main.KillTimer(33);
A1.SetUnfillOrderNumber(ExPutNum);
var ExPutRePrice3 = Option.GetAskByCode(SellPutCode,2);
if (A1.Unfill.count > 0 && A1.Unfill.Price != ExPutRePrice3)
{
PutExID = A1.OrderReplacePrice(ExPutNum,ExPutRePrice3);
}
}
//CALL 매도 타이머동작
if (nEventID == 1)
{
Main.KillTimer(1);
A1.SetUnfillOrderNumber(SellCallNum);
var SellCallRePrice1 = Option.GetAskByCode(SellCallCode,1);
if (A1.Unfill.count > 0 && A1.Unfill.Price != SellCallRePrice1)
{
CallInID = A1.OrderReplacePrice(SellCallNum,SellCallRePrice1);
}
}
if (nEventID == 2)
{
Main.KillTimer(2);
A1.SetUnfillOrderNumber(SellCallNum);
var SellCallRePrice2 = Option.GetCurrentByCode(SellCallCode);
if (A1.Unfill.count > 0 && A1.Unfill.Price != SellCallRePrice2)
{
CallInID = A1.OrderReplacePrice(SellCallNum,SellCallRePrice2);
}
}
if (nEventID == 3)
{
Main.KillTimer(3);
A1.SetUnfillOrderNumber(SellCallNum);
var SellCallRePrice3 = Option.GetBidByCode(SellCallCode,2);
if (A1.Unfill.count > 0 && A1.Unfill.Price != SellCallRePrice3)
{
CallInID = A1.OrderReplacePrice(SellCallNum,Option.SellCallRePrice3);
}
}
//CALL 매도청산 타이머 동작
if (nEventID == 11)
{
Main.KillTimer(11);
A1.SetUnfillOrderNumber(ExCallNum);
var ExCallRePrice1 = Option.GetBidByCode(SellCallCode,1);
if (A1.Unfill.count > 0 && A1.Unfill.Price != ExCallRePrice1)
{
CallExID = A1.OrderReplacePrice(ExCallNum,ExCallRePrice1);
}
}
if (nEventID == 12)
{
Main.KillTimer(12);
A1.SetUnfillOrderNumber(ExCallNum);
var ExCallRePrice2 = Option.GetCurrentByCode(SellCallCode);
if (A1.Unfill.count > 0 && A1.Unfill.Price != ExCallRePrice2)
{
CallExID = A1.OrderReplacePrice(ExCallNum,Option.ExCallRePrice2);
}
}
if (nEventID == 13)
{
Main.KillTimer(13);
A1.SetUnfillOrderNumber(ExCallNum);
var ExCallRePrice3 = Option.GetAskByCode(SellCallCode,2);
if (A1.Unfill.count > 0 && A1.Unfill.Price != ExCallRePrice3)
{
CallExID = A1.OrderReplacePrice(ExCallNum,ExCallRePrice3);
}
}
}
즐거운 하루되세요
> 재령 님이 쓴 글입니다.
> 제목 : 시간정정주문 문의드립니다
> 항상수고 많으십니다
선물챠트의 시그널을 이용해 옵션 등가 양매도 전략을 구사 할려고 합니다
진입 및 청산로직은 최초 우선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));
}
}
}