Discussão do artigo "Automatizando Estratégias de Negociação em MQL5 (Parte 3): O Sistema Zone Recovery RSI para Gestão Dinâmica de Operações"

 

Novo artigo Automatizando Estratégias de Negociação em MQL5 (Parte 3): O Sistema Zone Recovery RSI para Gestão Dinâmica de Operações foi publicado:

Neste artigo, criamos um Sistema EA Zone Recovery RSI em MQL5, utilizando sinais de RSI para acionar operações e uma estratégia de recuperação para gerenciar perdas. Implementamos uma classe "ZoneRecovery" para automatizar as entradas de operações, a lógica de recuperação e o gerenciamento de posições. O artigo conclui com insights de backtesting para otimizar a performance e aprimorar a eficácia do EA.

O Sistema Zone Recovery RSI combina o indicador Relative Strength Index (RSI) para entradas de trade com um mecanismo de Zone Recovery para gerenciar movimentos adversos de preço. As entradas são acionadas quando o RSI cruza níveis-chave — tipicamente 30 para sobrevenda (compra) e 70 para sobrecompra (venda). No entanto, o verdadeiro poder do sistema está em sua capacidade de recuperar operações perdedoras usando um modelo de Zone Recovery bem estruturado.

O sistema Zone Recovery estabelece quatro níveis críticos de preço para cada operação: Zone High, Zone Low, Target High e Target Low. Quando uma operação é aberta, esses níveis são calculados em relação ao preço de entrada. Para uma operação de compra, o Zone Low é definido abaixo do preço de entrada, enquanto o Zone High fica no preço de entrada. Para uma operação de venda, o Zone High fica acima do preço de entrada, enquanto o Zone Low se alinha a ele. Se o mercado ultrapassar o Zone Low (para compras) ou o Zone High (para vendas), uma operação contrária é acionada na direção oposta com um tamanho de lote maior, baseado em um multiplicador pré-definido. Os níveis Target High e Target Low definem os pontos de realização de lucro para compras e vendas, garantindo que as operações sejam encerradas com lucro quando o mercado se move a favor da posição. Essa abordagem permite recuperar perdas enquanto controla o risco por meio de um dimensionamento sistemático de posição e ajustes de níveis. Aqui está uma ilustração que resume todo o modelo.

ILUSTRAÇÃO DO ZONE RECOVERY


Autor: Allan Munene Mutiiria

 
Esse EA, na verdade, baseia-se em Martingale, portanto, é difícil controlar grandes perdas. O autor tem algum método para evitar grandes perdas?
 
wupan123898 controlar grandes perdas. O autor tem algum método para evitar grandes perdas?

Obrigado pelo reconhecimento e pelo feedback. É de acordo com a estratégia. Você pode modificá-la para se adequar ao seu estilo de negociação.

 

Não consigo encontrar os arquivos tradq mq onde estão

 
Amir Jafary #:

Não consigo encontrar os arquivos tradq mq onde estão

Isso está perfeitamente explicado, mesmo com a imagem.

 
wupan123898 controlar grandes perdas. O autor tem algum método para evitar grandes perdas?

Bem dito. A estratégia pressupõe que o preço sairá da faixa inicialmente negociada para recuperar as perdas. Como sabemos, pelo menos no que diz respeito ao mercado cambial, os preços variam com mais frequência do que se tornam tendências. O método para atenuar as perdas catastróficas da Martingale seria adicionar um filtro de volatilidade para as negociações iniciais.

 
Ryan L Johnson #:

Bem dito. A estratégia pressupõe que o preço sairá da faixa inicialmente negociada para recuperar as perdas. Como sabemos, pelo menos no que diz respeito ao mercado de câmbio, os preços variam com mais frequência do que as tendências. O método para atenuar as perdas catastróficas da Martingale seria adicionar um filtro de volatilidade para as negociações iniciais.

Com certeza.

 
Allan Munene Mutiiria função também não é nada demais e funcionará melhor, mais rápido e de forma mais flexível do que o ATR incorporado...
ENUM_TIMEFRAMES _atrTimeFrame = PERIOD_D1;
int             _atrPeriod    = 20;
double          _atrValue     = 0;
   MqlRates _rates[]; int _ratesCopied = CopyRates(_Symbol,_atrTimeFrame,0,_atrPeriod+1,_rates);
                      if (_ratesCopied>0)
                           for (int i=1; i<_ratesCopied; i++) _atrValue += MathMax(_rates[i].high,_rates[i-1].close)-MathMin(_rates[i].low,_rates[i-1].close);
                                                              _atrValue /= MathMax(_ratesCopied,1);

 

Eu dei uma olhada no código e me perguntei por que não usar o preço de venda para calcular no caso de compra? Haverá algum conflito se eu mudar isso? Obrigado.