Discussão do artigo "Expert Advisor Multiplataforma: Stops personalizados, Breakeven e Stop Móveis"

 

Novo artigo Expert Advisor Multiplataforma: Stops personalizados, Breakeven e Stop Móveis foi publicado:

Este artigo discute como os níveis de stop personalizados podem ser configurados em um expert advisor multiplataforma. Ele também discute um método fortemente relacionado ao assunto na qual envolve a possibilidade de definir a evolução do nível de stop ao longo do tempo.

O seguinte recurso mostra um diagrama de cálculo do breakeven da maneira descrita acima. Com base neste fluxograma, os três valores de ativação, desativação e novo nível de stop são calculados de antemão. Se o nível de preço atual for maior ou igual ao nível de preço mínimo exigido para o estágio inicial (ajustando o passo para o breakeven), o novo nível de stop calculado anteriormente será usado como o novo nível de stop para a operação. Caso contrário, a saída seria zero. O próximo passo seria verificar se o novo nível de stop está dentro do nível do stop atual, que sempre deve retornar true se a condição anterior for satisfeita e, assim, retornaria o nível de stop calculado como a saída final.


Breakeven

Autor: Enrico Lambino

 

Oi Enrico. Seu excelente trabalho continua. Não se canse, continue com o ótimo trabalho.

 

Olá,

Parece que não é possível definir um volume específico (porcentagem) para o trailing stop?

 

Como faço para usar 2 ou mais TS?

Este é o meu código:

//--- trailing stop
   CTrails *trails=new CTrails();
   //--- definindo o ponto de equilíbrio
   CTrail *trail_be=new CTrail();
   trail_be.Set(BELevel,BEOpenPriceDist,0);   
   trails.Add(trail_be);
   //--- definindo o trailing stop
   CTrail *trail=new CTrail();
   trail.Set(trail_value,trail_start,trail_step);
   trails.Add(trail);
   //--- 
   main.Add(trails);

O ponto de equilíbrio não funciona nesse caso. Se eu remover o trailing stop (objeto trail), o ponto de equilíbrio funciona bem.

 
mbjen:

Olá,

Parece que não é possível definir um volume específico (porcentagem) para o trailing stop?

Sim, não é possível. CTrail e CTrails servem apenas para modificar o nível de stop. Para o volume, você precisa defini-lo no CStop.
mbjen:

Como faço para usar 2 ou mais TS?

Este é o meu código:

O ponto de equilíbrio não funciona nesse caso. Se eu remover o trailing stop (objeto trail), o ponto de equilíbrio funciona bem.

Isso dependeria da ativação e da distância que você definiu para os dois (breakeven e trail). Mas é provável que o trailing tenha sido acionado primeiro, antes do breakeven. O breakeven não será mais aplicado se o nível de stop já estiver acima do preço de breakeven que você definiu.
 
Enrico Lambino:
Sim, isso não é possível. CTrail e CTrails são apenas para modificação do nível de parada. Isso dependeria da ativação e da distância que você definiu para os dois (ponto de equilíbrio e trilha). Mas é provável que o trailing tenha sido acionado primeiro, antes do breakeven. O breakeven não será mais aplicado se o nível de stop já estiver acima do preço de breakeven que você definiu.
Abaixo as configurações que uso. O Breakeven não está funcionando. Pelo que entendi, o segundo rastro deve ser ativado na distância 500, certo? Portanto, o ponto de equilíbrio deve ser ativado antes. Então, por que não está funcionando?
   //--- trailing stop
   CTrails *trails=new CTrails();
   //--- definindo o ponto de equilíbrio
   CTrail *trail_be=new CTrail();
   //trail_be.Set(BELevel,BEOpenPriceDist,0); 
   trail_be.Set(230,250,0);   
   trails.Add(trail_be);
   //--- definindo o trailing stop
   CTrail *trail=new CTrail();
   //trail.Set(trail_value,trail_start,trail_step);
   trail.Set(200,500,10);
   trails.Add(trail);
   //--- 
   main.Add(trails);
 
//--- trailing stop
   CTrails *trails=new CTrails();
   //--- definindo o ponto de equilíbrio
   CTrail *trail_be=new CTrail();
   //trail_be.Set(BELevel,BEOpenPriceDist,0); 
   trail_be.Set(230,250,0);   
   trails.Add(trail_be);
   //--- definindo o trailing stop
   CTrail *trail=new CTrail();
   //trail.Set(trail_value,trail_start,trail_step);
   trail.Set(400,500,10);
   trails.Add(trail);
   //--- 
   main.Add(trails);

Também não funciona.

 
mbjen:

Também não funciona.

Tente reduzir sua meta de ativação de breakeven/trailing. O fato de você ter definido um ponto de equilíbrio ou trailing não significa que o mercado seja obrigado a atingi-lo.

 
Enrico Lambino:

Tente reduzir sua meta de ativação de breakeven/trailing. O fato de você ter definido um breakeven ou trailing não significa que o mercado seja obrigado a atingi-lo.


Estou verificando o mesmo período do histórico do mercado no backtest. Se eu ativar o TS (trailing stop regular) e o BE, somente o TS funcionará e o BE não funcionará (não vejo a linha de parada). Se eu desativar o TS, o BE funcionará bem. Eu testo no backtest e verifico as linhas de stop.

 
mbjen:

Estou verificando o mesmo período do histórico de mercado no backtest. Se eu ativar o TS (trailing stop regular) e o BE, somente o TS funcionará e o BE não funcionará (não vejo a linha de parada). Se eu desativar o TS, o BE funcionará bem. Eu testo no backtest e verifico as linhas de stop.

Qual é o valor de seu takeprofit? É igual ou maior que o preço de ativação (em pontos) para BE?
 
mbjen:

Também não funciona.

Seu primeiro código ativa o breakeven, não o trailingstop. Se houvesse qualquer modificação adicional do SL, seria o takeprofit. Mas se o seu TP for de 500 pontos, o trailing não seria ativado em 500 pontos, já que a negociação já saiu do mercado nesse ponto.

Seu segundo código usa o trailingtop, mas não o breakeven. Porque mesmo antes que o ponto de equilíbrio possa ser aplicado, o SL já se moveu acima do preço de equilíbrio.