Inicio > Blog > MT5 "Not enough money" (10019/134): 6 causas y soluciones

MT5MQL5ErroresSolución de problemasEAMargen

MT5 "Not enough money" (10019/134): 6 causas y soluciones

Publicado: 2026-06-12Lectura: aprox. 7 min
⏱ Este artículo refleja la información a la fecha de su publicación. Las cifras de rendimiento de los EAs (PF, DD, rentabilidad anual) cambian con la operativa real y la revalidación: consulta lo más reciente en las páginas de los EAs. Ver los últimos resultados de los EAs →

ERR_NO_MONEY (MT5/MQL5): solución completa

Cuando tienes un EA en funcionamiento y en la pestaña Expertos o en el diario aparece ERR_NO_MONEY o not enough money, es fácil pensar «¿ya me quedé sin fondos?». Pero este error puede aparecer incluso con saldo de sobra. La causa no es solo «fondos en cero»: también influyen el cálculo del lote, el apalancamiento, el margen retenido por posiciones existentes y varios factores más.

Este artículo es la guía definitiva tanto para quienes operan EAs en MT5 como para quienes los programan en MQL5. Cubre de una sola vez qué es realmente ERR_NO_MONEY, sus 6 causas, soluciones inmediatas, particularidades según el bróker y cómo prevenirlo de forma permanente desde el código. Para el listado general de códigos de error, consulta la guía completa de códigos de error de MQL5 / MT5.

Este artículo se basa en MT5 (build serie 4xxx) a fecha de junio de 2026. Los valores numéricos y nombres de pantallas pueden variar ligeramente según el bróker o la build.


Diagnóstico rápido en 30 segundos

En MT5, revisa estos tres valores en la pestaña «Caja de herramientas → Trading»:

Balance (Balance)            : efectivo de la cuenta
Equidad (Equity)             : balance ± ganancia/pérdida flotante
Margen libre (Free Margin)   : margen disponible para nuevas operaciones ← esto es clave
Nivel de margen (Margin Level %): Equity / Margin × 100
  • Si el margen libre (Free Margin) es menor que el margen necesario para la posición que quieres abrir → aparecerá ERR_NO_MONEY el 100% de las veces.
  • Si aparece a pesar de tener saldo suficiente, la causa está en alguno de los siguientes puntos: «② lote excesivo», «④ margen retenido por posiciones existentes» o «⑥ tipo de cuenta diferente».

El margen necesario para una posición se puede consultar en MT5 en «Cotizaciones → clic derecho sobre el símbolo → Especificaciones» (margen para 1 lote). De forma aproximada:

Margen necesario ≈ (Lote × Tamaño del contrato × Precio) / Apalancamiento

Comparación de brókers recomendados →

🎁 Descargar EA gratis

📧 Curso gratuito por email (8 correos) + paquete de 13 indicadores MT5 solo para suscriptores

* Privacidad estrictamente protegida. Puedes darte de baja en cualquier momento.

Qué es ERR_NO_MONEY (10019 en MT5, 134 en MT4)

ERR_NO_MONEY es una abreviatura muy extendida, no una constante oficial: ni la referencia de MQL5 ni la de MQL4 la definen. El nombre y el número oficiales dependen de la plataforma (MQL5: códigos de retorno del servidor comercial, MQL4: códigos de error).

① MT5: TRADE_RETCODE_NO_MONEY = 10019 (código de retorno del servidor comercial)

En MQL5, el resultado de OrderSend() se guarda en MqlTradeResult.retcode. Cuando el servidor rechaza la orden por fondos insuficientes, el código es 10019 (TRADE_RETCODE_NO_MONEY). Es un aviso de rechazo del servidor del bróker. OrderCheck() comprueba los fondos antes de enviar y deja el resultado en MqlTradeCheckResult.retcode.

Significado: no hay fondos suficientes para completar la solicitud (There is not enough money to complete the request)
Constante  : TRADE_RETCODE_NO_MONEY
Valor      : 10019
// Ejemplo típico de salida en el log
2026.06.12 09:15:32.441 EA_NAME XAUUSD,H1: OrderSend error 10019

② MT4: ERR_NOT_ENOUGH_MONEY = 134 (GetLastError() en MQL4)

134 es el número de MT4 (MQL4). La lista de errores de ejecución de MQL5 que devuelve GetLastError() no contiene ni el 134 ni ningún código de fondos insuficientes; en MT5 hay que leer el retcode.

Significado: no hay fondos suficientes para la operación (not enough money)
Constante  : ERR_NOT_ENOUGH_MONEY
Valor      : 134 (MT4)

Cómo distinguirlos en la práctica:

OrigenValorCuándo aparece
MqlTradeResult.retcode (MT5)10019 (TRADE_RETCODE_NO_MONEY)OrderSend fue rechazado por el servidor
CTrade.ResultRetcode() (MT5)10019Rechazo de orden a través de CTrade
GetLastError() (MT4)134 (ERR_NOT_ENOUGH_MONEY)OrderSend (MT4 / MQL4)

Si en el registro aparece «10019» o not enough money, el servidor comercial de MT5 rechazó la orden; «134» procede de un terminal o EA de MT4. La causa de fondo es la misma (margen requerido > margen disponible), así que las soluciones son comunes.


Causas y soluciones (6 patrones)

① Falta de margen real

Síntoma: las pérdidas flotantes han crecido y el margen libre ha quedado por debajo de lo necesario para una nueva operación. Es frecuente tras una racha de pérdidas o con muchos niveles de un sistema de promediado (martingala).

Solución:

  1. Depositar fondos adicionales, o
  2. Cerrar manualmente parte de las posiciones abiertas para liberar margen
  3. Reducir el RiskPercent del EA para que los lotes futuros sean más pequeños

Si este patrón se repite constantemente con un EA, el lote es demasiado grande para el capital disponible. Pasa al punto ②.


② El lote es demasiado grande (en relación con el saldo)

Síntoma: hay saldo suficiente, pero ERR_NO_MONEY aparece desde la primera operación. Es común en configuraciones de lote fijo.

Causa: FixedLot no está ajustado al saldo ni al apalancamiento de la cuenta. Por ejemplo, con una cuenta de 100.000 yenes (≈$670) e intentando abrir 0.1 lotes en XAUUSD, según el apalancamiento el margen necesario puede superar el saldo.

Solución:

  1. Bajar el lote fijo al mínimo (0.01) y comprobar si se puede abrir
  2. Cambiar a cálculo automático por riesgo % (UseFixedLot=false / RiskPercent)
  3. Si ni siquiera se puede abrir 0.01, el problema es de apalancamiento o de capital insuficiente → ver ③ y ⑥

Referencia: un diseño razonable es poder empezar con un lote mínimo de 0.01 en una cuenta estándar de 100.000 yenes (≈$670). Si tu capital es menor o prefieres operar con aún más margen de seguridad, considera una cuenta micro (cent), como se explica a continuación.


③ Apalancamiento bajo o restringido por fin de semana/eventos

Síntoma: el mismo EA y el mismo lote funcionan en otra cuenta, pero en esta da ERR_NO_MONEY. O bien el error se concentra entre el viernes por la tarde y el lunes por la mañana.

Causa: un apalancamiento bajo (por ejemplo, 1:30 en cuentas reguladas de la UE frente a 1:1000 en brokers offshore) puede multiplicar por decenas el margen necesario. Además, algunos brókers reducen el apalancamiento los fines de semana o alrededor de indicadores importantes (XM, por ejemplo, limita el apalancamiento a 200:1 los fines de semana), lo que puede disparar de golpe el margen necesario mientras hay posiciones abiertas. En oro o criptomonedas también puede haber límites de apalancamiento específicos por símbolo.

Solución:

  1. Comprobar el apalancamiento de la cuenta (en el área de cliente del bróker o en la información de la cuenta en MT5)
  2. Revisar el «índice de margen» en las especificaciones del símbolo (puede ser más bajo para ciertos instrumentos)
  3. Usar una configuración que cierre posiciones antes del fin de semana (CloseAllBeforeWeekend=true, etc.), o cambiar a un bróker sin restricción de apalancamiento en fin de semana
  4. Cambiar a una cuenta con mayor apalancamiento o reducir el lote

④ El margen está retenido por posiciones existentes

Síntoma: la primera posición se abre sin problema, pero desde la segunda en adelante, o al añadir posiciones (promediado), aparece ERR_NO_MONEY.

Causa: las posiciones ya abiertas retienen margen, por lo que el margen libre queda por debajo de lo necesario para una nueva operación. Es habitual cuando se operan varios pares o varios EAs en la misma cuenta.

Solución:

  1. Revisar el margen usado (Margin) y el margen libre en la pestaña «Trading»
  2. Verificar si varios EAs están compitiendo por el margen de la misma cuenta (en caso de operar varios EAs)
  3. Limitar el número máximo de posiciones simultáneas mediante parámetros del EA
  4. En EAs de promediado o grid, cuantos más niveles se abran, más rápido se consume el margen → revisar el límite de niveles, el multiplicador de lote y los ajustes de cierre de emergencia

⑤ Bonos o crédito incluidos en el cálculo del margen

Síntoma: debería ser suficiente considerando «saldo + bono», pero aparece ERR_NO_MONEY de todas formas.

Causa: según el bróker, el crédito (bono) puede no incluirse, o incluirse solo parcialmente, en el cálculo del margen. Esto genera una diferencia entre el saldo mostrado y el margen que realmente usa el servidor.

Solución: revisar en los términos del bono del bróker si el crédito se computa como margen. Si no se computa, reducir el lote para que el margen necesario se cubra solo con el depósito real.


⑥ Diferencia en el tamaño de contrato según el tipo de cuenta (estándar vs. cent/micro)

Síntoma: con el mismo «lote 0.01», al cambiar de cuenta aparece de repente ERR_NO_MONEY, o, al contrario, el lote resulta excesivo.

Causa: el tamaño de contrato de una cuenta cent (micro) es aproximadamente 100 veces menor que el de una cuenta estándar. Un lote de 0.01 en cuenta cent representa una exposición real de aproximadamente 1/100. Si el EA usa un lote fijo sin distinguir el tipo de cuenta, puede quedarse sin margen en una de ellas.

Solución:

  1. Para operar con poco capital y de forma más segura, usar una cuenta cent/micro, de modo que incluso el lote mínimo no implique un riesgo excesivo
  2. Diseñar el EA para que no dependa de un tipo de cuenta fijo, sino que determine el lote consultando el margen real necesario con OrderCalcMargin() (ver siguiente sección)

Particularidades según el bróker

BrókerCaracterísticasFrecuencia de ERR_NO_MONEY
XMRestricción de apalancamiento en fin de semana, Stop Out 20%Media (más alta en fines de semana)
ExnessCuentas con apalancamiento ilimitado, Stop Out 0%Baja
HFM / FXGT, etc.Cuentas con apalancamiento altoBaja

Las cuentas de apalancamiento ilimitado de Exness (cuentas Pro/Raw Spread) suelen permitir nuevas órdenes incluso con margen libre prácticamente en cero, por lo que este error aparece con menor frecuencia. Esto encaja bien con EAs de promediado, pero tiene la contrapartida de que el stop out apenas actúa, lo que puede hacer que las pérdidas crezcan más de lo previsto; tenlo en cuenta. Para comparar brókers, consulta también la página de comparación de brókers.


Código en MQL5 para prevenir este error (para desarrolladores de EAs)

Más allá de «solucionarlo», el diseño correcto de un EA consiste en evitar por completo que ERR_NO_MONEY llegue a producirse antes de enviar la orden. La clave está en calcular el margen necesario antes de operar y, si no es suficiente, no abrir la posición o reducir el lote.

Comprobar el margen necesario antes de enviar la orden

// Filtro previo al envío: comprobar margen necesario <= margen libre antes de llamar a OrderSend
bool HasEnoughMargin(ENUM_ORDER_TYPE type, double lots)
{
   double price = (type == ORDER_TYPE_BUY)
                  ? SymbolInfoDouble(_Symbol, SYMBOL_ASK)
                  : SymbolInfoDouble(_Symbol, SYMBOL_BID);

   double margin = 0.0;
   if(!OrderCalcMargin(type, _Symbol, lots, price, margin))
   {
      Print("OrderCalcMargin failed: ", GetLastError());
      return false;
   }
   double freeMargin = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   if(margin > freeMargin)
   {
      PrintFormat("Skip: need %.2f > free %.2f (ERR_NO_MONEY guard)", margin, freeMargin);
      return false;   // No abrir la posición = evita ERR_NO_MONEY de antemano
   }
   return true;
}

Normalizar el lote al mínimo y al step

Si se envía directamente el valor calculado a partir del riesgo %, puede no ajustarse al lote mínimo o al step de lote y la orden será rechazada (un fallo de normalización es una causa típica de rechazo). En lugar de renunciar cuando no se puede abrir el lote calculado, reducirlo al rango permitido minimiza las oportunidades perdidas.

double NormalizeLot(double lots)
{
   double minLot  = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
   double maxLot  = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
   double step    = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
   lots = MathFloor(lots / step) * step;          // Redondear al step
   lots = MathMax(minLot, MathMin(maxLot, lots)); // Ajustar entre mínimo y máximo
   return NormalizeDouble(lots, 2);
}

Comprobar siempre el retcode de OrderSend

No basta con mirar el valor de retorno (bool) de OrderSend(); hay que revisar result.retcode y manejar específicamente el código 10019 (TRADE_RETCODE_NO_MONEY).

MqlTradeRequest req; MqlTradeResult res;
ZeroMemory(req); ZeroMemory(res);
// ... construir req ...
if(!OrderSend(req, res) || res.retcode != TRADE_RETCODE_DONE)
{
   if(res.retcode == TRADE_RETCODE_NO_MONEY)   // 10019
      Print("Not enough money. Es necesario reducir el lote o depositar fondos.");
   else
      PrintFormat("OrderSend failed: retcode=%d, lastError=%d", res.retcode, GetLastError());
}

Si usas CTrade, puedes comprobar si trade.ResultRetcode() es 10019, o revisar trade.ResultRetcodeDescription().

Parada de emergencia según el nivel de margen

Añadir un mecanismo de seguridad que detenga nuevas entradas o cierre todas las posiciones cuando el nivel de margen caiga por debajo de un porcentaje determinado evita tanto la repetición de ERR_NO_MONEY como la quiebra de la cuenta.

double level = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL); // Nivel de margen %
if(level > 0 && level < EmergencyMarginLevel)          // Ejemplo: 150%
{
   // Detener nuevas entradas y, si es necesario, cerrar parte de las posiciones abiertas
}

Los EAs distribuidos por FXEA365 implementan de forma estándar el cálculo automático de lote por riesgo %, la verificación de margen previa al envío de órdenes y la parada de emergencia por nivel de margen (UseMarginEmergencyClose), por lo que pueden operar sin problemas incluso con capital reducido.


Lista de comprobación por prioridad

PrioridadRevisarSolución
🚨 Primero¿Margen libre < margen necesario?Depositar fondos, cerrar parte de las posiciones o reducir el lote
🚨 Primero¿El lote fijo es excesivo para el saldo?Bajar a 0.01 o pasar a riesgo % automático
⚠️ Después¿Apalancamiento bajo o restricción de fin de semana?Cuenta de mayor apalancamiento, cierre antes del fin de semana o reducir el lote
⚠️ Después¿Margen retenido por posiciones existentes u otros EAs?Reorganizar las posiciones abiertas en la misma cuenta
✅ ComprobarDiferencia de tamaño de contrato cent/estándarAjustar el lote al tipo de cuenta
🛠 DesarrolloProtección con OrderCalcMargin antes de enviar la ordenImplementar el código mostrado arriba

Resumen

  • En MT5, la falta de fondos es 10019 (TRADE_RETCODE_NO_MONEY); 134 (ERR_NOT_ENOUGH_MONEY) es el número de MT4, y ERR_NO_MONEY es una abreviatura para ambos. En los dos casos la causa es la misma: margen requerido > margen disponible.
  • Puede aparecer aunque haya saldo, debido a lote excesivo, apalancamiento bajo (incluidas restricciones de fin de semana), margen retenido por posiciones existentes o diferencias de tipo de cuenta.
  • Quien opera EAs puede prevenirlo usando «lote automático por riesgo %» y el «tipo de cuenta adecuado»; quien desarrolla EAs debe implementar de forma permanente un «filtro con OrderCalcMargin antes de enviar la orden», «normalización del lote» y «manejo del retcode 10019».

Para el listado general de códigos de error, consulta la guía completa de códigos de error de MQL5 / MT5; para EAs gratuitos que funcionan con una configuración de capital razonable, revisa el listado de EAs. Si usas un EA de este sitio y el problema persiste incluso después de ajustar la configuración, contacta a través del formulario de soporte adjuntando una captura de pantalla del estado del margen de tu cuenta.


Preguntas frecuentes

P: Tengo saldo suficiente, pero aparece ERR_NO_MONEY. ¿Por qué?

Porque la comprobación no se hace sobre el balance (Balance), sino sobre el margen libre (Free Margin). Si las pérdidas flotantes o el margen retenido por posiciones existentes han reducido el margen libre, no se podrá abrir una nueva posición aunque el saldo sea suficiente. Revisa el margen libre en la pestaña «Trading».

P: ¿Cuál es la diferencia entre 134 y 10019?

10019 (TRADE_RETCODE_NO_MONEY) es el código de retorno del servidor comercial de MT5 que llega en el resultado de OrderSend(); 134 (ERR_NOT_ENOUGH_MONEY) es el error de MT4 que devuelve GetLastError(). Solo cambia la plataforma: la causa (fondos insuficientes) es la misma.

P: No aparece en el backtest, pero sí en cuenta real.

Se debe a que el apalancamiento, el tipo de cuenta (cent/estándar) y las posiciones existentes de la cuenta real difieren de la configuración de la prueba. Las diferencias de apalancamiento y de tamaño de contrato tienen especial impacto.

P: Con EAs de promediado o grid, al aumentar los niveles aparece ERR_NO_MONEY.

Es prácticamente el paso previo a un comportamiento esperado. Cuantos más niveles se abren, más rápido se consume el margen. Reduce el límite de niveles y el multiplicador de lote, activa siempre un cierre de emergencia como UseMarginEmergencyClose, y opera solo con capital que puedas permitirte perder.

P: ¿Se puede evitar automáticamente desde el código del EA?

Sí. Basta con calcular el margen necesario con OrderCalcMargin() antes de enviar la orden y añadir un filtro que impida abrir la posición (o reduzca el lote) si supera AccountInfoDouble(ACCOUNT_MARGIN_FREE). Consulta el ejemplo de código incluido en el artículo.

P: ¿Con cuánto capital se puede empezar sin forzar la cuenta?

Un punto de partida razonable es una cuenta estándar de 100.000 yenes (≈$670) con un lote mínimo de 0.01. Si dispones de menos capital o prefieres operar con más margen de seguridad, usar una cuenta cent (micro) reduce la exposición real incluso con el lote mínimo, lo que facilita evitar el ERR_NO_MONEY.

📧 Curso gratuito por email (8 correos) + paquete de 13 indicadores MT5 solo para suscriptores

* Privacidad estrictamente protegida. Puedes darte de baja en cualquier momento.

¿Tienes alguna pregunta sobre EAs o Forex?

Puedes publicarla en el foro de trading de Nattzy (registro gratuito). También son bienvenidas preguntas que vayan más allá de este artículo: configuración de EAs, elección de bróker y más.

Preguntar en Nattzy ↗

Comentarios y preguntas