Abordamos o tema de automatização de estratégias em NTSL, MQL5 e NinjaScript!
Bom dia galera, Tenho uma estratégia, que usa R$ 100,00 de Gain e R$ 100,00 de Loss diário, eu sei que posso usar o editor de automação para limitar a execução ao valor diário, só que o editor de automação irá pausar minha estratégia, como eu uso uma máquina virtual para rodar o profit eu tenho que ficar entrando nela e ativando a estratégia manualmente no dia seguinte já que ela foi pausada. O que eu gostaria de fazer é limitar via código para que ao atingir o gain ou loss a estratégia não execute mais naquele dia e só execute novamente no dia seguinte. Assim a máquina virtual pode rodar 24x7 sem que eu precise acessá-la e ficar ativando a estratégia manualmente. Com isso também seria possível usar a estratégia em SwingTrade.
Opa, @Credson!
Perfeitamente possível. Você pode utilizar a função recém-criada na NTSL DailyResult. O código seria mais ou menos isso aqui abaixo. Observe que coloquei uma constante, a qual uma vez que o resultado absoluto do dia seja maior que cLimiteGanhoPerda, a posição é encerrada e a variável booleana bInterromperEstrategiaNoDia é setada para true.
Grande abs!
const cLimiteGanhoPerda = 100; var bInterromperEstrategiaNoDia: boolean; iDataHoje: integer; fResultado: float; begin if iDataHoje <> Date then begin iDataHoje := Date; fResultado := 0; bInterromperEstrategiaNoDia := false; end; fResultado := DailyResult(true); if Abs(fResultado) >= cLimiteGanhoPerda then begin if hasPosition then ClosePosition; bInterromperEstrategiaNoDia := true; end; if not bInterromperEstrategiaNoDia then begin //TODOS SINAIS DE COMPRA E VENDA FICAM AQUI DENTRO end; end;
Valeu Jonh, eu até consegui fazer o algoritmo para pausar a estratégia, mas o seu código está mais refinado. Vou usar ele.
Percebi um problema no novo Backtesting, se você colocar um limite de Gain e Loss diário via editor do Backtesting vai dar um resultado falso. Tem dia que nem atinge o limite estipulado e o backtesting para como se tivesse atingido a meta.
Adicionei um arquivo com backtesting usando objetivo de Gain e Limite de perda no novo backtesting e a mesma estratégia com o limite diário via código.
Também peguei um dia em que deu mais de uma entrada e rodei no Replay usando as duas configurações.
A limitação via Código é muito mais realista que o limite via editor.
No seu código você esqueceu do limite de loss diário.
Não tinha visto que você usou o Abs para o Gain e Loss.