Neo traderBot

Neo traderBot

Você sabia?

Abordamos o tema de automatização de estratégias em NTSL, MQL5 e NinjaScript!

leaf leftleaf right
Notifications
Clear all

[Solucionado] Seria possível limitar a Execução ao atingir o Gain ou Loss diário usando a função DailyResult

5 Posts
2 Usuários
0 Reactions
242 Visualizações
Credson
(@m4tr1xbr)
Membro Moderator
Registrou: 2 anos atrás
Posts: 45
Iniciador do tópico  

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.


   
Citar
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
 

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;

   
ReplyCitar
Credson
(@m4tr1xbr)
Membro Moderator
Registrou: 2 anos atrás
Posts: 45
Iniciador do tópico  

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.


   
ReplyCitar
Credson
(@m4tr1xbr)
Membro Moderator
Registrou: 2 anos atrás
Posts: 45
Iniciador do tópico  

No seu código você esqueceu do limite de loss diário.


   
ReplyCitar
Credson
(@m4tr1xbr)
Membro Moderator
Registrou: 2 anos atrás
Posts: 45
Iniciador do tópico  

Não tinha visto que você usou o Abs para o Gain e Loss.


   
ReplyCitar