Berke Özyaşar
Blog

Desarrollo de Expert Advisors para MetaTrader 5: de la estrategia a la cuenta real

Cómo se desarrolla un EA para MT5: diferencia entre EA e indicador, la estrategia convertida en especificación, estructura en MQL5, gestión del riesgo, backtesting, optimización y VPS.

·

MetaTrader 5 (MT5) es una plataforma de trading muy utilizada en los mercados de forex, materias primas e índices. Su punto más fuerte es que los programas escritos en lenguaje MQL5 pueden ejecutarse sobre el gráfico y abrir y cerrar operaciones por sí mismos. A estos programas se les llama Expert Advisors (EA). Soy Berke Özyaşar y desarrollo EA e indicadores para MetaTrader 4 y 5, e indicadores en Pine Script para TradingView. En este artículo explico cómo avanza un proyecto de EA de principio a fin, y sobre todo las partes del proceso que no son código.

¿EA o indicador?

Suele ser la primera pregunta. Los dos se escriben en MQL5, pero hacen cosas distintas:

  • Un indicador dibuja información en el gráfico: una línea, una flecha, un cambio de color o una alerta. La decisión y la orden las tomas tú.
  • Un Expert Advisor envía la orden por sí mismo cuando se cumplen las reglas, gestiona la posición y la cierra.

Si todavía no confías del todo en tu estrategia o si parte de la decisión requiere interpretación, empezar con un indicador suele ser lo más acertado. A medida que las reglas se aclaran, la misma lógica puede trasladarse a un EA. En algunos proyectos se escriben los dos juntos: el indicador genera la señal y el EA la lee y opera.

El paso más importante: convertir la estrategia en una especificación

La mayoría de los encargos empiezan con una sola frase como «comprar cuando se crucen las medias móviles». Esa frase puede bastarle a una persona, pero no a un programa. Antes de escribir código, todas estas preguntas tienen que tener respuesta:

  • ¿Qué símbolo y qué marco temporal? ¿Funcionará en varios símbolos a la vez?
  • ¿La señal se comprobará al cierre de la vela o con cada cambio de precio?
  • ¿Cuáles son exactamente las condiciones de entrada? ¿Qué indicadores, con qué parámetros?
  • ¿Cómo se cerrará la posición: stop-loss y take-profit fijos, trailing stop, señal contraria?
  • ¿Cuántas posiciones puede haber abiertas a la vez? ¿Qué pasa si llega una señal en sentido contrario?
  • ¿En qué horas no se operará: publicaciones de datos importantes, cierre del fin de semana, horas en que se amplía el spread?
  • ¿Cómo se calculará el tamaño del lote?

Rellenar esta lista juntos a veces lleva más tiempo que el propio código, pero evita en gran medida las conversaciones posteriores del tipo «no era eso lo que quería decir». La especificación es además la referencia para comprobar, en la fase de pruebas, si el EA se comporta correctamente.

La estructura de un EA en MQL5

Un EA en MQL5 se construye alrededor de unas pocas funciones de eventos:

  • OnInit(): se ejecuta una vez cuando el EA se añade al gráfico. Aquí se crean los manejadores (handles) de los indicadores y se validan los parámetros de entrada. Si los parámetros no tienen sentido, el EA debe detenerse aquí sin llegar a arrancar.
  • OnTick(): se ejecuta cada vez que llega un nuevo precio del símbolo, y es el corazón de la estrategia. En las estrategias que funcionan al cierre de la vela, lo primero es comprobar si se ha formado una vela nueva; de lo contrario, la misma señal se procesa muchas veces dentro de una vela.
  • OnDeinit(): se ejecuta cuando se retira el EA o se cierra el terminal. Se liberan los manejadores de los indicadores y se eliminan los objetos dibujados en el gráfico.

Además, se puede usar OnTimer() para tareas programadas y OnTradeTransaction() para seguir los eventos de órdenes y posiciones. Las órdenes suelen enviarse con la clase CTrade de la librería estándar. En un EA robusto hay que comprobar el código de retorno de cada orden: situaciones como margen insuficiente, mercado cerrado, nivel de stop no válido o recotización ocurren en una cuenta real con más frecuencia de lo que imaginas. El código también debe ajustarse al paso mínimo de lote, a la distancia mínima de stop y al número de decimales del símbolo; un EA que funciona sin problemas con un bróker puede dar errores con otro por estos detalles.

La gestión del riesgo debe estar integrada en el código

La pieza más importante de un EA no es la señal de entrada, sino la gestión del riesgo. Los aspectos que trato de serie en cada EA:

  • Tamaño de la posición: en lugar de un lote fijo, una estructura que arriesga un porcentaje determinado de la cuenta por operación y calcula el lote según la distancia del stop.
  • Stop-loss en cada operación: no abrir posiciones sin stop.
  • Límites de pérdida diaria y total: que el EA deje de operar ese día, o por completo, al alcanzar una pérdida determinada.
  • Filtro de spread: no abrir operaciones cuando el spread supera un valor determinado.
  • Resistencia a reinicios: que, cuando el terminal se reinicie, el EA reconozca sus posiciones abiertas por el magic number y siga gestionándolas.

Backtesting con el Strategy Tester

El Strategy Tester de MT5 ejecuta el EA sobre datos históricos y genera un informe con los resultados. Aquí hay varios puntos a tener en cuenta. El modelo de prueba importa: una prueba solo con precios de apertura es rápida, pero engaña en estrategias que dependen de los movimientos dentro de la vela; una prueba con datos de ticks reales es más lenta, pero más realista. Costes como el spread, la comisión y el swap deben incluirse en la prueba. Más que una única cifra de beneficio neto del informe, hay que analizar el drawdown máximo, el número de operaciones y cómo se reparten los resultados en el tiempo.

Optimización y sobreajuste

El Strategy Tester puede recorrer combinaciones de parámetros y encontrar la que da el mejor resultado. Es una herramienta potente, pero aquí está también el error más habitual: si ajustas con suficiente precisión suficientes parámetros, obtienes un sistema que parece excelente en el pasado pero que no acierta nada en el futuro. A esto se le llama sobreajuste (overfitting).

Para protegerme de ello, aparto una parte de los datos sin mostrársela nunca a la optimización y pruebo los parámetros encontrados en ese periodo no visto. La opción de prueba forward de MT5 puede hacerlo automáticamente. Además, en lugar de un único valor máximo, prefiero una zona amplia en la que los parámetros vecinos también den resultados razonables. Cuantos menos parámetros haya, más se puede confiar en que los resultados se apoyan en algo real.

Cuenta demo y prueba forward

Por bueno que sea el backtest, antes de pasar a real el EA debe funcionar un tiempo en una cuenta demo o en una cuenta real con lotes muy pequeños. En esta fase, más que medir beneficios, el objetivo es ver si el EA se comporta conforme a la especificación en condiciones reales: ¿las órdenes se abren en el momento correcto?, ¿cuánto deslizamiento hay?, ¿dan problemas las reglas del bróker? Que el EA registre cada una de sus decisiones en el log facilita mucho esta comprobación.

VPS: la casa del EA

Un EA solo funciona mientras el terminal de MetaTrader está abierto. Cuando tu ordenador se apaga, se corta internet o el sistema operativo se reinicia para actualizarse, el EA también se detiene. Por eso los EA que tienen que funcionar sin parar suelen alojarse en un VPS. Se puede usar el servicio de hosting virtual de la propia MetaQuotes o un VPS de Windows independiente. Una ubicación cercana al servidor del bróker reduce la latencia.

Conclusión

Un buen EA empieza con una buena especificación y pone la gestión del riesgo en el centro del código. El backtest es un punto de partida, no una prueba; la optimización engaña si no se hace con cuidado. Ningún EA garantiza beneficios, y este artículo tampoco es una recomendación de inversión. Puedes ver mis trabajos en este campo en la página de EA e indicadores para MetaTrader, y la parte de seguimiento de mercados en la app All Financial Market Watcher. Si estás pensando en un EA o un indicador MQL5 para tu propia estrategia, puedes contactarme desde la página de bots de trading.

Más artículos

Publiquemos tu app juntos.

Cuéntame en pocas frases lo que quieres hacer. Respondo el mismo día.

↑ ↓ para navegar, Enter para abrir, Esc para cerrar