Si alguna vez has mirado una gráfica de Forex a las 2 de la madrugada esperando la señal perfecta, ya sabes por qué los algoritmos existen. Los Expert Advisors (EAs) no se cansan, no tienen miedo y no cometen errores emocionales. En esta guía vas a aprender a construir uno desde cero en MQL5 para MetaTrader 5, incluso si nunca has programado para trading antes.
¿Qué es un Expert Advisor y por qué usar MT5 en 2026?
Un Expert Advisor es un programa que opera automáticamente dentro de MetaTrader, siguiendo reglas definidas por código. Detecta condiciones en el mercado, abre posiciones, gestiona el riesgo y cierra operaciones sin intervención humana.
MetaTrader 5 supera a MT4 en varios aspectos clave:
Soporta múltiples tipos de activos: Forex, acciones, futuros y criptomonedas
El Strategy Tester de MT5 usa backtesting multi-hilo real tick, mucho más preciso
MQL5 es orientado a objetos, lo que permite EAs más robustos y mantenibles
Acceso nativo a datos históricos de alta calidad desde el Market de MQL5
Integración con Python desde MT5 build 2494+ para modelos de machine learning
Si todavía estás en MT4, 2026 es el año para migrar. MetaQuotes ha reducido soporte oficial a MT4 y los brokers de primer nivel están priorizando MT5.
Estructura Base de un EA en MQL5
Todo Expert Advisor en MQL5 tiene tres funciones principales. Entender qué hace cada una es el primer paso antes de escribir una sola línea de lógica de trading.
//+------------------------------------------------------------------+
//| Expert Advisor Base — HydraBlack Template |
//+------------------------------------------------------------------+
#property copyright "HydraBlack Market"
#property version "1.00"
// Parámetros de entrada configurables desde MT5
input double LotSize = 0.1; // Tamaño del lote
input int StopLoss = 50; // Stop Loss en puntos
input int TakeProfit = 100; // Take Profit en puntos
input int MAPeriod = 20; // Período de la media móvil
//--- OnInit: se ejecuta una vez al cargar el EA
int OnInit() {
Print("EA inicializado correctamente.");
return(INIT_SUCCEEDED);
}
//--- OnDeinit: se ejecuta al remover el EA
void OnDeinit(const int reason) {
Print("EA removido. Razón: ", reason);
}
//--- OnTick: se ejecuta en cada nuevo tick del mercado
void OnTick() {
// Aquí va toda la lógica de trading
}
OnInit() — Se ejecuta una sola vez al iniciar. Aquí validas parámetros e inicializas indicadores.
OnTick() — El corazón del EA. Se ejecuta en cada movimiento de precio. Toda la lógica de entrada y salida vive aquí.
OnDeinit() — Limpieza al cerrar. Libera memoria e indicadores dinámicos.
Implementando una Estrategia de Cruce de Medias Móviles
El cruce de medias móviles es la estrategia más enseñada del mundo algorítmico, y con razón: es simple, visual y permite entender todos los conceptos base antes de implementar algo más complejo como SMC o HFT.
La lógica es:
Cuando la MA rápida (10 períodos) cruza hacia arriba la MA lenta (50 períodos) → comprar
Cuando la MA rápida cruza hacia abajo → vender
void OnTick() {
// Obtener valores de las dos medias móviles
double maRapida = iMA(_Symbol, PERIOD_CURRENT, 10, 0, MODE_EMA, PRICE_CLOSE);
double maLenta = iMA(_Symbol, PERIOD_CURRENT, 50, 0, MODE_EMA, PRICE_CLOSE);
double maRapidaAnterior = iMA(_Symbol, PERIOD_CURRENT, 10, 0, MODE_EMA, PRICE_CLOSE);
double maLentaAnterior = iMA(_Symbol, PERIOD_CURRENT, 50, 0, MODE_EMA, PRICE_CLOSE);
// Condición de compra: cruce alcista
if (maRapida > maLenta && maRapidaAnterior <= maLentaAnterior) {
AbrirOrden(ORDER_TYPE_BUY);
}
// Condición de venta: cruce bajista
if (maRapida < maLenta && maRapidaAnterior >= maLentaAnterior) {
AbrirOrden(ORDER_TYPE_SELL);
}
}
void AbrirOrden(ENUM_ORDER_TYPE tipo) {
MqlTradeRequest request = {};
MqlTradeResult result = {};
request.action = TRADE_ACTION_DEAL;
request.symbol = _Symbol;
request.volume = LotSize;
request.type = tipo;
request.price = (tipo == ORDER_TYPE_BUY) ? SymbolInfoDouble(_Symbol, SYMBOL_ASK)
: SymbolInfoDouble(_Symbol, SYMBOL_BID);
request.sl = request.price - StopLoss * _Point * (tipo == ORDER_TYPE_BUY ? 1 : -1);
request.tp = request.price + TakeProfit * _Point * (tipo == ORDER_TYPE_BUY ? 1 : -1);
request.deviation = 10;
request.magic = 123456;
request.comment = "HydraBlack EA v1";
OrderSend(request, result);
if (result.retcode != TRADE_RETCODE_DONE) {
Print("Error al enviar orden: ", result.retcode);
}
}⚠️ Nota importante: Este código es educativo. Antes de operar en cuenta real, siempre realiza backtesting exhaustivo y pruebas en cuenta demo.
Backtesting Real en el Strategy Tester de MT5
El backtesting es donde la mayoría de traders principiantes falla: usan datos de baja calidad y obtienen resultados irreales. Así se hace correctamente.
Configuración recomendada en el Strategy Tester:
| Parámetro | Valor recomendado |
|---|---|
| Modelo | Every tick based on real ticks |
| Periodo | Mínimo 1 año de datos |
| Depósito inicial | El que usarás en real |
| Apalancamiento | El de tu broker real |
| Optimización | Slow complete algorithm |
Métricas clave que debes revisar:
Profit Factor → Debe ser mayor a 1.5 para ser viable
Max Drawdown → No debe superar el 20% de tu capital
Win Rate → Un 40% con buen RR (1:2) es más que suficiente
Sharpe Ratio → Por encima de 1.0 indica estrategia robusta
Recovery Factor → Mayor a 3 indica buena recuperación ante pérdidas
Si el EA tiene un Profit Factor de 3.0 en backtesting pero 0.8 en demo, tienes overfitting. La solución: reduce los parámetros optimizados y usa Walk-Forward Testing.
Gestión de Riesgo: Lo Que Separa un EA Profesional de uno Amateur
El 90% de los EAs que fracasan no tienen mala lógica de entrada. Tienen mala gestión de riesgo. Un solo trade sin stop-loss puede destruir una cuenta.
Regla del 1-2%: Nunca arriesgues más del 2% de tu capital en una sola operación.
double CalcularLote(double riesgoPorcentaje, int stopLossPuntos) {
double capital = AccountInfoDouble(ACCOUNT_BALANCE);
double riesgoDinero = capital * (riesgoPorcentaje / 100.0);
double valorPunto = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
double lote = riesgoDinero / (stopLossPuntos * valorPunto);
// Respetar límites del broker
double loteMin = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
double loteMax = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
lote = MathMax(loteMin, MathMin(loteMax, NormalizeDouble(lote, 2)));
return lote;
}Con esta función, si tienes $10,000 y arriesgas el 1% con un SL de 50 puntos, el EA calculará automáticamente el lote correcto sin importar el par que opere.
Errores Comunes al Programar Expert Advisors
Aprender de los errores más frecuentes te ahorrará semanas de debugging:
No validar el número de posiciones abiertas → El EA puede abrir decenas de operaciones en el mismo tick
Usar Ask y Bid de forma incorrecta → Comprar en Bid o vender en Ask genera errores inmediatos
Ignorar el retcode de OrderSend() → Un error silencioso puede significar que tu EA "opera" sin ejecutar nada
Optimizar en exceso (curve fitting) → Un EA con 15 parámetros optimizados casi siempre falla en forward testing
No manejar el spread variable → En pares exóticos o noticias macroeconómicas, el spread puede destruir tu lógica de SL/TP
Backtesting sin datos tick reales → MT5 permite descargar tick data real; úsalos siempre
Herramientas y Recursos Recomendados
Para ir más allá de este tutorial y construir EAs de nivel profesional:
MetaEditor — IDE oficial incluido con MT5, con debugger y profiler
MQL5.community — Documentación oficial y foro técnico más completo del ecosistema MT5
Python + MetaTrader5 library — Para conectar modelos LSTM o de ML directamente a MT5
FXBlue Trade Simulator — Alternativa visual para testear estrategias manualmente
HydraBlack Market — Scripts, EAs y herramientas MQL5 listos para producción, creados por developers especializados
¿Listo para el Siguiente Nivel?
Programar tu propio EA desde cero es la mejor forma de entender qué funciona y qué no en el trading algorítmico. Pero si quieres saltarte semanas de desarrollo y tener una base profesional de inmediato, en HydraBlack Market encontrarás Expert Advisors, scripts MQL5 y herramientas cuantitativas creadas por developers especializados en trading algorítmico.
→ Explora los productos de Quant Trading en HydraBlack
Join the Discussion (0)