예스스탁
예스스탁 답변
2016-12-29 15:56:51
안녕하세요
예스스탁입니다.
1.
var T;
function Main_OnStart()
{
T = 0;
Main.MessageLog("시작");
OrderCode = Main.GetOrderCode(KP.code);
}
function C1_OnRiseIncompleteSignal(IncompleteSignal)
{
Main.MessageLog("미완성신호발생/" + IncompleteSignal.signalKind);
A1.SetBalance(Main.GetOrderCode(IncompleteSignal.code))
if ((A1.Balance.position == 1 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 1)
{
T = 1;
if (A1.Balance.position == 0)
VV = 1;
else
VV = 2;
Main.SetTimer(1,10000);
}
if ( A1.Balance.position == 1 && IncompleteSignal.signalKind == 3)
{
T = 0;
Main.KillTimer(1);
Main.SetTimer(2,10000);
}
if ((A1.Balance.position == 2 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 3)
{
T = -1;
if(A1.Balance.position == 0)
VV = 1;
else
VV = 2;
Main.SetTimer(2,10000);
}
if (A1.Balance.position == 2 && IncompleteSignal.signalKind == 1)
{
T = 0;
Main.KillTimer(2);
Main.SetTimer(1,10000);
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && T == 1)
{
Main.MessageLog("매수진입");
Main.KillTimer(1);
if (VV >= 1 && VV <= 2)
{
A1.OrderBuy(KP.code, 1, KP.Ask(5),2);
}
if (VV == 2)
{
Main.SetTimer(11,5000);
}
}
if (nEventID == 1 && T == 0)
{
Main.KillTimer(1);
Main.MessageLog("중복매수진입금지");
}
if (nEventID == 2 && T == -1)
{
Main.MessageLog("매도진입");
Main.KillTimer(2);
if (VV >= 1 && VV <= 2)
{
A1.OrderSell(KP.code, 1, KP.Bid(5),2);
}
if (VV == 2)
{
Main.SetTimer(22,5000);
}
}
if (nEventID == 2 && T == 0)
{
Main.KillTimer(2);
Main.MessageLog("중복매도진입금지");
}
if (nEventID == 11)
{
Main.KillTimer(11);
A1.OrderBuy(KP.code, 1, KP.Ask(5),2);
}
if (nEventID == 22)
{
Main.KillTimer(22);
A1.OrderSell(KP.code, 1, KP.Bid(5),2);
}
}
2
자바스크립트는 이벤트 중심의 언어입니다.
어떤 이벤트가 발생하면 어떤 이벤트인지 정보를 확인하는 작업을 하게 됩니다.
IncompleteSignal.signalKind는
function C1_OnRiseIncompleteSignal(IncompleteSignal)이벤트가 발생할때만 실행됩니다.
이벤트가 없으면 해당 이벤트 안의 로직은 수행하지 않습니다.
즉 미완성 신호가 발생할때만 값이 전달되고
이벤트 안의 로직이 수행되므로 이벤트가 IncompleteSignal.signalKind는 0을 가질수 없습니다.
즐거운 하루되세요
> 너무조아 님이 쓴 글입니다.
> 제목 : 부탁드립니다.
> 1.아래 수식에서는 현재 1계약의 포지션이 있는경우 반대포지션으로의 1계약 진입을 위하여는,
청산과 진입을 위하여 2계약 (VV = 2;) 이 동시에 주문체결하게 됩니다.
이를 5초간의 시간차를 두고 1계약씩 주문체결 되도록 수식을 변경 하여 주시면 감사 하겠습니다.
2. 매수 미완성신호발생을 IncompleteSignal.signalKind == 1 로
매도 미완성신호발생을 IncompleteSignal.signalKind == 3 으로 하면
미완성신호가 없는 경우의 표기는 IncompleteSignal.signalKind == 0 으로 하면 되나요?
var T;
function Main_OnStart()
{
T = 0;
Main.MessageLog("시작");
OrderCode = Main.GetOrderCode(KP.code);
}
function C1_OnRiseIncompleteSignal(IncompleteSignal)
{
Main.MessageLog("미완성신호발생/" + IncompleteSignal.signalKind);
A1.SetBalance(Main.GetOrderCode(IncompleteSignal.code))
if ((A1.Balance.position == 1 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 1)
{
T = 1;
if(A1.Balance.position == 0)
VV = 1;
else
VV = 2;
Main.SetTimer(1,10000);
}
if ( A1.Balance.position == 1 && IncompleteSignal.signalKind == 3)
{
T = 0;
Main.KillTimer(1);
Main.SetTimer(2,10000);
}
if ((A1.Balance.position == 2 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 3)
{
T = -1;
if(A1.Balance.position == 0)
VV = 1;
else
VV = 2;
Main.SetTimer(2,10000);
}
if (A1.Balance.position == 2 && IncompleteSignal.signalKind == 1)
{
T = 0;
Main.KillTimer(2);
Main.SetTimer(1,10000);
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && T == 1)
{
Main.KillTimer(1);
A1.OrderBuy(KP.code, VV, KP.Ask(5),2);
Main.MessageLog("매수진입");
}
if (nEventID == 1 && T == 0)
{
Main.KillTimer(1);
Main.MessageLog("중복매수진입금지");
}
if (nEventID == 2 && T == -1)
{
Main.KillTimer(2);
A1.OrderSell(KP.code, VV, KP.Bid(5),2);
Main.MessageLog("매도진입");
}
if (nEventID == 2 && T == 0)
{
Main.KillTimer(2);
Main.MessageLog("중복매도진입금지");
}
}