Errores frecuentes en MQL5 y EA — del compilado a OrderSend
Cuando tu Asesor Experto no compila o OrderSend falla con códigos como 10016 (stops inválidos) o 10019 (dinero insuficiente), necesitas una guía clara de causas y soluciones. Los códigos de retorno del servidor MQL5 describen cada retcode en MqlTradeResult tras OrderSend(). Esta guía cubre errores de compilación, códigos de trading más frecuentes, stops inválidos (10016), dinero insuficiente (10019), trading desactivado (10017, 10027) y por qué conviene usar OrderCheck() antes de enviar — con referencias oficiales.
Errores de compilación
Antes de que el EA pueda ejecutarse, debe compilar en MetaEditor (F7). Problemas habituales: variable o función no definida (revisa ortografía y cabeceras); tipos incorrectos; punto y coma o llave faltante. Corrige todos los errores (0 errores en la pestaña Compilar). Construye tu primer EA y la referencia MQL5 ayudan con la estructura.
Códigos de retorno del servidor (OrderSend)
OrderSend() envía la solicitud al servidor; el resultado está en MqlTradeResult. El campo retcode es la respuesta del servidor. Códigos importantes: 10009 (DONE), 10008 (PLACED), 10016 (INVALID_STOPS), 10017 (TRADE_DISABLED), 10019 (NO_MONEY), 10027 (CLIENT_DISABLES_AT), 10031 (CONNECTION). Revisa siempre result.retcode después de OrderSend.
Stops inválidos (10016)
TRADE_RETCODE_INVALID_STOPS (10016): el bróker rechazó SL/TP (suelen estar demasiado cerca del precio). Consulta SYMBOL_TRADE_STOPS_LEVEL con SymbolInfoInteger. Solución: respeta la distancia mínima en puntos o pon SL/TP = 0 y gestiona salidas en código.
Dinero insuficiente (10019)
TRADE_RETCODE_NO_MONEY (10019): margen o balance insuficiente. Solución: reduce el lote o ingresa fondos. Usa gestión de riesgo.
Trading desactivado (10017, 10027)
10017: trading desactivado por el servidor. 10027: AutoTrading desactivado en el terminal (Ctrl+E, Opciones → Asesores Expertos). Activa AutoTrading; para 10017 contacta al bróker.
Usar OrderCheck() antes de OrderSend()
La documentación de OrderSend() recomienda comprobar la solicitud con OrderCheck() antes de enviar, para evitar fallos por 10016 o 10019.
Tabla de referencia rápida
| Código / Síntoma | Causa | Solución |
|---|---|---|
| No compila | Errores de sintaxis/tipo | Corrige en MetaEditor. |
| 10016 Stops inválidos | SL/TP muy cerca del precio | Respeta SYMBOL_TRADE_STOPS_LEVEL o SL/TP = 0. |
| 10019 Sin dinero | Margen/balance insuficiente | Reduce lote; comprueba margen. |
| 10017 / 10027 | Trading/AutoTrading desactivado | Activa AutoTrading (Ctrl+E). |
| 10031 | Sin conexión | Comprueba red; reintenta. |
Próximos pasos
Construye tu primer EA, Gestión de riesgo EA, Desplegar y mantener tu EA.
Referencias: Códigos de retorno MQL5, OrderSend, OrderCheck, Errores de compilación.