Órdenes y fiabilidad

Por qué una operación en MT5 puede fallar aunque tu solicitud a la API sea correcta

Mercado cerrado, volumen o stops inválidos, sin margen o un símbolo con otro nombre: cinco razones por las que un broker rechaza una orden válida en MT5.

5 min de lecturaRead in English
En esta página
  1. Primero, lee el resultado
  2. Las cinco causas más comunes
  3. La guía rápida
  4. Más códigos de retorno de MT5, y qué hace fxapis con cada uno
  5. No toda falla es un rechazo
  6. Próximos pasos

Tu solicitud es JSON válido, tu clave es correcta, la cuenta está en línea… y aun así la orden es rechazada. La API aceptó tu solicitud; el broker rechazó la operación. Los brokers revisan cada orden con sus propias reglas, y esas reglas pueden decir que no a una solicitud perfectamente formada.

Primero, lee el resultado

Con fxapis, un rechazo del broker llega como 422 ORDER_REJECTED, con el motivo y un indicador retryable:

JSON
{
  "error": {
    "code": "ORDER_REJECTED",
    "message": "The broker rejected the order: No money",
    "details": [{ "orderId": "…", "state": "rejected", "retryable": false }]
  }
}

GET /v1/orders/{id} muestra el código de retorno de MT5 del propio broker (aquí, 10019) tal como lo envió el broker. No se ejecutó nada. La solución depende de la causa.

Las cinco causas más comunes

1. El mercado está cerrado

Código de retorno 10018. El Forex cierra el fin de semana, el oro hace una pausa diaria, los índices siguen el horario de su bolsa, y cada broker fija sus propios horarios para cada símbolo.

Cómo evitarlo: revisa el horario de mercado de la cuenta antes de enviar. GET /v1/accounts/{id}/sessions?instrument=XAUUSD devuelve openNow y nextOpen, leídos de ese broker.

2. El volumen no cumple las reglas del símbolo

Código de retorno 10014. Cada símbolo tiene un volumen mínimo, un máximo y un paso. 0.015 lotes es inválido donde el paso es 0.01; 0.01 es inválido donde el mínimo es 0.1.

Cómo evitarlo: lee las reglas del broker de la cuenta (GET /v1/accounts/{id}/symbols?search=EURUSD devuelve volumeMin, volumeStep y volumeMax) y redondea el tamaño al paso antes de enviar. Envía los volúmenes como texto, "0.10", para que nada se redondee en el camino.

3. Los stops son inválidos

Código de retorno 10016. El stop loss de una compra debe estar por debajo del precio y su take profit por encima (en una venta, al revés), y los brokers suelen exigir una distancia mínima respecto al precio.

Cómo evitarlo: los stops son precios absolutos, no distancias en pips: calcúlalos a partir del precio actual y mantenlos fuera de la distancia mínima del broker. fxapis rechaza un stop que está claramente del lado equivocado antes de enviar nada.

4. No hay margen suficiente

Código de retorno 10019. La cuenta no puede financiar la posición con su apalancamiento. Es común cuando una misma señal se envía con el mismo tamaño a cuentas con saldos muy distintos.

Cómo evitarlo: POST /v1/accounts/{id}/calculate con "kind": "margin" devuelve el margen que necesita una orden sin abrir nada. En órdenes a varias cuentas, ajusta el tamaño de cada cuenta a su saldo con weights.

5. El símbolo tiene otro nombre

El oro es XAUUSD en un broker y XAUUSD.a o GOLD en otro. Si envías el nombre de otro broker, la orden falla antes de poder operar.

Cómo evitarlo: envía instrument en lugar de symbol ("instrument": "XAUUSD") y fxapis opera el símbolo propio de cada cuenta. Si un broker no tiene equivalente, o tiene dos posibles, la orden se rechaza antes de enviar nada, con INSTRUMENT_NOT_OFFERED o INSTRUMENT_AMBIGUOUS.

La guía rápida

CausaCódigo MT5¿Reintentar igual?Cómo evitarlo
Mercado cerrado10018NoGET …/sessions
Volumen inválido10014NoReglas de volumen de GET …/symbols
Stops inválidos10016NoStops a partir del precio actual
Sin dinero suficiente10019NoPOST …/calculate
Símbolo distinto—Noinstrument en lugar de symbol
Recotización, precio cambiado, sin cotizaciones10004, 10020, 10021Como una orden nuevaRevisa primero el precio nuevo

Más códigos de retorno de MT5, y qué hace fxapis con cada uno

MetaTrader 5 responde cada solicitud de operación con un código de retorno numérico. fxapis entrega el código del broker sin cambios (GET /v1/orders/{id}) y lo clasifica en uno de tres resultados: rechazada (ORDER_REJECTED, no se ejecutó nada), rechazada pero reintentable (ORDER_REJECTED con retryable: true, no se ejecutó nada y una orden nueva puede funcionar) o desconocida (ORDER_UNRESOLVED, se confirma con los registros del broker antes de suponer nada).

CódigoNombre de MetaQuotesQué significaResultado en fxapisQué hacer
10004TRADE_RETCODE_REQUOTERecotizaciónReintentableOrden nueva, clave nueva, después de revisar el precio
10006TRADE_RETCODE_REJECTSolicitud rechazadaRechazadaLee el mensaje del broker
10011TRADE_RETCODE_ERRORError al procesar la solicitudDesconocidaNo la reenvíes; consulta la orden
10012TRADE_RETCODE_TIMEOUTSolicitud cancelada por tiempo de esperaDesconocidaNo la reenvíes; consulta la orden
10013TRADE_RETCODE_INVALIDSolicitud inválidaRechazadaRevisa los campos de la orden
10014TRADE_RETCODE_INVALID_VOLUMEVolumen inválidoRechazadaRedondea al paso de volumen del símbolo
10015TRADE_RETCODE_INVALID_PRICEPrecio inválidoRechazadaCalcula el precio de la orden pendiente a partir de la cotización actual
10016TRADE_RETCODE_INVALID_STOPSStops inválidosRechazadaStops del lado correcto, fuera de la distancia mínima
10017TRADE_RETCODE_TRADE_DISABLEDOperar está deshabilitadoRechazadaEl símbolo o la cuenta no puede operar ahora; consulta al broker
10018TRADE_RETCODE_MARKET_CLOSEDEl mercado está cerradoRechazadaRevisa antes GET …/sessions
10019TRADE_RETCODE_NO_MONEYNo hay dinero suficienteRechazadaMenos volumen, o primero POST …/calculate
10020TRADE_RETCODE_PRICE_CHANGEDLos precios cambiaronReintentableOrden nueva después de revisar el precio
10021TRADE_RETCODE_PRICE_OFFNo hay cotizaciones para procesar la solicitudReintentableEspera las cotizaciones y luego una orden nueva
10024TRADE_RETCODE_TOO_MANY_REQUESTSSolicitudes demasiado frecuentesReintentableBaja el ritmo y luego una orden nueva
10026TRADE_RETCODE_SERVER_DISABLES_ATTrading automático deshabilitado por el servidorRechazadaEl broker desactivó el trading automático en la cuenta; consulta al broker
10027TRADE_RETCODE_CLIENT_DISABLES_ATTrading automático deshabilitado en el terminalRechazadaEl trading algorítmico está apagado en el terminal. fxapis ejecuta sus terminales con él encendido; si lo ves, contacta a soporte
10030TRADE_RETCODE_INVALID_FILLTipo de ejecución inválidoRechazadafxapis elige el modo de ejecución que acepta el símbolo; si persiste, contacta a soporte
10031TRADE_RETCODE_CONNECTIONSin conexión con el servidor de operacionesDesconocidaNo la reenvíes; consulta la orden
10033TRADE_RETCODE_LIMIT_ORDERSSe alcanzó el límite de órdenes pendientesRechazadaCancela las órdenes pendientes que ya no necesitas
10034TRADE_RETCODE_LIMIT_VOLUMESe alcanzó el límite de volumen del símboloRechazadaReduce la exposición en ese símbolo
10040TRADE_RETCODE_LIMIT_POSITIONSSe alcanzó el límite de posiciones abiertasRechazadaCierra posiciones o consulta al broker
10044TRADE_RETCODE_CLOSE_ONLYSolo se permite cerrarRechazadaEl símbolo es solo de cierre en este broker
10045TRADE_RETCODE_FIFO_CLOSESolo se permite cerrar por FIFORechazadaCierra primero la posición más antigua
10046TRADE_RETCODE_HEDGE_PROHIBITEDPosiciones opuestas deshabilitadasRechazadaLa cuenta no permite cobertura; cierra en lugar de abrir el lado contrario

Los códigos y nombres vienen de los códigos de retorno del servidor de operaciones de MetaQuotes (revisado el 26 de octubre de 2026). Los brokers pueden devolver otros códigos; fxapis trata un código que no reconoce como desconocido, nunca como rechazado, para confirmarlo en lugar de adivinar.

No toda falla es un rechazo

Hay otras dos fallas que se parecen y significan otra cosa:

  • SEND_FAILED (503): está comprobado que la orden nunca llegó al broker. Es seguro reenviarla, con la misma clave de idempotencia.
  • ORDER_UNRESOLVED (503): todavía nadie sabe si se ejecutó. No la reenvíes. Consulta la orden; fxapis la confirma con los registros del broker.

Próximos pasos

— Arquitecto de software e ingeniero de IA con más de 15 años construyendo y escalando sistemas de software. Diseña y construye software y sistemas de IA listos para producción, y escribe sobre cómo se hacen.

elwizard.netGitHubInstagram

FAQ

Preguntas frecuentes

¿Qué significa el error 10019 de MT5?

10019 es TRADE_RETCODE_NO_MONEY: la cuenta no tiene margen libre suficiente para abrir la orden. Reduce el volumen o revisa antes el margen; reintentar la misma orden da el mismo rechazo.

¿Qué significa el error 10014 de volumen inválido en MT5?

El volumen no cumple las reglas del símbolo en ese broker: está por debajo del mínimo, por encima del máximo o no es múltiplo del paso de volumen. Cada broker fija estas reglas por símbolo.

¿Qué significa el error 10016 de stops inválidos en MT5?

El stop loss o el take profit está del lado equivocado del precio, o más cerca de lo que permite el broker.

¿Qué significa el error 10018 de mercado cerrado en MT5?

10018 es TRADE_RETCODE_MARKET_CLOSED: la sesión de operaciones del broker para ese símbolo está cerrada, por ejemplo el fin de semana en Forex o durante la pausa diaria del oro. Revisa el horario del símbolo en tu broker antes de enviar; reintentar antes de que abra el mercado da la misma respuesta.

¿Qué significa el error 10027 de MT5?

10027 es TRADE_RETCODE_CLIENT_DISABLES_AT: el trading algorítmico está apagado en el terminal de MetaTrader 5 que envió la orden. En tu propio terminal, activa Algo Trading. fxapis ejecuta sus terminales alojados con él encendido, así que si una orden de fxapis devuelve 10027, contacta a soporte.

¿Debo reintentar una orden rechazada en MT5?

Solo cuando el rechazo es pasajero, como una recotización o un precio que cambió; fxapis marca esos como reintentables. Envíala como una orden nueva con una clave de idempotencia nueva, después de mirar el precio nuevo. Los demás rechazos se repetirán hasta que cambies la orden.

> Connect. Execute. Scale.

Opera MT5 desde tu propio código.

Conecta cuentas con login, contraseña y servidor, y coloca órdenes por HTTPS. Nosotros ejecutamos MetaTrader 5; tú no instalas nada.