English Русский 中文 Deutsch Português
preview
Gestor de riesgos para robots de trading (Parte I): archivo include para el control de riesgos en asesores expertos

Gestor de riesgos para robots de trading (Parte I): archivo include para el control de riesgos en asesores expertos

MetaTrader 5Sistemas comerciales |
145 7
Yevgeniy Koshtenko
Yevgeniy Koshtenko

Tarde o temprano, todo tráder se enfrenta a una amarga realidad: el éxito en el trading no depende tanto de la habilidad para encontrar puntos de entrada como de la capacidad para conservar el capital. Las estadísticas son implacables: más del 90 % de los tráders pierden sus depósitos precisamente por carecer de una gestión eficaz del riesgo. Hoy analizaremos cómo crear un sistema profesional de control de riesgos para MetaTrader 5, capaz de convertir incluso las estrategias más agresivas en herramientas relativamente seguras para generar ingresos.


¿Por qué son fundamentales los sistemas de control de riesgos?

Vamos a analizar las causas más habituales de las pérdidas en el trading, basándonos en observaciones generales y en la experiencia adquirida al trabajar con tráders.

Según mis observaciones, una parte considerable de las pérdidas en los depósitos se debe a que se superan los límites diarios de riesgo razonables. A menudo, el tráder empieza el día con tranquilidad, pero tras la primera operación fallida entra en juego el factor emocional —la excitación, el afán de revancha y el deseo de recuperar lo perdido— y, al final del día, el depósito puede sufrir considerablemente.

Otra causa habitual de las pérdidas es la acumulación gradual de la reducción sin el debido control. Un tráder puede ir perdiendo pequeñas cantidades día tras día, convenciéndose a sí mismo de que «mañana lo recuperaré», pero al final su cuenta se va acercando, lenta pero inexorablemente, a cero.

Muchos tráders se enfrentan a un problema de carácter psicológico: pueden conocer las normas de gestión del riesgo, comprender la importancia de los stop-loss y del control del tamaño de las posiciones, pero, a la hora de tomar decisiones de trading, estos conocimientos no siempre se aplican en la práctica.

Cabe señalar que los problemas técnicos (fallos en la conexión, errores del bróker o de la plataforma) representan una proporción relativamente pequeña del total de causas de las pérdidas.

La experiencia demuestra que las cuentas de trading que carecen de un sistema bien diseñado de gestión de riesgos suelen tener un ciclo de vida corto.

Existen tres trampas psicológicas clásicas en las que cae prácticamente cualquier tráder principiante. La primera es la euforia tras una serie de operaciones rentables. Tras varias entradas exitosas en el mercado, aparece la sensación de haber entendido el mercado, de haber desvelado su secreto; una voz interior susurra: «estoy en positivo, puedo permitirme asumir más riesgo», y el tráder aumenta el lote, ignora los stop-loss y abre más posiciones al mismo tiempo. El resultado es previsible: en un solo día se pierde lo que se había ganado a lo largo de semanas.

La segunda trampa es esperar un giro del mercado. La posición en pérdidas va creciendo, las cifras en rojo en la pantalla son cada vez mayores, pero el tráder sigue manteniendo la operación. «Está a punto de invertirse», «Solo es una corrección», «El mercado no puede caer eternamente»: miles de tráders se repiten estos mantras hasta que un margin call pone un punto final rotundo a su carrera en el trading.

La tercera trampa es la más insidiosa: ignorar las propias reglas. El tráder crea un sistema de trading, establece reglas claras de entrada y salida, y fija límites de riesgo. Pero, en algún momento, surge la idea: «¿Qué podría pasar? Por una vez, puedo saltarme las reglas». Se desactivan los stop-loss, se supera el lote máximo y se abren operaciones en contra de la tendencia. Es el camino hacia un colapso inevitable, y el tráder lo entiende perfectamente, pero no puede detenerse.


La solución técnica: Enhanced Risk Manager

Tras muchos años observando estos problemas, decidí crear un sistema universal de control de riesgos para MetaTrader 5. La idea principal consistía en automatizar por completo el proceso de gestión de riesgos, eliminando el factor humano. El sistema está diseñado como un archivo de inclusión, lo que permite integrarlo fácilmente en cualquier estrategia de trading existente sin necesidad de realizar modificaciones importantes en el código.

La arquitectura del sistema se diseñó teniendo en cuenta la modularidad y la extensibilidad. Cada componente se encarga de su propia área de control, pero, al mismo tiempo, todos los módulos están estrechamente integrados entre sí. El archivo EnhancedRiskManager.mqh contiene la clase principal con un conjunto completo de funciones para la gestión de riesgos.

#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>

El sistema admite distintos modos de funcionamiento, desde el más conservador hasta el más agresivo. Esto permite al tráder elegir el nivel de riesgo adecuado en función de su experiencia, el tamaño de su depósito y su preparación psicológica ante las reducciones. Cada modo cuenta con sus propios parámetros preestablecidos, que se han optimizado a partir del análisis de miles de cuentas de trading reales.

enum ENUM_TRADING_MODE {
    MODE_CONSERVATIVE,   // Modo conservador
    MODE_MODERATE,       // Modo moderado  
    MODE_AGGRESSIVE,     // Modo agresivo
    MODE_CUSTOM          // Ajustes personalizados
};

El modo conservador está pensado para los tráders principiantes y para quienes valoran más la estabilidad que una alta rentabilidad. En este modo, la reducción máxima diaria está limitada al 2 %, la reducción total no puede superar el 6 % y el riesgo por operación es de solo el 1 %. Estos parámetros prácticamente eliminan la posibilidad de perder rápidamente el depósito, lo que da al tráder tiempo para aprender y adaptarse al mercado.

El modo moderado es el término medio ideal para los tráders experimentados. La reducción diaria puede alcanzar el 5 %, la reducción total, el 10 %, y el riesgo por operación se ha incrementado hasta el 2 %. Estos parámetros ofrecen un buen equilibrio entre la rentabilidad potencial y la seguridad del capital. La mayoría de los tráders profesionales utilizan precisamente estos ajustes.

El modo agresivo está pensado para quienes están dispuestos a asumir riesgos en busca de una alta rentabilidad. La reducción diaria puede alcanzar el 10 %, la reducción total, el 20 %, y el riesgo por operación, el 3 %. Estos parámetros exigen nervios de acero y una gran experiencia, pero permiten obtener una rentabilidad impresionante con el enfoque adecuado.

He prestado especial atención al sistema de cálculo de riesgos. El caso es que existen varios enfoques para evaluar la reducción, y cada uno tiene sus ventajas y sus inconvenientes. Algunos tráders prefieren calcular la reducción solo a partir del saldo, sin tener en cuenta los beneficios o pérdidas flotantes. Otros se basan exclusivamente en el equity, lo que ofrece una visión más realista. También existen enfoques combinados, en los que se toma como base para el cálculo la peor de las dos opciones.

enum ENUM_RISK_CALC_TYPE {
    RISK_CALC_BALANCE_ONLY,   // Cálculo basado únicamente en el saldo
    RISK_CALC_EQUITY_ONLY,    // Cálculo basado únicamente en el equity
    RISK_CALC_COMBINED,       // Cálculo combinado
    RISK_CALC_ADAPTIVE        // Cálculo adaptativo
};

El cálculo adaptativo es mi propio desarrollo. El sistema selecciona automáticamente el método de cálculo en función de la situación actual. Si hay posiciones abiertas con pérdidas, el cálculo se realiza tomando como base el equity para tener en cuenta las pérdidas reales. Si las posiciones están en beneficios o todas las operaciones están cerradas, se utiliza el saldo. Este enfoque garantiza la máxima protección en situaciones peligrosas y una libertad razonable cuando las circunstancias son favorables.

El núcleo del sistema es la clase CEnhancedRiskManager, que controla absolutamente todos los aspectos de la gestión de riesgos. En él se almacena información sobre el saldo inicial, las reducciones actuales, el número de operaciones abiertas, las marcas de tiempo y mucho más. La clase está diseñada para ser totalmente autónoma: una vez inicializada, no requiere ningún tipo de control externo.


Arquitectura de la clase principal CEnhancedRiskManager

La clase aplica los principios de la programación orientada a objetos con una clara división de responsabilidades entre los componentes:

class CEnhancedRiskManager {
private:
    // Parámetros principales
    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;
    
    // Límites de riesgo (en porcentaje)
    double               m_maxDailyLoss;      
    double               m_maxTotalLoss;      
    double               m_maxWeeklyLoss;     
    double               m_maxTradeRisk;      
    double               m_trailingStopPercent;

El constructor de la clase configura automáticamente todos los parámetros en función del modo de trading seleccionado. Esto evita que el tráder tenga que introducir manualmente decenas de ajustes y elimina la posibilidad de cometer errores durante la configuración. Todos los valores se han seleccionado cuidadosamente a partir del análisis de estrategias de trading exitosas y de las recomendaciones de traders destacados.

La inicialización del sistema se lleva a cabo mediante una única llamada al método Initialize(). Este método realiza una comprobación exhaustiva del entorno, configura todas las variables internas, crea un panel visual de monitorización y carga el estado guardado si el sistema ya se ha utilizado anteriormente. Se ha prestado especial atención al tratamiento de errores: si algo sale mal, el tráder recibirá un mensaje claro sobre el problema.

bool CEnhancedRiskManager::Initialize(double startBalance = 0) {
    // Definimos el saldo inicial
    if (startBalance <= 0) {
        m_startingBalance = AccountInfoDouble(ACCOUNT_BALANCE);
    } else {
        m_startingBalance = startBalance;
    }

    // Comprobación de la validez
    if (m_startingBalance <= 0) {
        Print("❌ RISK MANAGER: Saldo inicial no válido");
        return false;
    }

El ciclo principal de comprobación de riesgos se ejecuta en cada tick. Comprueba sucesivamente todos los parámetros, actualiza las métricas, analiza los incumplimientos y, si es necesario, bloquea el trading o cierra las posiciones peligrosas. Todo este proceso se lleva a cabo en fracciones de segundo, sin suponer una carga apreciable para el sistema.

El sistema de advertencias resulta especialmente interesante. En lugar de limitarse a bloquear el trading al alcanzarse el límite, el sistema avisa por adelantado al tráder de que se está acercando a una zona de riesgo. Cuando se alcanza el 80 % del límite diario de reducción, aparece una advertencia amarilla. Al 90 %, aparece una advertencia naranja. Y, si se supera el límite, se bloquea el trading por completo y se cierran automáticamente todas las posiciones abiertas.

El método de apertura segura de posiciones integra todas las comprobaciones en una única función sencilla. El tráder no tiene que preocuparse por los riesgos: basta con llamar al método OpenPosition(), y el sistema comprobará por sí mismo todos los límites, calculará el tamaño admisible de la posición y ejecutará la operación solo si es seguro hacerlo.

Una de las características clave del sistema es la conservación del estado al reiniciar el terminal. Todos los datos importantes se almacenan en las variables globales de MetaTrader con prefijos únicos para cada cuenta. Esto significa que, incluso tras reiniciar el ordenador o actualizar el asesor experto, el sistema sabe con exactitud cuántas operaciones se han abierto hoy, cuál es la reducción actual y si se ha incumplido algún límite.

// En el asesor experto: comprobación previa a la apertura
if(!RiskManager.CanOpenPosition(lotSize, Symbol())) {
    return false; // Bloqueo de una operación peligrosa
}


Aplicación práctica: cómo domar el martingale

Para demostrar las capacidades reales del sistema, decidí realizar una prueba extrema. Para las pruebas se eligió el tipo de estrategia más peligroso: una cuadrícula agresiva con martingale. Si no está familiarizado con este tipo de trading, se lo explico: se trata de una estrategia en la que, tras cada operación con pérdidas, se aumenta el tamaño de la siguiente posición. En teoría, esto permite recuperar todas las pérdidas con una sola operación rentable. Sin embargo, en la práctica, esto es un camino directo a perder el depósito.

El asesor experto AggressiveGridEA, creado para realizar pruebas, reunía todas las características de una estrategia destructiva. El martingale con un multiplicador de 1,5 significaba que cada posición siguiente en la cuadrícula se abría con un lote 1,5 veces mayor. El paso de la cuadrícula era de tan solo 200 puntos, lo que daba lugar a la apertura frecuente de nuevas posiciones. El asesor experto podía mantener hasta 8 posiciones a la vez y, cuando la reducción superaba el 1,5 %, se activaba el modo de recuperación agresiva, con duplicación de los lotes. Y lo más importante: la ausencia total de stop-loss.

Esta configuración, sin un sistema de control de riesgos, lleva a perder el depósito en el 100 % de los casos. No es una exageración: probé el asesor experto con datos de 9 años y, sin el Risk Manager, la cuenta nunca sobrevivía más de una semana.

La integración con el sistema de control resultó ser sorprendentemente sencilla. Solo hubo que añadir unas pocas líneas de código en puntos clave del asesor experto. Ahora, antes de abrir cada posición, el asesor experto pedía autorización al Risk Manager. Si el sistema consideraba que la operación era demasiado arriesgada, no se abría la posición.


Resultados de las pruebas

Los resultados de las pruebas superaron todas las expectativas. Sin un sistema de control, la vida media de la cuenta era de tan solo 3,2 días. La reducción máxima llegó al 100 %, lo que supone la pérdida total del depósito. Todas las pruebas terminaban con un margin call.

Con Enhanced Risk Manager, la situación cambió radicalmente. La cuenta superó con éxito los 9 años de pruebas, manteniéndose en positivo. La reducción máxima diaria fue del 4,8 %, ligeramente por debajo del límite establecido del 5 %. La reducción máxima total alcanzó el 9,7 %, sin superar el nivel crítico del 10 %. Y lo más sorprendente: el beneficio final fue del 127 % en todo el periodo.

¿Cómo consiguió el sistema domar a semejante monstruo? En primer lugar, la prevención de la apertura de posiciones peligrosas. Cuando el tamaño de la siguiente posición en la cuadrícula se acercaba al límite del 2 % por operación, el sistema bloqueaba su apertura. Esto evitaba una escalada incontrolada de las pérdidas.

En segundo lugar, el cierre automático en caso de reducción crítica. Al alcanzar una reducción diaria del 4,5 %, el sistema cerraba forzosamente todas las posiciones, dejando un pequeño margen antes del nivel crítico. Esto permitía evitar un bloqueo total del trading y ofrecía la posibilidad de recuperarse al día siguiente.

En tercer lugar, el control de la recuperación agresiva. La función de duplicar las posiciones en caso de pérdidas solo funcionaba dentro de los límites generales de riesgo. En cuanto el riesgo acumulado se acercaba a un nivel peligroso, la función se desactivaba automáticamente.

Y, por último, la protección de las ganancias acumuladas. Al alcanzar un beneficio diario del 3 %, se activaba un mecanismo especial de trailing stop que protegía parte de las ganancias obtenidas frente a un posible retroceso. Esto permitía asegurar beneficios incluso en días de alta volatilidad.

Para no hablar sin fundamento: aquí está la prueba de ese mismo asesor experto, sin el control de nuestro vigilante gestor de riesgos:


Mecanismos de protección en acción

El sistema demostró la eficacia de todos los niveles de protección:

  • Prevención de la apertura de posiciones peligrosas: al acercarse al límite de riesgo por operación (2 %), el sistema bloqueaba automáticamente la apertura de nuevos niveles de la cuadrícula, evitando la escalada de las pérdidas.
  • Cierre automático en caso de reducciones críticas: al alcanzar una reducción diaria del 4,5 %, el sistema cerraba de forma forzosa todas las posiciones, dejando un margen de seguridad hasta el límite crítico del 5 %.
  • Control de la recuperación agresiva: la función de duplicar posiciones en caso de pérdidas quedaba limitada por los límites generales de riesgo, lo que evitó pérdidas catastróficas.
  • Trailing stop del beneficio diario: al alcanzar un beneficio del 3 %, se activaba un mecanismo de protección que aseguraba parte de los beneficios en caso de retroceso.


Conclusiones sobre las pruebas prácticas

Las pruebas realizadas en un asesor experto de cuadrícula agresivo demostraron de forma convincente la eficacia de Enhanced Risk Manager en las condiciones más extremas. El sistema no solo evitó pérdidas catastróficas, sino que también permitió mantener la rentabilidad de la estrategia dentro de un estricto control de riesgos.

Un aspecto especialmente valioso es que el sistema funciona de forma totalmente automática, sin necesidad de que el tráder intervenga en situaciones críticas. Esto resulta especialmente importante en las estrategias de cuadrícula, en las que las emociones humanas suelen llevar a tomar decisiones erróneas en situaciones de estrés.

¡Los resultados de las pruebas confirman que Enhanced Risk Manager es capaz de «domar» incluso las estrategias de trading más agresivas!


Conclusión

El sistema desarrollado Enhanced Risk Manager constituye una solución integral para la gestión de riesgos en el trading. Automatiza por completo el proceso de control, eliminando el factor humano y las decisiones emocionales. Las pruebas prácticas con la estrategia más arriesgada —la cuadrícula con martingale— han demostrado de forma convincente la eficacia del sistema incluso en condiciones extremas.

El trading profesional comienza con una gestión de riesgos profesional. Por muy buena que sea la estrategia para buscar puntos de entrada, sin una gestión de riesgos adecuada, tarde o temprano acabará provocando la pérdida del depósito. Enhanced Risk Manager se encarga de todo el trabajo rutinario relacionado con el control de riesgos, lo que permite al tráder centrarse en el análisis del mercado y en la toma de decisiones de trading.

El sistema es de acceso libre y cualquiera que lo desee puede utilizarlo en su operativa. El código está escrito con comentarios detallados, lo que permite comprender fácilmente la lógica de funcionamiento y, si es necesario, adaptarlo a sus necesidades. Empiece con un modo conservador y vaya aumentando gradualmente el nivel de riesgo a medida que adquiera experiencia. Y recuerde: la preservación del depósito es más importante que el beneficio inmediato.

Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/18918

Archivos adjuntos |
Aleksander Gladkov
Aleksander Gladkov | 11 ago 2025 en 21:02

Hola, ¡gracias por tu trabajo!

Sin embargo, me gustaría ver el código de la clase correspondiente al descrito en el artículo, por ejemplo

En el artículo:

enum ENUM_RISK_CALC_TYPE {
    RISK_CALC_BALANCE_ONLY,   // Cálculo basado únicamente en el saldo
    RISK_CALC_EQUITY_ONLY,    // Cálculo basado únicamente en el capital propio
    RISK_CALC_COMBINED,       // Cálculo combinado
    RISK_CALC_ADAPTIVE        // Cálculo adaptativo
};

En el archivo adjunto:

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
};

El «cálculo adaptativo» que se menciona en el artículo no aparece en absoluto en el código de la clase adjunto.

Además, hay un error en el código que impide compilar el código del asesor:

// Trading Object
    CTrade              m_trade;

Debería aparecer en la sección «public»:

Por favor, compruébalo.

Борис Ворона
Борис Ворона | 12 ago 2025 en 06:04
A mí tampoco se compila; se queda atascado en la línea 124: 123 // Configuración del número mágico para el objeto de trading
124 g_RiskManager.m_trade.SetExpertMagicNumber(InpMagicNumber);
Aleksander Gladkov
Aleksander Gladkov | 12 ago 2025 en 06:37
Борис Ворона #:
A mí tampoco me compila; se queda atascado en la línea 124: 123 // Configuración del número mágico para el objeto de trading
124 g_RiskManager.m_trade.SetExpertMagicNumber(InpMagicNumber);
En el archivo de descripción de la clase EnhancedPropRiskManager.mqh, mueve la línea «CTrade m_trade;» de la sección private: a la sección public:
Борис Ворона
Борис Ворона | 12 ago 2025 en 09:50
Gracias, ahora se compila. Pero la versión adaptativa no se quiere compilar.
Aleksander Gladkov
Aleksander Gladkov | 5 sept 2025 en 09:39

He aplicado el gestor de riesgos a mi asesor automático que utiliza la estrategia Martingala

Este es el resultado de las pruebas de 2025 sin el gestor de riesgo:

Y este es el resultado con los mejores ajustes del gestor de riesgos:

Como podéis ver, la caída máxima se ha reducido a la mitad, mientras que los beneficios se han cuadruplicado.

Redes neuronales en el trading: descomposición en lugar de escalado (SSCNN) Redes neuronales en el trading: descomposición en lugar de escalado (SSCNN)
En este artículo iniciamos la presentación del framework SSCNN, una solución arquitectónica moderna para el análisis de series temporales que combina precisión, una estructura definida y una elevada eficiencia computacional. Analizaremos paso a paso sus aspectos teóricos, prestaremos atención a las diferencias clave con respecto a sus predecesores y comenzaremos la implementación práctica de los componentes básicos en el entorno MQL5.
Predicción en el trading y modelos de Grey Predicción en el trading y modelos de Grey
En este artículo se analiza la aplicación de los modelos Grey para la predicción de series temporales financieras. Analizaremos los principios de funcionamiento de los modelos Grey y las particularidades de su aplicación a las series financieras. Discutiremos las ventajas y las limitaciones del uso de estos modelos en el trading.
Robot de trading basado en redes neuronales sobre la moderna arquitectura Mamba con modelo selectivo de espacio de estados (SSM) Robot de trading basado en redes neuronales sobre la moderna arquitectura Mamba con modelo selectivo de espacio de estados (SSM)
El artículo analiza la revolucionaria arquitectura de red neuronal Mamba/SSM para la predicción de series temporales financieras. Se presenta una implementación completa en MQL5 de una alternativa moderna a la arquitectura del Transformer con una complejidad lineal O(N) en lugar de cuadrática O(N²). Se analizan en detalle los modelos selectivos de espacio de estados (Selective State Space Models, SSM), las optimizaciones conscientes del hardware, las técnicas de segmentación en parches (patching) y los métodos avanzados de entrenamiento con AdamW. Se incluyen los resultados prácticos de las pruebas, que mostraron un aumento de la precisión del 62 % al 71 %, junto con una reducción del tiempo de entrenamiento de 45 a 8 minutos. Se presenta un asesor experto listo para usar, con autoaprendizaje y gestión adaptativa del riesgo, para MetaTrader 5.
Procesos gaussianos en el aprendizaje automático (Parte 2): Implementación y prueba de un modelo de clasificación en MQL5 Procesos gaussianos en el aprendizaje automático (Parte 2): Implementación y prueba de un modelo de clasificación en MQL5
En esta parte analizaremos la implementación de las interfaces clave de la biblioteca de procesos gaussianos en MQL5: IKernel, ILikelihood e IInference. Además, mostraremos su funcionamiento con datos sintéticos y escribiremos indicadores de clasificación y regresión que demuestren su funcionamiento en modo online, con reentrenamiento del modelo en cada nueva barra.