Límite de pérdida diaria en un Asesor Experto: cuatro decisiones que las prop firms exigen acertar

10 octubre 2026, 10:22
Bohdan Klok
0
9

Un límite de pérdida diaria parece una sola línea de código: "si la pérdida de hoy supera el X%, parar". En la práctica son cuatro decisiones, y cada una cambia el momento en que se activa el límite. Las empresas de fondeo (prop firms) las han hecho inevitables: basta con superar el límite diario una vez para perder la cuenta, haga lo que haga la estrategia el resto del mes. Así se suele contar el límite, aquí es donde falla una implementación sencilla, y este es el código que uso en mi Asesor Experto.

1. ¿Qué es "hoy"?

El día del servidor de trading, no el de su ordenador: TimeCurrent() es el reloj que MetaTrader muestra en todas partes. Las prop firms reinician el límite a medianoche de su servidor o de una zona horaria fija; compruebe cuál usa la suya: si no es la medianoche del servidor, hay que desplazar la hora de reinicio. El inicio del día del servidor es simplemente:

datetime now = TimeCurrent();
datetime day = now - now % 86400;       // 00:00 server time

2. ¿Pérdida respecto a qué?

Respecto al balance al inicio del día. Muchas prop firms toman el balance o la equidad en ese momento, el que sea mayor, así que la opción más estricta es la segura: si entra en la noche con un beneficio flotante de 300, ese beneficio forma parte de la base, y devolverlo cuenta como pérdida.

double base = MathMax(AccountInfoDouble(ACCOUNT_BALANCE), AccountInfoDouble(ACCOUNT_EQUITY));

3. ¿Pérdida medida cómo?

Sobre la equidad, no sobre las operaciones cerradas. Un límite que solo mira las operaciones cerradas deja que una posición abierta lo sobrepase con creces: el monitor de la prop firm ve la pérdida flotante, su código no. Por eso la comprobación se hace en cada tick:

if(AccountInfoDouble(ACCOUNT_EQUITY) <= base * (1.0 - limitPercent / 100.0))
   stopped = true;      // close the positions, open nothing until the next day

y sobre toda la cuenta. Un límite por Asesor Experto sirve para su propio control de riesgo, pero la prop firm cuenta todas las posiciones juntas. Si varias copias del programa funcionan en varios gráficos, cada una ve la misma equidad de la cuenta y cada una cierra sus propias posiciones.

4. ¿Qué sobrevive a un reinicio?

Esto es lo que una implementación sencilla siempre hace mal. La base se guarda en una variable; el terminal se reinicia a las 14:00 (una actualización, un reinicio del VPS, un cambio de parámetros); el programa arranca de nuevo, toma el balance actual como "inicio del día" - después de las pérdidas de la mañana - y permite otro límite completo. El estado del día debe guardarse fuera del programa. Las variables globales del terminal están hechas para eso:

string key = StringFormat("DL_%I64d_%I64u_%s_", AccountInfoInteger(ACCOUNT_LOGIN), magic, _Symbol);
if(GlobalVariableCheck(key + "day") && (datetime)GlobalVariableGet(key + "day") == day)
  {
   base    = GlobalVariableGet(key + "base");       // the real start of the day
   stopped = GlobalVariableGet(key + "stop") != 0.0;
  }
else
  {
   GlobalVariableSet(key + "day", (double)day);      // a new day: remember it
   GlobalVariableSet(key + "base", base);
   GlobalVariableSet(key + "stop", 0.0);
  }

El terminal conserva las variables globales durante cuatro semanas desde el último acceso y las guarda en disco, así que sobreviven a un reinicio, a una recompilación y a un cambio de parámetros.

Detalles pequeños que importan

  • Cerrar y parar: cuando se activa el límite, cierre las posiciones de este programa y rechace toda señal nueva hasta el día siguiente. Avíselo donde el usuario mira (una línea en el panel del gráfico, una alerta, una notificación push), no solo en el diario.
  • Un cierre puede fallar: el mercado está cerrado, el precio se movió, el servidor está ocupado. Reintente, pero no en cada tick: una vez por segundo mientras la sesión de trading está abierta es suficiente.
  • En el Probador de Estrategias las variables globales pertenecen al agente de prueba, y una prueba no se reinicia a mitad: ahí basta con el estado en memoria.
  • Elija un porcentaje por debajo del límite de la prop firm. Con un riesgo del 1% por operación, un límite diario del 3% son tres operaciones con stop; ponga su propio límite en el 4% si el de la empresa es del 5%, porque el precio puede saltar más allá de su stop.

En el producto

Desde la versión 1.09 Indicator Signal Trader Kb tiene exactamente esto: "Daily loss limit" en los parámetros, desactivado por defecto, contado sobre toda la cuenta desde el mayor entre balance y equidad al inicio del día del servidor, conservado entre reinicios, con una línea roja en el panel cuando se activa. En el Probador de Estrategias, con el límite en 0,5% y un riesgo del 1% por operación, se activó 372 veces en 2022-2026 en GBPUSD, y ni una sola posición se abrió después el mismo día, que es lo único que un límite diario tiene que garantizar.