En esta página
Volver a tutoriales

Error 10016 MT5: Stops Inválidos — Arreglo MQL5 (2026)

Arregla TRADE_RETCODE_INVALID_STOPS (10016): SYMBOL_TRADE_STOPS_LEVEL, SL/TP en Compra/Venta, NormalizeDouble y OrderCheck antes de OrderSend — con referencias oficiales.

📖 16 min read

📝 3,100 words

🏷️ MQL5 & Expert Advisors

Compartir este artículo:

¿Quieres crear una estrategia sin código ahora?

Crea tu cuenta gratis en segundos y empieza de inmediato.


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)

MT4MT5
Número habitual13010016 en result.retcode
LecturaGetLastError()result.retcode
Riesgo IACódigo MQL4 mezcladoPide "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ónStop lossTake profit
CompraDebajo de entradaEncima
VentaEncimaDebajo

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.

Crea tu estrategia de trading sin código ahora — gratis

Crea tu cuenta y empieza ahora mismo a construir una estrategia sin código. Añade indicadores, filtros y reglas de riesgo, y exporta MQL5 en minutos.

Preguntas Frecuentes

El retcode 10016 es TRADE_RETCODE_INVALID_STOPS: el servidor rechazó tu Stop Loss o Take Profit en OrderSend. Descripción oficial: "Invalid stops in the request." Suele indicar SL/TP demasiado cerca del precio o en el lado incorrecto.

Lee SYMBOL_TRADE_STOPS_LEVEL con SymbolInfoInteger, añade margen en puntos, normaliza con NormalizeDouble y verifica Compra SL debajo del precio y Venta SL encima. Usa OrderCheck antes de OrderSend.

Mismo concepto (stops inválidos), distinta numeración. MT5 usa MqlTradeResult.retcode (10016). MT4 usaba a menudo 130. El código generado por IA puede mezclar ambos — revisa retcode en MQL5.

El Probador puede usar spread fijo y reglas menos estrictas. En vivo el bróker aplica STOPS_LEVEL y freeze level. Prueba en Demo con el mismo símbolo y sufijo.

A menudo sí — faltan comprobaciones de stops level. Añade seguridad al prompt o usa un constructor estructurado. Ver guía ChatGPT MQL5 y esta página.

Crea tu estrategia sin código ahora — gratis

Crear cuenta gratis