답변완료
문의
요청내용은 2가지 입니다.
1. 아래 수식은 "084500 부터" 시세감시와 계산을 통해 진입합니다.
이 수식을 "차트에서 sell 신호가 나오면" 그때부터 시세감시와 계산을 하는 수식으로 변경하고 싶습니다.
084500 작동 내용은 삭제하여 주십시요.
2. 오후 3시 15분에 손절 또는 익절이 안된 상태로 미결제 콜풋 한쌍이 남아있을 때 청산하는 수식 추가해 주십시요.
항상 고맙습니다.
*********************************************************************************
var ID1,ID2,num1,num2;
var Entry,CallCode,PutCode;
var Xvol1,Xvol2;
function Main_OnStart()
{
Main.MessageList("Start");
Main.SetTimer(1, 5000);
Entry = 0;
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (HHMMSS >= 84500)
{
var sum = Option1.GetCurrent(0,0)+Option1.GetCurrent(1, 0);
var diff = Math.abs(Option1.GetCurrent(0,0)-Option1.GetCurrent(1, 0));
if (Entry == 0 && sum <= 20 && diff <= 0.10)
{
Entry = sum;
CallCode = Option1.GetATMCallRecent(0);
PutCode = Option1.GetATMPutRecent(0);
ID1 = Account1.OrderBuy(CallCode, 1, Option1.GetAsk(CallCode, 5), 0);
ID2 = Account1.OrderBuy(PutCode, 1, Option1.GetAsk(PutCode, 5), 0);
Xvo11 = 1;
Xvo12 = 1;
}
if (Entry > 0 &&
(Option1.GetCurrent(CallCode)+Option1.GetCurrent(PutCode) >= Entry+1) ||
(Option1.GetCurrent(CallCode)+Option1.GetCurrent(PutCode) <= Entry-1))
{
if (Xvol1 > 0)
{
Account1.SetUnfill(num1);
if (Account1.Unfill.count > 0)
{
Xvol1 = Xvol1-Account1.Unfill.count;
Account1.OrderCancel(num1);
}
}
if (Xvol2 > 0)
{
Account1.SetUnfill(num2);
if (Account1.Unfill.count > 0)
{
Xvol2 = Xvol2-Account1.Unfill.count;
Account1.OrderCancel(num2);
}
}
if (Xvol1 > 0)
{
Account1.OrderSell(CallCode, Xvol1, Option1.GetBid(CallCode, 5), 0);
}
if (Xvol2 > 0)
{
Account1.OrderSell(PutCode, Xvol2, Option1.GetBid(PutCode, 5), 0);
}
//Entry = 0;
Main.KillTimer(1);
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == ID1)
{
num1 = OrderResponse.orderNum;
}
if (OrderResponse.orderID == ID2)
{
num2 = OrderResponse.orderNum;
}
}
답변완료
yesspot으로 pair trading을 작성했는데 중복주문이 동시에 여러번 들어갑니다.
MarketData1과 MarketData2 간에 호가차이가 8bp 이하면 entry해서 15bp 이상에서 exit하는 로직입니다.
그런데entry, exit시에 중복으로 3~5건 계약이 중복되고 주문시간이 같아서
Main.SetTimer(1,10000); 를 추가했지만 그래도 중복으로 들어갑니다.
검토 부탁드립니다.ㅠ.ㅜ
var A1orderOfUnfills; //A1 미체결 주문
var A2orderOfUnfills; //A2 미체결 주문
var obsevationSpreadForBuy;
var obsevationSpreadForSell;
var obsevationSpreadForStopLoss;
var buySpread = 0.08;
var sellSpread = 0.15;
function Main_OnU*pdateMarket(sItemCode, lU*pdateID)
{
obsevationSpreadForBuy = MarketData2.Bid(1) - MarketData1.Ask(1);
obsevationSpreadForSell = MarketData2.Ask(1) - MarketData1.Bid(1);
obsevationSpreadForStopLoss = MarketData2.Ask(1) - MarketData1.Bid(1); // spread 0 이하인지
Account1.SetBalanceItem(MarketData1.code, 0); //nPosition 0: 구분없음, 1:매도, 2:매수
Account2.SetBalanceItem(MarketData2.code, 0);
A1orderOfUnfills = Account1.GetTheNumberOfUnfills();
A2orderOfUnfills = Account2.GetTheNumberOfUnfills()
if(Account1.Balance.count == 0 && Account2.Balance.count == 0 && A1orderOfUnfills == 0 && A2orderOfUnfills == 0) {
if (obsevationSpreadForBuy <= buySpread)
{
Main.MessageLog("매수 신호 구간");
Main.MessageLog("MarketData1 Ask/"+ MarketData1.Ask(1));
Main.MessageLog("MarketData2 Bid/"+ MarketData2.Bid(2));
//MarketData1 2계약 매수1호가로 매도
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(1),2);
//MarketData2 1계약 매도1호가로 매수
Account2.OrderBuy(Main.GetOrderCode(MarketData2.code), 1, MarketData2.Bid(1),2);
Main.SetTimer(1,10000);//10초 지연. 미체결 주문 확인해도 중복 체결돼서 추가함 ---------------------------------------> 그래도 계속 중복 주문이 들어감
}
} else if(Account1.Balance.count == 1 && Account2.Balance.count == 1 && A1orderOfUnfills == 0 && A2orderOfUnfills == 0) {
//MarketData1(10년물) 매도1호가와 MarketData2(2년물) 매수1호가 간에 금리차이가 buySpread 이상이면 매수
if (obsevationSpreadForSell > sellSpread)
{
Main.MessageLog("obsevationSpreadForSell/" + obsevationSpreadForSell);
Main.MessageLog("sellSpread/" + sellSpread);
Main.MessageLog("청산 신호 구간");
Main.MessageLog("MarketData1 Ask/"+ MarketData1.Ask(1));
Main.MessageLog("MarketData2 Bid/"+ MarketData2.Bid(2));
//MarketData1 2계약 매도1호가로 매수
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(1),2);
//MarketData2 1계약 매수1호가로 매도
Account2.OrderSell(Main.GetOrderCode(MarketData2.code), 1, MarketData2.Ask(1),2);
Main.SetTimer(1,10000);//10초 지연. 미체결 주문 확인해도 중복 체결돼서 추가함 ---------------------------------------> 그래도 계속 중복 주문이 들어감
}
}
}
답변완료
처분 관련
A1.SetBalance(Callcode,0);
A1.SetBalance(Putcode,0);
if ( A1.Balance.count > 0 && A1.Balance.position == 2 && (BuyCond == 0 || SellCond == 0) )
{
if ( A1.Balance.current <= A1.Balance.avgUnitCost*0.63 )
{
A1.OrderSell(A1.Balance.code, A1.Balance.count, 0, 1);
BuyCond = 0;
SellCond = 0;
Main.MessageList("BuyCond:" ,BuyCond)
Main.MessageList("SellCond:" ,SellCond)
}
}