# 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.

Publicado el 2026-10-26 por ElWizard para fxapis. Canónica: https://fxapis.com/es/blog/por-que-mt5-rechaza-tu-orden

## En resumen

- Una solicitud bien formada puede ser rechazada por el broker, porque el broker aplica sus propias reglas a cada orden.
- Las cinco causas más comunes: el mercado está cerrado, el volumen no cumple las reglas del símbolo, los stops son inválidos, no hay margen suficiente o el símbolo tiene otro nombre en ese broker.
- Lee el resultado, no solo el estado. fxapis devuelve ORDER_REJECTED con el motivo del broker, su código de retorno de MT5 y si reintentar puede servir.
- La mayoría de los rechazos se evitan revisando el horario del mercado, las reglas de volumen del símbolo y el margen antes de enviar.

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

| Causa | Código MT5 | ¿Reintentar igual? | Cómo evitarlo |
|---|---|---|---|
| Mercado cerrado | 10018 | No | `GET …/sessions` |
| Volumen inválido | 10014 | No | Reglas de volumen de `GET …/symbols` |
| Stops inválidos | 10016 | No | Stops a partir del precio actual |
| Sin dinero suficiente | 10019 | No | `POST …/calculate` |
| Símbolo distinto | — | No | `instrument` en lugar de `symbol` |
| Recotización, precio cambiado, sin cotizaciones | 10004, 10020, 10021 | Como una orden nueva | Revisa 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ódigo | Nombre de MetaQuotes | Qué significa | Resultado en fxapis | Qué hacer |
|---|---|---|---|---|
| 10004 | `TRADE_RETCODE_REQUOTE` | Recotización | Reintentable | Orden nueva, clave nueva, después de revisar el precio |
| 10006 | `TRADE_RETCODE_REJECT` | Solicitud rechazada | Rechazada | Lee el mensaje del broker |
| 10011 | `TRADE_RETCODE_ERROR` | Error al procesar la solicitud | Desconocida | No la reenvíes; consulta la orden |
| 10012 | `TRADE_RETCODE_TIMEOUT` | Solicitud cancelada por tiempo de espera | Desconocida | No la reenvíes; consulta la orden |
| 10013 | `TRADE_RETCODE_INVALID` | Solicitud inválida | Rechazada | Revisa los campos de la orden |
| 10014 | `TRADE_RETCODE_INVALID_VOLUME` | Volumen inválido | Rechazada | Redondea al paso de volumen del símbolo |
| 10015 | `TRADE_RETCODE_INVALID_PRICE` | Precio inválido | Rechazada | Calcula el precio de la orden pendiente a partir de la cotización actual |
| 10016 | `TRADE_RETCODE_INVALID_STOPS` | Stops inválidos | Rechazada | Stops del lado correcto, fuera de la distancia mínima |
| 10017 | `TRADE_RETCODE_TRADE_DISABLED` | Operar está deshabilitado | Rechazada | El símbolo o la cuenta no puede operar ahora; consulta al broker |
| 10018 | `TRADE_RETCODE_MARKET_CLOSED` | El mercado está cerrado | Rechazada | Revisa antes `GET …/sessions` |
| 10019 | `TRADE_RETCODE_NO_MONEY` | No hay dinero suficiente | Rechazada | Menos volumen, o primero `POST …/calculate` |
| 10020 | `TRADE_RETCODE_PRICE_CHANGED` | Los precios cambiaron | Reintentable | Orden nueva después de revisar el precio |
| 10021 | `TRADE_RETCODE_PRICE_OFF` | No hay cotizaciones para procesar la solicitud | Reintentable | Espera las cotizaciones y luego una orden nueva |
| 10024 | `TRADE_RETCODE_TOO_MANY_REQUESTS` | Solicitudes demasiado frecuentes | Reintentable | Baja el ritmo y luego una orden nueva |
| 10026 | `TRADE_RETCODE_SERVER_DISABLES_AT` | Trading automático deshabilitado por el servidor | Rechazada | El broker desactivó el trading automático en la cuenta; consulta al broker |
| 10027 | `TRADE_RETCODE_CLIENT_DISABLES_AT` | Trading automático deshabilitado en el terminal | Rechazada | El trading algorítmico está apagado en el terminal. fxapis ejecuta sus terminales con él encendido; si lo ves, contacta a soporte |
| 10030 | `TRADE_RETCODE_INVALID_FILL` | Tipo de ejecución inválido | Rechazada | fxapis elige el modo de ejecución que acepta el símbolo; si persiste, contacta a soporte |
| 10031 | `TRADE_RETCODE_CONNECTION` | Sin conexión con el servidor de operaciones | Desconocida | No la reenvíes; consulta la orden |
| 10033 | `TRADE_RETCODE_LIMIT_ORDERS` | Se alcanzó el límite de órdenes pendientes | Rechazada | Cancela las órdenes pendientes que ya no necesitas |
| 10034 | `TRADE_RETCODE_LIMIT_VOLUME` | Se alcanzó el límite de volumen del símbolo | Rechazada | Reduce la exposición en ese símbolo |
| 10040 | `TRADE_RETCODE_LIMIT_POSITIONS` | Se alcanzó el límite de posiciones abiertas | Rechazada | Cierra posiciones o consulta al broker |
| 10044 | `TRADE_RETCODE_CLOSE_ONLY` | Solo se permite cerrar | Rechazada | El símbolo es solo de cierre en este broker |
| 10045 | `TRADE_RETCODE_FIFO_CLOSE` | Solo se permite cerrar por FIFO | Rechazada | Cierra primero la posición más antigua |
| 10046 | `TRADE_RETCODE_HEDGE_PROHIBITED` | Posiciones opuestas deshabilitadas | Rechazada | La 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](https://www.mql5.com/en/docs/constants/errorswarnings/enum_trade_return_codes) 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

- [Las tres fallas](https://docs.fxapis.com/es/trading#the-three-failures): rechazada, nunca enviada y desconocida, en detalle.
- [Todos los códigos de error](https://docs.fxapis.com/es/errors), con si conviene reintentar.
- [Instrumentos y símbolos](https://docs.fxapis.com/es/instruments): un nombre para cada mercado, en todos los brokers.
- [La API de MT5](https://fxapis.com/mt5-api): cuentas, órdenes e historial, con un resultado registrado para cada operación.

## Preguntas

### ¿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.
