Abordamos o tema de automatização de estratégias em NTSL, MQL5 e NinjaScript!
Pessoal, estou com o codigo abaixo que funciona perfeitamente. Mas em alguns momentos o PROFIT me dispara uma mensagem " ESTADO DA ORDEM NÃO PERMITE CANCELAMENTO". Não consegui encontrar uma solução. Agradecerei muito se alguém identificar. codigo abaixo:
Input
HorarioInicio (0930);
HorarioFinal (1700);
__Indicador ("Indicador");
Periodo (30);
Desvio (1.50);
Stop (300);
PeridoDI (34);
Var
LRCcen,LRCsup,LRCinf : Float;
Begin
if (Time >= HorarioFinal) then ClosePosition;
LRCcen := LinearRegressionChannel(Periodo,True,Desvio,True,Desvio);
LRCsup := LinearRegressionChannel(Periodo,True,Desvio,True,Desvio)|1|;
LRCinf := LinearRegressionChannel(Periodo,True,Desvio,True,Desvio)|2|;
{Plotagem Indicador}
Plot (LRCcen); SetPlotColor(1,clCinza);
Plot2 (LRCsup); SetPlotColor(2,255);
Plot3 (LRCinf); SetPlotColor(3,clLime);
Se (DIPDIM(PeridoDI)|1|) > (DIPDIM(PeridoDI)|0|) então
PaintBar(ClBlue)
senao PaintBar(ClYellow);
Se (Time >= HorarioInicio) and (Time <= HorarioFinal) então
Inicio
//----- ADMINSTRACAO DE COMPRA
Inicio
Se IsBought e Hasposition então
Inicio
SellToCoverLimit(LRCcen-(1*MinPriceIncrement));
SellToCoverStop(BuyPrice-Stop,SellPrice-Stop-400);
Fim;
Se (DIPDIM(PeridoDI)|1| > DIPDIM(PeridoDI)|0|) então ClosePosition;
Fim;
//----- ADMINSTRACAO DE VENDA
Inicio
Se isSold e Hasposition então
Inicio
BuyToCoverLimit(LRCcen+(1*MinPriceIncrement));
BuyToCoverStop(Sellprice+Stop,SellPrice+Stop+400);
Fim;
Se (DIPDIM(PeridoDI)|1| < DIPDIM(PeridoDI)|0|) então ClosePosition;
Fim;
// ---- ABRIR OPERAÇÕES
Se Not HasPosition e (Time > HorarioInicio) and (Time < HorarioFinal) entao
Inicio
Se (Fechamento > LRCCen) e (DIPDIM(PeridoDI)|1| > DIPDIM(PeridoDI)|0|) e (Maxima < LRCSup) ou (Maxima[1] < LRCSup) então
Inicio
SellShortLimit(LRCsup+(1*MinPriceIncrement));
Fim;
Se (Fechamento < LRCCen) e (DIPDIM(PeridoDI)|0| > DIPDIM(PeridoDI)|1|) e (Minima > LRCInf) ou (Minima[1] > LRCInf) então
Inicio
BuyLimit(LRCinf-(1*MinPriceIncrement));
Fim;
Fim;
Fim;
Fim;
Paulo, bom dia
Acredito que esse tipo de erro seja somente um BUG, pois aparece na minha plataforma em algum momento.
Esse setup é interessante, mas precisa fazer uns ajustes no seu codigo e testar no backtesting com break point .
//Coloração
if (DIPDIM(PeridoDI)|1|) > (DIPDIM(PeridoDI)|0|) then
PaintBar(RGB(255,0,0))
else if (DIPDIM(PeridoDI)|1|) < (DIPDIM(PeridoDI)|0|) then
PaintBar(RGB(0,255,0))
else
PaintBar(RGB(255,255,255));
espero ter ajudado
abraços
Mkw