예스스탁
예스스탁 답변
2016-03-21 18:27:49
안녕하세요
예스스탁입니다.
중복진입이 잔고의 포지션여부이신것같습니다.
현재 수식은 T가 처음에는 0이고
T가 0이나 -1일때만 매수신호가 발생시
매수주문을 실행합니다. 매수신호 발생후 T가 1로 변경이 되어
다시 차트에서 매수가 발생해도 주문을 하지 않습니다.
매도도 같은 개념으로
매수진입과 매도진입이 번갈아 가면서 주문되도록 되어 있습니다.
식 2개를 올려드립니다.
1번식은 최초 적용시 차트의 포지션 여부에 따라 반대부터
신호 발생하고 이후 매수와 매도 반복합니다.
2번식은 잔고체크해서
잔고포지션과 동일방향이 아닐때만 주문하게 됩니다.
1번
var entry,T;
function Main_OnStart()
{
T = 0;
if (CTP.GetOpenContracts() > 0)
T = 1;
if (CTP.GetOpenContracts() < 0)
T = -1;
Main.MessageLog("시작");
OrderCode = Main.GetOrderCode(SP.code);
entry = 0;
}
function CTP_OnRiseSignal(Signal)
{
Main.MessageLog("신호완성/"+Signal.signalKind);
if (T <= 0 && Signal.signalKind == 1)
{
T = 1;
entry = entry+1;
Main.KillTimer(2);
if (entry == 1)
VV = 1;
else
VV = 2;
Main.SetTimer(1, 180000);
}
if (T >= 0 && Signal.signalKind == 3)
{
T = -1;
entry = entry+1;
if (entry == 1)
VV = 1;
else
VV = 2;
Main.KillTimer(1);
Main.SetTimer(2, 180000);
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && T == 1)
{
Main.KillTimer(1);
A1.OrderBuy(SP.code, VV, SP.Ask(5),2);
Main.MessageLog("매수진입");
}
if (nEventID == 2 && T == -1)
{
Main.KillTimer(2);
A1.OrderSell(SP.code, VV, SP.Bid(5),2);
Main.MessageLog("매도진입");
}
}
2번
var entry,T;
function Main_OnStart()
{
T = 0;
Main.MessageLog("시작");
OrderCode = Main.GetOrderCode(SP.code);
entry = 0;
}
function CTP_OnRiseSignal(Signal)
{
Main.MessageLog("신호완성/"+Signal.signalKind);
A1.SetBalance(Main.GetOrderCode(Signal.code))
if (T <= 0 && (A1.Balance.position == 1 || A1.Balance.position == 0) && Signal.signalKind == 1)
{
T = 1;
entry = entry+1;
Main.KillTimer(2);
if (entry == 1)
VV = 1;
else
VV = 2;
Main.SetTimer(1, 180000);
}
if (T >= 0 && (A1.Balance.position == 2 || A1.Balance.position == 0) && Signal.signalKind == 3)
{
T = -1;
entry = entry+1;
if (entry == 1)
VV = 1;
else
VV = 2;
Main.KillTimer(1);
Main.SetTimer(2, 180000);
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && T == 1)
{
Main.KillTimer(1);
A1.OrderBuy(SP.code, VV, SP.Ask(5),2);
Main.MessageLog("매수진입");
}
if (nEventID == 2 && T == -1)
{
Main.KillTimer(2);
A1.OrderSell(SP.code, VV, SP.Bid(5),2);
Main.MessageLog("매도진입");
}
}
즐거운 하루되세요
> 너무조아 님이 쓴 글입니다.
> 제목 : 부탁합니다.
> 아래수식에서 중복진입이 허용되지 않도록 하려면 어떻게 하여야 하나요?
var entry,T;
function Main_OnStart()
{
T = 0;
Main.MessageLog("시작");
OrderCode = Main.GetOrderCode(SP.code);
entry = 0;
}
function CTP_OnRiseSignal(Signal)
{
Main.MessageLog("신호완성/"+Signal.signalKind);
if (T <= 0 && Signal.signalKind == 1)
{
T = 1;
entry = entry+1;
Main.KillTimer(2);
if (entry == 1)
VV = 1;
else
VV = 2;
Main.SetTimer(1, 180000);
}
if (T >= 0 && Signal.signalKind == 3)
{
T = -1;
entry = entry+1;
if (entry == 1)
VV = 1;
else
VV = 2;
Main.KillTimer(1);
Main.SetTimer(2, 180000);
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && T == 1)
{
Main.KillTimer(1);
A1.OrderBuy(SP.code, VV, SP.Ask(5),2);
Main.MessageLog("매수진입");
}
if (nEventID == 2 && T == -1)
{
Main.KillTimer(2);
A1.OrderSell(SP.code, VV, SP.Bid(5),2);
Main.MessageLog("매도진입");
}
}