Error 10016 en MT5 (Stops Inválidos): Causas y Soluciones en OrderSend MQL5
Respuesta corta: El error 10016 en MetaTrader 5 es TRADE_RETCODE_INVALID_STOPS — el bróker rechazó tu Stop Loss o Take Profit por distancia, dirección o precisión. Solución: lee SYMBOL_TRADE_STOPS_LEVEL, coloca SL/TP del lado correcto en Compra/Venta, usa NormalizeDouble y llama a OrderCheck() antes de OrderSend().
Si buscas error 10016 MT5, stops inválidos MQL5 u OrderSend 10016, esta guía sigue los códigos de retorno oficiales.
Guías relacionadas: Errores comunes MQL5 · ¿ChatGPT puede crear un EA? · Gestión de riesgo · Construye tu primer EA
¿Qué Es el Error 10016 en MT5?
Tras OrderSend(), revisa MqlTradeResult.retcode. Si es 10016, la constante es TRADE_RETCODE_INVALID_STOPS.
Texto oficial MetaQuotes: "Invalid stops in the request."
El servidor no acepta los precios de SL/TP enviados para ese símbolo en ese momento.
Error 10016 vs Antiguo 130 (MT4)
| MT4 | MT5 | |
|---|---|---|
| Número habitual | 130 | 10016 en result.retcode |
| Lectura | GetLastError() | result.retcode |
| Riesgo IA | Código MQL4 mezclado | Pide "solo MQL5" |
Ver guía ChatGPT MQL5.
SYMBOL_TRADE_STOPS_LEVEL Explicado
Distancia mínima en puntos entre precio actual y SL/TP.
int stopLevel = (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL);
double minDist = stopLevel * SymbolInfoDouble(_Symbol, SYMBOL_POINT);
También revisa SYMBOL_TRADE_FREEZE_LEVEL al modificar stops en cada tick.
Colocación Correcta de SL y TP
| Operación | Stop loss | Take profit |
|---|---|---|
| Compra | Debajo de entrada | Encima |
| Venta | Encima | Debajo |
Normaliza con los dígitos del símbolo.
Arreglar Stops Inválidos en Código MQL5
Ajusta SL/TP con margen sobre stopLevel (ver función AdjustStopsForBroker en la versión EN del artículo — misma lógica).
Alternativa: sl = 0, tp = 0 en el envío y gestiona salidas después, o usa TRADE_ACTION_SLTP cuando el precio se haya movido.
Usar OrderCheck() Antes de OrderSend()
La documentación de OrderSend recomienda OrderCheck() para detectar 10016 antes de enviar. Registra result.retcode y result.comment.
Backtest vs Cuenta Real
El Probador puede no aplicar stops level como el servidor en vivo. Prueba en Demo con el mismo sufijo de símbolo. Los EAs generados por IA (prueba MQL5 2026) suelen fallar en vivo por omitir stops level.
Próximos Pasos
Referencias: enum_trade_return_codes, SymbolInfoInteger, OrderSend, OrderCheck.