SL e PT com atr para MultiCharts
2 respostas
Eastpeace
4 anos atrás #254805
Olá, Mark,
Embora esse problema tenha sido encerrado com status fixo. Gostaria de discutir novamente o SL e o PT com o ATR para Multicharts.
https://roadmap.strategyquant.com/tasks/sq4_5100
O código do MC está assim agora.
———-
if(MarketPosition > 0) then begin
LongSLPlaced = false;
If BarsSinceEntry = 0 then begin
IntLongSL = 0;
IntLongTS = 0;
fim;
// StopLoss
IntLongSL = Round2Fraction(EntryPrice - (StopLossCoef * SQ_ATR(20)[1]));
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);
….
————-
No código atual, como o valor ATR será alterado a cada barra após a entrada. SL, PT e RR Ratio também serão alterados, embora essa alteração não seja muito grande. Mas ela também é prejudicial.
Supondo que ele mantenha uma posição comprada, se a volatilidade diminuir e o mercado cair lentamente, o stop loss será ampliado.
A maioria das estratégias no MC é executada por barra e atualiza os sinais e as ações depois que a barra é fechada. Portanto, quando a ordem de entrada de parada é acionada, ela usa o valor ATR anterior (barra de sinal), não o da barra atual (barra de entrada).
Portanto, isso não é um problema para a caculação do MM. Ele pode e deve usar o valor ATR fixo. No código do Mc, é assim,
if(MarketPosition > 0) then begin
LongSLPlaced = false;
If BarsSinceEntry = 0 then begin
IntLongSL = entryprice - AtrSLmulti * ATRvalue[1] ;
IntLongPT = entryprice + AtrPTmulti * ATRvalue[1] ;
fim;
Isso será totalmente consistente com o valor ATR usado pelo cálculo da MM quando a condição de entrada for verdadeira.
Isso não tem nada a ver com variáveis globais. Funciona bem no MC. E descobri que o código gerado por outro software também define o SL no bloco de código if (BarsSinceEntry = 0)
Por favor, reconsidere essa abordagem, obrigado.
tomas262
4 anos atrás #254893
Olá,
Atualmente, tem que ser assim. Isso significa que o SL precisa ser modificado de acordo com o valor do ATR. No futuro, poderíamos modificar isso, mas agora, em relação à forma como o TS funciona, preferimos mantê-lo operando dessa maneira
Eastpeace
4 anos atrás #254939
Outro motivo para a necessidade de ajustar a implementação do stop loss e do lucro iniciais.
A estratégia usa níveis de indicadores como stop loss. O stop loss inicial se tornaria um trailing stop loss ou a condição do indicador para a saída.
Isso enfraquecerá o efeito das regras de saída (condição dos indicadores para saída) ou do método de trailing stop, ou causará confusão lógica.
//--------
// Ordens de saída (SL, PT, Trailing) para a regra: Entrada longa
//--------
if(MarketPosition > 0) then begin
LongSLPlaced = false;
If BarsSinceEntry = 0 then begin
IntLongSL = 0;
IntLongTS = 0;
fim;
// StopLoss
IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]);
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);
Venda("LongSL") na próxima barra no stop IntLongSL;
LongSLPlaced = true;
...
Conforme mostrado na figura, se o stop loss inicial for executado na lógica correta, o stop loss intermediário não deverá ocorrer.
Quando modifico os códigos no MC. A estratégia é executada de forma lógica. O módulo de trailing stop desempenhará o papel que deve desempenhar.
if(MarketPosition > 0) then begin
LongSLPlaced = false;
If BarsSinceEntry = 0 then begin
//IntLongSL = 0;
IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]);
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);
IntLongTS = 0;
fim;
// StopLoss
//IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]);
//IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);
Venda("LongSL") na próxima barra no stop IntLongSL;
LongSLPlaced = true;
…
Visualizando 2 respostas - 1 até 2 (de um total de 2)