Saltar al contenido

Crea un asesor experto en MQL5 desde cero, parte 1: estructura del EA y gestión del riesgo sin martingala

Explora un EA en MQL5 a través de nuestro propio robot de trading: tres funciones esenciales, cálculo del tamaño de la posición según la distancia al stop y por qué una tasa de acierto alta suele ocultar pérdidas.

Admin
Crea un asesor experto en MQL5 desde cero, parte 1: estructura del EA y gestión del riesgo sin martingala · 15 de agosto de 2026

Crea un asesor experto en MQL5 desde cero, parte 1: estructura del EA y gestión del riesgo sin martingala

Ejecutamos una docena y media de EA gratuitos del catálogo en cuentas demo activas y publicamos sus resultados. Tras 449 operaciones, apareció un patrón desagradable: casi todos los robots que agotaron sus cuentas tenían tasas de acierto altas. Uno cerró el 68% de sus operaciones con ganancias y aun así perdió todo el depósito.

Por eso escribimos nuestro propio robot: no para superar al mercado, sino para demostrar mediante código cómo estructurar un robot que no pueda destruir una cuenta en un solo día. Está en el catálogo con su código fuente y opera en nuestra cuenta demo. Esta entrega aborda la estructura básica y la gestión del riesgo; la segunda trata la compilación y la ejecución del Probador de estrategias desde la línea de comandos.

Nota editorial: La afirmación anterior describe los controles de riesgo previstos del EA, no una garantía de que la cuenta no pueda perder todo su capital. Los huecos de cotización, el deslizamiento y la ejecución de los stops pueden hacer que las pérdidas superen el riesgo planificado.

De qué se compone un asesor experto

Todo EA en MQL5 tiene tres funciones que el terminal llama.

int OnInit()                      // una vez al añadirlo a un gráfico
void OnTick()                     // con cada cambio de precio
void OnDeinit(const int reason)   // al retirarlo del gráfico

OnInit se encarga de la configuración: aquí definimos el número mágico que el robot utiliza para distinguir sus posiciones de las demás y el modo de ejecución de las órdenes.

#include <Trade\Trade.mqh>

CTrade trade;

int OnInit()
{
   trade.SetExpertMagicNumber(MagicNumber);
   trade.SetTypeFillingBySymbol(_Symbol);
   trade.SetDeviationInPoints(20);
   return(INIT_SUCCEEDED);
}

La clase CTrade de la biblioteca estándar construye las solicitudes de operación por ti. No hay motivo para construir MqlTradeRequest manualmente en 2026.

OnTick se ejecuta con cada tick, decenas de veces por minuto. Si la estrategia trabaja con velas cerradas, el primer paso es filtrar las llamadas innecesarias. De lo contrario, el robot tomará la misma decisión cientos de veces:

static datetime lastBar = 0;
datetime barTime = iTime(_Symbol, PERIOD_M15, 0);
if(barTime == lastBar) return;   // esta vela ya se ha procesado
lastBar = barTime;

Parámetros: por qué no utilizamos puntos

La primera versión de nuestro EA no realizó ninguna operación en cuatro años de datos históricos. El culpable era un filtro expresado en puntos: la precisión de las cotizaciones del oro varía por un factor de diez entre brókeres, de modo que «un rango no superior a 3000 puntos» significaba tres dólares en un bróker y treinta en otro. El filtro lo descartaba todo.

Por eso expresamos los umbrales como porcentajes del precio. Estos ajustes se pueden trasladar entre brókeres e instrumentos sin modificarlos:

input double MinRangePct = 0.15;  // día tranquilo, sin oportunidad
input double MaxRangePct = 2.0;   // hueco por noticias, ruptura falsa

double rangePct = (rangeHigh - rangeLow) / price * 100.0;
if(rangePct < MinRangePct || rangePct > MaxRangePct) return;

Lo mismo ocurre con el spread. Un límite absoluto no sirve: los spreads del oro pueden ser de 90–190 puntos, por lo que un umbral de 60 descarta todas las oportunidades. Lo que importa no es el spread en sí, sino qué proporción del movimiento del precio consume:

double spreadShare = spreadPrice / (rangeHigh - rangeLow) * 100.0;
if(spreadShare > MaxSpreadRangePct) return;   // los costes consumirían el movimiento

La regla clave: calcula el tamaño de la posición a partir del stop, y no al revés

Esta es la diferencia entre un robot que sobrevive a una mala semana y otro que acaba con todo el capital de una cuenta.

El enfoque equivocado, presente en la mayoría de los EA gratuitos, consiste en fijar el tamaño de la posición o aumentarlo tras una pérdida y después colocar el stop «en algún sitio» u omitirlo por completo. El enfoque correcto invierte ese proceso: primero decide en qué punto queda invalidada la idea de la operación y después calcula un tamaño de posición que haga que ese error cueste una proporción predeterminada del depósito.

double RiskLots(double stopDistance)
{
   double tickValue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
   double tickSize  = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
   if(tickValue <= 0 || tickSize <= 0) return(0);

   // Cuánto dinero estamos dispuestos a perder en esta operación
   double moneyRisk  = AccountInfoDouble(ACCOUNT_BALANCE) * RiskPercent / 100.0;
   // Coste del stop loss para una posición de un lote
   double lossPerLot = (stopDistance / tickSize) * tickValue;

   double lots = moneyRisk / lossPerLot;

   double minLot  = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
   double lotStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
   lots = MathFloor(lots / lotStep) * lotStep;

   // El depósito no permite asumir este stop: omitir la operación
   // en lugar de arriesgar más de lo indicado
   if(lots < minLot) return(0);
   return(lots);
}

Fíjate en la última línea. Es tentador redondear al alza hasta el lote mínimo y entrar de todos modos. Así es precisamente como un robot empieza, sin que se note, a arriesgar el triple de lo que indican sus ajustes. Saltarse la operación cuesta menos.

Un detalle importante: consulta SYMBOL_TRADE_TICK_VALUE y SYMBOL_TRADE_TICK_SIZE en el terminal en lugar de fijar sus valores en el código. Estos valores son distintos para el oro, los pares de divisas y los índices. Un robot escrito «para EURUSD» puede equivocarse al calcular el tamaño de la posición en oro por un factor de cien.

Punto de equilibrio: protección, no una solución para todo

Cuando una operación acumula una ganancia equivalente a un múltiplo predefinido de su riesgo inicial, el stop se mueve al precio de entrada. A partir de ahí, la operación obtiene ganancias o se cierra a cero, en lugar de convertirse en una pérdida.

Nota editorial: Un stop en el precio de entrada no garantiza un resultado neto de cero: los spreads, las comisiones, el swap y el deslizamiento en la ejecución aún pueden generar una pérdida.

double risk   = MathAbs(entry - sl);
double profit = (type == POSITION_TYPE_BUY) ? (price - entry) : (entry - price);

if(BreakevenAtR > 0 && profit >= risk * BreakevenAtR)
   trade.PositionModify(ticket, entry, tp);   // mover el stop al precio de entrada

El umbral que activa el movimiento del stop es un parámetro, y tiene importancia. En nuestras pruebas, moverlo al alcanzar una vez el riesgo produjo resultados claramente peores que hacerlo al alcanzar una vez y media. Mover el stop al punto de equilibrio demasiado pronto cierra operaciones que necesitan margen antes de que se produzca el movimiento. En cuatro años de datos históricos, la diferencia entre estos dos ajustes fue de alrededor del diez por ciento del resultado final.

Los resultados

La estrategia es sencilla: medir el rango de la tranquila sesión asiática, entrar cuando la primera vela cierre fuera de sus límites, colocar el stop más allá del límite opuesto y fijar un objetivo equivalente a tres veces la distancia al stop, con una operación al día.

Seleccionamos los parámetros con datos de 2022–2024 y los validamos con datos de 2025–2026, que no se habían utilizado durante la selección:

Muestra Rentabilidad Operaciones Operaciones ganadoras Factor de beneficio Caída máxima
Entrenamiento 2022–2024 +33.0% 327 43.7% 1.35 7.5%
Validación 2025–2026 +11.6% 145 46.2% 1.33 3.9%
Otro bróker, 2022–2025 +41.5% 335 30.4% 1.41 9.2%

La tercera fila utiliza el mismo EA y los mismos ajustes, pero cotizaciones de otro bróker. La diferencia se debe al spread y a la precisión de las cotizaciones, no a la estrategia: un bróker denomina al oro GOLD# y otro, XAUUSD. Si una estrategia deja de funcionar al cambiar de bróker, dependía de una fuente de precios concreta y no del mercado.

Menos de la mitad de las operaciones son rentables, algo normal cuando el objetivo equivale al triple del riesgo. El robot de nuestra prueba con una tasa de acierto del 68% parecía mucho mejor en esa columna y aun así perdió todo su depósito. La tasa de acierto te dice muy poco sobre un EA; céntrate en la caída máxima y el factor de beneficio.

También debemos dejar claras las limitaciones: en EURUSD, los mismos ajustes dan un factor de beneficio de alrededor de uno, por lo que la ventaja es específica del oro. Y una prueba con datos históricos sigue siendo una prueba con datos históricos. El robot ya está funcionando en nuestra cuenta demo y sus resultados aparecerán en el seguimiento en vivo, sin posibilidad de retocarlos a posteriori.

Próxima entrega

La segunda parte trata algo que rara vez aparece en las guías en ruso: compilar un EA desde la línea de comandos con metaeditor64.exe y ejecutarlo en el Probador de estrategias mediante una configuración INI, sin hacer un solo clic en la interfaz. Esto convierte la prueba de una idea, que antes requería una rutina manual de diez minutos, en un comando de diez segundos. Es el único motivo por el que pudimos probar cien configuraciones en una sola tarde.

El código fuente completo del EA está en su página del catálogo. Descárgalo, léelo y adáptalo a tus necesidades.

El enlace al bróker de este artículo es un enlace de afiliación: recibimos una comisión y tú obtienes las mismas condiciones que a través de un enlace directo. Solo mencionamos servicios que utilizamos nosotros mismos.

Comparte este artículo:

Comentarios (0)

Los comentarios y las reseñas se muestran en su idioma original.

Inicia sesión para comentar

Todavía no hay comentarios

¡Sé la primera persona en comentar!

Más guías y pruebas de EA

Reseñas de EA, resultados en demo y notas de MQL5.

Todos los artículos del blog