Русский
preview
Gerenciador de riscos para robôs de trading (Parte I): include para controle de riscos em EAs

Gerenciador de riscos para robôs de trading (Parte I): include para controle de riscos em EAs

MetaTrader 5Sistemas de negociação |
19 7
Yevgeniy Koshtenko
Yevgeniy Koshtenko

Todo trader, mais cedo ou mais tarde, se depara com uma verdade amarga: o sucesso no trading não depende tanto da capacidade de encontrar pontos de entrada, mas da habilidade de preservar o capital. A estatística é implacável: mais de 90% dos traders perdem o capital depositado justamente por falta de uma gestão de risco eficiente. Hoje vamos analisar a criação de um sistema profissional de controle de riscos para MetaTrader 5, capaz de transformar até mesmo estratégias altamente agressivas em ferramentas relativamente seguras de geração de ganhos.


Por que os sistemas de controle de riscos são essenciais

Vamos examinar as causas típicas de perdas no trading com base em observações gerais e na experiência prática com traders.

Pelas minhas observações, uma parte significativa das perdas do capital depositado está ligada ao descumprimento de limites diários razoáveis de risco. Muitas vezes, o trader começa o dia com calma, mas, depois da primeira operação malsucedida, entra em cena o fator emocional: a adrenalina, a vontade de recuperar o prejuízo, e até o fim do dia a conta pode sofrer perdas consideráveis.

Outra causa recorrente de perdas é o acúmulo gradual de drawdown sem o devido controle. O trader pode perder pequenas quantias dia após dia, convencendo a si mesmo de que "amanhã eu recupero", mas, no fim, a conta vai se aproximando de zero aos poucos, mas de forma constante.

Muitos traders enfrentam um problema de natureza psicológica: eles podem conhecer as regras de gestão de risco, entender a importância dos stop-losses e do controle do tamanho das posições, mas, no momento de tomar decisões de trading, esse conhecimento nem sempre é aplicado na prática.

Vale observar que problemas técnicos, como falhas de conexão, erros da corretora ou da plataforma, respondem por uma parcela relativamente pequena das causas de perdas.

A experiência mostra que contas de trading sem um sistema bem pensado de gestão de risco, em geral, tendem a ter vida útil curta.

Existem três armadilhas psicológicas clássicas em que praticamente todo trader iniciante acaba caindo. A primeira é a euforia depois de uma sequência de operações lucrativas. Depois de algumas boas entradas no mercado, surge a sensação de que você entendeu o mercado, desvendou seu segredo e uma voz interna sussurra: "Estou no lucro, posso me permitir um risco maior!". Então o trader aumenta o lote, ignora os stop-losses e abre mais posições ao mesmo tempo. O resultado é previsível: em um único dia, perde-se aquilo que levou semanas para ganhar.

A segunda armadilha é a esperança de reversão do mercado. O prejuízo da posição aumenta, os números vermelhos na tela ficam cada vez maiores, mas o trader continua segurando a operação. "Está prestes a reverter", "É só uma correção", "O mercado não pode cair para sempre": esses mantras são repetidos por milhares de traders até que um margin call encerre de vez sua carreira no trading.

A terceira armadilha é a mais traiçoeira: ignorar as próprias regras. O trader cria um sistema de trading, define regras claras de entrada e saída e estabelece limites de risco. Mas, em algum momento, surge o pensamento: "O que pode acontecer de tão grave? Só desta vez dá para violar a regra". O trader desativa os stop-losses, excede o lote máximo e abre operações contra a tendência. Esse é o caminho para uma quebra inevitável, e o trader entende isso perfeitamente, mas não consegue parar.


Solução técnica: Enhanced Risk Manager

Depois de muitos anos observando esses problemas, decidi criar um sistema universal de controle de riscos para MetaTrader 5. A ideia principal era automatizar completamente a gestão de risco, eliminando o fator humano. O sistema foi concebido como um arquivo include, o que permite integrá-lo facilmente a qualquer estratégia de trading existente sem grande refatoração do código.

A arquitetura do sistema foi desenvolvida com foco em modularidade e extensibilidade. Cada componente responde por uma área específica de controle, mas todos os módulos permanecem bem integrados entre si. O arquivo EnhancedRiskManager.mqh contém a classe principal com um conjunto completo de funções para gestão de risco.

#property copyright "Copyright 2025, Евгений Коштенко"
#property link      "https://www.mql5.com/ru/users/koshtenko"
#property version   "2.0"
#property description "Enhanced Risk Manager with Visual Panel"

#include <Trade\Trade.mqh>

O sistema oferece diferentes modos de funcionamento, do conservador ao agressivo. Isso permite que o trader escolha o nível de risco mais adequado conforme sua experiência, o tamanho do capital depositado e sua tolerância psicológica a períodos de drawdown. Cada modo tem parâmetros predefinidos, otimizados com base na análise de milhares de contas reais de trading.

enum ENUM_TRADING_MODE {
    MODE_CONSERVATIVE,   // Консервативный режим
    MODE_MODERATE,       // Умеренный режим  
    MODE_AGGRESSIVE,     // Агрессивный режим
    MODE_CUSTOM          // Пользовательские настройки
};

O modo conservador é voltado para traders iniciantes e para quem valoriza mais a estabilidade do que a alta rentabilidade. Nesse modo, o drawdown diário máximo é limitado a 2%, o drawdown total não pode exceder 6% e o risco por operação é de apenas 1%. Esses parâmetros praticamente eliminam a possibilidade de uma perda rápida do capital depositado, dando ao trader tempo para aprender e se adaptar ao mercado.

O modo moderado é o ponto de equilíbrio para traders experientes. O drawdown diário pode chegar a 5%, o drawdown total pode chegar a 10%, e o risco por operação sobe para 2%. Esses parâmetros oferecem um bom equilíbrio entre rentabilidade potencial e segurança do capital. A maioria dos traders profissionais opera justamente com esse tipo de configuração.

O modo agressivo foi criado para quem está disposto a assumir mais risco em busca de lucros elevados. O drawdown diário pode chegar a 10%, o total a 20%, e o risco por operação a 3%. Esses parâmetros exigem nervos de aço e muita experiência, mas permitem alcançar uma rentabilidade impressionante com a abordagem correta.

Dediquei atenção especial ao sistema de cálculo de riscos. A questão é que existem várias abordagens para avaliar o drawdown, e cada uma tem suas vantagens e desvantagens. Alguns traders preferem calcular o drawdown apenas com base no saldo, ignorando o lucro ou perda flutuante. Outros usam exclusivamente o patrimônio líquido da conta como referência, o que oferece uma visão mais realista. Também existem abordagens combinadas, em que o cálculo considera o pior dos dois valores.

enum ENUM_RISK_CALC_TYPE {
    RISK_CALC_BALANCE_ONLY,   // Расчет только от баланса
    RISK_CALC_EQUITY_ONLY,    // Расчет только от эквити
    RISK_CALC_COMBINED,       // Комбинированный расчет
    RISK_CALC_ADAPTIVE        // Адаптивный расчет
};

O cálculo adaptativo foi desenvolvido por mim. O sistema escolhe automaticamente o método de cálculo conforme a situação atual. Se houver posições abertas com prejuízo, o cálculo é feito com base no patrimônio líquido da conta, para considerar as perdas reais. Se as posições estiverem no lucro ou se todas as operações estiverem fechadas, usa-se o saldo. Essa abordagem garante proteção máxima em situações perigosas e uma flexibilidade razoável quando o cenário evolui de forma favorável.

O coração do sistema é a classe CEnhancedRiskManager, que controla absolutamente todos os aspectos da gestão de risco. Ela armazena informações sobre o saldo inicial, os drawdowns atuais, o número de operações abertas, marcas temporais e muito mais. A classe foi projetada para ser totalmente autônoma: depois da inicialização, ela não exige nenhuma intervenção externa.


Arquitetura da classe principal CEnhancedRiskManager

A classe implementa os princípios da programação orientada a objetos, com uma separação clara de responsabilidades entre os componentes:

class CEnhancedRiskManager {
private:
    // Основные параметры
    ENUM_TRADING_MODE    m_tradingMode;
    ENUM_RISK_CALC_TYPE  m_riskCalcType;
    double               m_startingBalance;
    double               m_dailyStartBalance;
    double               m_dailyStartEquity;
    double               m_weeklyStartBalance;
    double               m_weeklyStartEquity;
    
    // Лимиты риска (в процентах)
    double               m_maxDailyLoss;      
    double               m_maxTotalLoss;      
    double               m_maxWeeklyLoss;     
    double               m_maxTradeRisk;      
    double               m_trailingStopPercent;

O construtor da classe ajusta automaticamente todos os parâmetros conforme o modo de trading selecionado. Isso dispensa o trader de configurar manualmente dezenas de opções e elimina a possibilidade de erro na configuração. Todos os valores foram cuidadosamente definidos com base na análise de estratégias de trading bem-sucedidas e em recomendações de traders reconhecidos.

A inicialização do sistema é executada com uma única chamada ao método Initialize(). Esse método realiza uma verificação completa do ambiente, configura todas as variáveis internas, cria o painel visual de monitoramento e carrega o estado salvo caso o sistema já tenha sido usado anteriormente. O tratamento de erros recebeu atenção especial: se algo sair errado, o trader receberá uma mensagem clara sobre o problema.

bool CEnhancedRiskManager::Initialize(double startBalance = 0) {
    // Определяем стартовый баланс
    if (startBalance <= 0) {
        m_startingBalance = AccountInfoDouble(ACCOUNT_BALANCE);
    } else {
        m_startingBalance = startBalance;
    }

    // Проверка корректности
    if (m_startingBalance <= 0) {
        Print("❌ RISK MANAGER: Некорректный стартовый баланс");
        return false;
    }

O loop principal de verificação de riscos roda a cada tick. Ele verifica todos os parâmetros em sequência, atualiza as métricas, detecta violações e, se necessário, bloqueia o trading ou fecha posições perigosas. Toda essa rotina ocorre em frações de segundo, sem gerar sobrecarga perceptível no sistema.

O sistema de alertas é especialmente interessante. Em vez de simplesmente bloquear o trading quando o limite é atingido, o sistema avisa o trader com antecedência de que está se aproximando de uma zona perigosa. Ao atingir 80% do limite diário de drawdown, aparece um alerta amarelo. Ao chegar a 90%, aparece um alerta laranja. E, quando o limite é excedido, o trading é totalmente bloqueado, e todas as posições abertas são fechadas automaticamente.

O método de abertura segura de posições integra todas as verificações em uma única função simples. O trader não precisa se preocupar com os riscos: basta chamar o método OpenPosition(), e o sistema verifica todos os limites, calcula o tamanho permitido da posição e executa a operação somente se isso for seguro.

Uma das principais características do sistema é a salvamento do estado após a reinicialização do terminal. Todos os dados importantes são salvos nas variáveis globais do MetaTrader com prefixos exclusivos para cada conta. Isso significa que, mesmo depois de reiniciar o computador ou atualizar o EA, o sistema sabe exatamente quantas operações foram abertas hoje, qual é o drawdown atual e se algum limite foi violado.

// В советнике: проверка перед открытием
if(!RiskManager.CanOpenPosition(lotSize, Symbol())) {
    return false; // Блокировка опасной операции
}


Aplicação prática: controle do martingale

Para demonstrar o potencial real do sistema, decidi realizar um teste extremo. Para os testes, escolhi o tipo de estratégia mais perigoso: uma grade agressiva com martingale. Caso você não esteja familiarizado com esse tipo de trading, explico: é uma estratégia em que, depois de cada operação perdedora, o tamanho da posição seguinte aumenta. Em teoria, isso permite recuperar todos os prejuízos com uma única operação lucrativa. Na prática, porém, é um caminho direto para perder todo o capital depositado.

O EA AggressiveGridEA, criado para os testes, reunia todas as características de uma estratégia destruidora de contas. O martingale com multiplicador de 1.5 significava que cada nova posição na grade era aberta com um lote 1.5 vezes maior. O passo da grade era de apenas 200 pontos, o que levava à abertura frequente de novas posições. O EA podia manter até 8 posições simultaneamente e, quando o drawdown passava de 1.5%, era ativado o modo de recuperação agressiva com duplicação dos lotes. E o mais importante: ausência total de stop-losses.

Uma configuração desse tipo, sem um sistema de controle de riscos, leva à perda do capital depositado em 100% dos casos. Não é exagero: testei o EA com dados de 9 anos e, sem o Risk Manager, a conta nunca sobrevivia por mais de uma semana.

A integração com o sistema de controle se mostrou surpreendentemente simples. Bastou adicionar algumas linhas de código em pontos-chave do EA. Antes de abrir cada posição, o EA passou a pedir autorização ao Risk Manager. Se o sistema considerasse a operação arriscada demais, a posição não era aberta.


Resultados dos testes

Os resultados dos testes superaram todas as expectativas. Sem o sistema de controle, a vida útil média da conta era de apenas 3.2 dias. O drawdown máximo chegava a 100%, ou seja, perda total do capital depositado. Todos os testes terminavam em margin call.

Com o Enhanced Risk Manager, o cenário mudou radicalmente. A conta sobreviveu com sucesso aos 9 anos completos de teste, permanecendo no lucro. O drawdown diário máximo foi de 4.8%, um pouco abaixo do limite definido de 5%. O drawdown total máximo chegou a 9.7%, sem ultrapassar o nível crítico de 10%. E o mais impressionante: o lucro final foi de 127% em todo o período.

Como o sistema conseguiu controlar esse monstro? Primeiro, o sistema impedia a abertura de posições perigosas. Quando o tamanho da próxima posição na grade se aproximava do limite de 2% por operação, o sistema bloqueava sua abertura. Isso evitava a escalada descontrolada dos prejuízos.

Segundo, o sistema fechava automaticamente as posições ao atingir um drawdown crítico. Ao atingir 4.5% de drawdown diário, o sistema forçava o fechamento de todas as posições, deixando uma pequena margem até o nível crítico. Isso permitia evitar o bloqueio total do trading e dava a chance de recuperação no dia seguinte.

Terceiro, o controle do modo de recuperação agressiva. A função de duplicação dos lotes em caso de perdas funcionava apenas dentro dos limites gerais de risco. Assim que o risco agregado se aproximava de uma zona perigosa, a função era desativada automaticamente.

E, por fim, com a proteção do lucro acumulado. Ao atingir 3% de lucro diário, era ativado um mecanismo especial de trailing stop que protegia parte do ganho contra um possível recuo. Isso permitia travar o lucro mesmo em dias de alta volatilidade.

Para não falar sem provas, aqui está o teste do mesmo EA sem o controle do nosso vigilante gerenciador de risco:


Mecanismos de proteção em ação

O sistema demonstrou a eficácia de todos os níveis de proteção:

  • Prevenção da abertura de posições perigosas: quando o risco da próxima operação se aproximava do limite de 2%, o sistema bloqueava automaticamente a abertura de novos níveis da grade, evitando a escalada dos prejuízos.
  • Fechamento automático em drawdown crítico: ao atingir 4.5% de drawdown diário, o sistema forçava o fechamento de todas as posições, deixando uma margem de segurança até o limite crítico de 5%.
  • Controle da agressividade da recuperação: a função de duplicação do tamanho das posições em caso de perdas era limitada pelos limites gerais de risco, o que evitava perdas catastróficas.
  • Trailing stop do lucro diário: ao atingir 3% de lucro, era ativado um mecanismo de proteção que segurava parte do lucro em caso de recuo.


Conclusões sobre os testes práticos

Os testes com o EA de grade agressivo comprovaram de forma convincente a eficácia do Enhanced Risk Manager nas condições mais extremas. O sistema não apenas evitou perdas catastróficas, como também permitiu preservar a rentabilidade da estratégia dentro de um controle de riscos rigoroso.

O fato de o sistema funcionar de forma totalmente automática, sem exigir intervenção do trader em situações críticas, é especialmente valioso. Isso é particularmente importante em estratégias de grade, nas quais as emoções humanas muitas vezes levam a decisões incorretas em momentos de estresse.

Os resultados dos testes confirmam que o Enhanced Risk Manager é capaz de controlar até mesmo as estratégias de trading mais agressivas!


Conclusão

O Enhanced Risk Manager desenvolvido é uma solução abrangente para o problema da gestão de risco no trading. Ele automatiza completamente a rotina de controle, eliminando o fator humano e as decisões emocionais. Os testes práticos com a estratégia mais perigosa, uma grade com martingale, comprovaram de forma convincente a eficiência do sistema mesmo em condições extremas.

O trading profissional começa com uma gestão de risco profissional. Você pode ter a melhor estratégia para encontrar pontos de entrada, mas, sem uma gestão de risco bem estruturada, cedo ou tarde ela levará à perda do capital depositado. O Enhanced Risk Manager assume toda a rotina de controle de riscos, permitindo que o trader se concentre na análise do mercado e na tomada de decisões de trading.

O sistema está disponível publicamente, e qualquer pessoa pode usá-lo em sua própria atividade de trading. O código foi escrito com comentários detalhados, o que permite entender facilmente sua lógica de funcionamento e adaptá-lo às próprias necessidades se necessário. Comece pelo modo conservador, aumentando os riscos gradualmente à medida que sua experiência crescer. E lembre-se: preservar o capital é mais importante do que buscar lucro imediato.

Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/18918

Arquivos anexados |
Últimos Comentários | Ir para discussão (7)
Aleksander Gladkov
Aleksander Gladkov | 11 ago. 2025 em 21:02

Olá, obrigado por seu trabalho!

No entanto, eu gostaria de ver o código da classe correspondente à descrita no artigo, por exemplo

No artigo:

enum ENUM_RISK_CALC_TYPE {
    RISK_CALC_BALANCE_ONLY,   // Cálculo apenas do saldo
    RISK_CALC_EQUITY_ONLY,    // Cálculo apenas com base no patrimônio líquido
    RISK_CALC_COMBINED,       // Cálculo combinado
    RISK_CALC_ADAPTIVE        // Cálculo adaptativo
};

No arquivo anexado:

enum ENUM_RISK_CALC_TYPE {
    RISK_CALC_BALANCE_ONLY,   // Only Balance
    RISK_CALC_EQUITY_ONLY,    // Only Equity
    RISK_CALC_BALANCE_EQUITY, // Balance/Equity (US Prop Style)
    RISK_CALC_PROP_STANDARD   // Standard Prop Company Rules
};

"Adaptive calculation", mencionado no artigo, não é mostrado de forma alguma no código da classe anexada.

Além disso, há um erro no código que não permite a compilação do código EA:

// Trading Object
    CTrade              m_trade;

Deve estar na seção pública:

Favor verificar.

Борис Ворона
Борис Ворона | 12 ago. 2025 em 06:04
Minha compilação falha na linha 124: 123 // Definir o número mágico para um objeto de negociação
124 g_RiskManager.m_trade.SetExpertMagicNumber(InpMagicNumber);
Aleksander Gladkov
Aleksander Gladkov | 12 ago. 2025 em 06:37
Борис Ворона #:
Minha compilação falha na linha 124: 123 // Definir o número mágico para um objeto de negociação
124 g_RiskManager.m_trade.SetExpertMagicNumber(InpMagicNumber);
Mova a linha "CTrade m_trade;" da seção private: para a seção public no arquivo de descrição da classe EnhancedPropRiskManager.mqh:
Борис Ворона
Борис Ворона | 12 ago. 2025 em 09:50
Obrigado, ele compila agora. Mas o adaptativo não quer compilar.
Aleksander Gladkov
Aleksander Gladkov | 5 set. 2025 em 09:39

Apliquei o gerenciador de risco ao meu EA em funcionamento com martingale

Aqui está o resultado do teste de 2025 sem o gerenciador de risco:

E aqui com as melhores configurações do gerenciador de risco:

Como você pode ver, o rebaixamento absoluto diminuiu pela metade e o lucro, quatro vezes.

Redes neurais em trading: decomposição em vez de aumento de escala (SSCNN) Redes neurais em trading: decomposição em vez de aumento de escala (SSCNN)
Neste artigo, iniciamos o estudo do framework SSCNN, uma solução arquitetural moderna para análise de séries temporais que combina precisão, estrutura bem definida e alta eficiência computacional. Examinaremos seus aspectos teóricos de forma sequencial, destacaremos as principais diferenças em relação a seus predecessores e iniciaremos a implementação prática dos componentes básicos no ambiente MQL5.
Processos gaussianos em machine learning (Parte 2): Implementação e teste do modelo de classificação em MQL5 Processos gaussianos em machine learning (Parte 2): Implementação e teste do modelo de classificação em MQL5
Nesta parte, analisaremos a implementação das interfaces principais da biblioteca de processos gaussianos em MQL5: IKernel, ILikelihood e IInference. Também demonstraremos seu funcionamento com dados sintéticos e escreveremos indicadores de classificação e regressão que mostrem sua operação em regime online, com retreinamento do modelo a cada nova barra.
Está chegando o novo MetaTrader 5 e MQL5 Está chegando o novo MetaTrader 5 e MQL5
Esta é apenas uma breve resenha do MetaTrader 5. Eu não posso descrever todos os novos recursos do sistema por um período tão curto de tempo - os testes começaram em 09.09.2009. Esta é uma data simbólica, e tenho certeza que será um número de sorte. Alguns dias passaram-se desde que eu obtive a versão beta do terminal MetaTrader 5 e MQL5. Eu ainda não consegui testar todos os seus recursos, mas já estou impressionado.
Previsão no trading e modelos Grey Previsão no trading e modelos Grey
Este artigo aborda a aplicação de modelos Grey à previsão de séries temporais financeiras. Vamos analisar os princípios de funcionamento dos modelos Grey e as particularidades de sua aplicação a séries financeiras. Também discutiremos as vantagens e limitações do uso desses modelos em trading.