Únete hoy
ProBacktest/probacktest · proorder

NOCASHUPDATE

NOCASHUPDATE es un ajuste de DEFPARAM en ProBacktest que mantiene constante el capital inicial durante un backtest, eliminando de los resultados de la estrategia los efectos de la capitalización compuesta.

Sintaxis

probuilder
DEFPARAM NOCASHUPDATE = true

Parámetros

NombreTipoPor defectoDescripción
NOCASHUPDATEbooleanofalseCuando true, el capital inicial no se ajusta por las ganancias y pérdidas realizadas durante el backtest. Cuando false, el capital se actualiza con cada operación cerrada.

Cómo funciona

Por defecto, un backtest mantiene una cifra de capital acumulado: cada operación cerrada suma su beneficio o resta su pérdida, y el importe actualizado limita lo que la estrategia puede permitirse a continuación. En una simulación larga esto crea un efecto de capitalización compuesta. Una estrategia rentable acumula capital que permite posiciones mayores o más frecuentes, y una perdedora puede quedarse sin efectivo y dejar de operar.

Establecer NOCASHUPDATE a true congela el capital en su valor inicial durante toda la simulación. Las operaciones siguen generando beneficios y pérdidas, y la curva de equity sigue registrándolos, pero el efectivo disponible que usa el motor nunca cambia. Todas las operaciones se toman sobre la misma base de capital, tanto la primera como la última.

El ajuste aísla la calidad bruta de la lógica de trading de la trayectoria de la cuenta. Dos conjuntos de señales pueden compararse en igualdad de condiciones, sin que las pérdidas iniciales de una ejecución la priven de capital ni que las ganancias iniciales la inflen. También evita que una estrategia técnicamente correcta se detenga a mitad del backtest porque un drawdown agotó temporalmente el efectivo simulado.

La instrucción es un DEFPARAM, por lo que debe aparecer al principio del código antes de cualquier sentencia ejecutable.

Ejemplos

Ejemplo 1, Backtest con capital fijo (ProBacktest)

probuilder
DEFPARAM NOCASHUPDATE = true
// capital stays at its initial value for the entire simulation

IF NOT OnMarket AND close crosses over Average[50](close) THEN
  BUY 1 CONTRACT AT MARKET
  SET STOP PLOSS 40
ENDIF

IF LongOnMarket AND close crosses under Average[50](close) THEN
  SELL AT MARKET
ENDIF

Un sistema sencillo de seguimiento de tendencia evaluado sobre una base de capital constante. El beneficio reportado refleja únicamente las señales, no la capitalización compuesta de los resultados anteriores.

Ejemplo 2, Sobrevivir a un drawdown profundo (ProBacktest)

probuilder
DEFPARAM NOCASHUPDATE = true

// mean-reversion entries continue even after a losing streak,
// because losses never reduce the available cash
IF NOT OnMarket AND RSI[14](close) < 25 THEN
  BUY 2 CONTRACTS AT MARKET
  SET STOP PLOSS 60
  SET TARGET PPROFIT 80
ENDIF

Con el ajuste por defecto, una racha larga de pérdidas podría agotar el capital simulado y detener el backtest antes de tiempo de forma silenciosa. Mantener el efectivo constante conserva todas las señales en la muestra.

Ejemplo 3, Comparar el rendimiento bruto entre mercados (ProOrder)

probuilder
DEFPARAM NOCASHUPDATE = true
DEFPARAM CumulateOrders = false

long = ExponentialAverage[20](close) crosses over ExponentialAverage[50](close)

IF NOT OnMarket AND long THEN
  BUY 1 CONTRACT AT MARKET
  SET STOP PLOSS 50
ENDIF

Ejecutar el mismo sistema de tamaño fijo en varios instrumentos con capital constante hace que los resultados por mercado sean directamente comparables, ya que la curva de equity de ningún mercado retroalimenta su toma de posiciones.

Errores y trampas habituales

  • Por defecto es false. Omitir la instrucción significa que el capital se actualiza operación a operación. Una estrategia que parece dejar de operar a mitad de un backtest puede simplemente haber agotado su efectivo simulado con el comportamiento por defecto.
  • Las métricas de equity siguen moviéndose. El ajuste congela el efectivo disponible para el motor, no las estadísticas de beneficio. Las ganancias y las pérdidas siguen apareciendo en la curva de equity y en STRATEGYPROFIT, solo la base de capital deja de reaccionar a ellas.
  • DEFPARAM colocación. Como todo DEFPARAM, la declaración debe preceder a la primera línea ejecutable del código, de lo contrario la compilación falla.
  • Sin efecto sobre el dinero real. En una cuenta real de ProOrder, el saldo de efectivo real siempre refleja los resultados efectivos. El parámetro condiciona la simulación del backtest, no es un control de riesgo en real.
  • DEFPARAM, declara parámetros de ejecución a nivel de estrategia.
  • CASH, dimensionamiento de posición basado en un importe en efectivo.
  • STRATEGYPROFIT, beneficio acumulado de la estrategia en divisa.
  • CumulateOrders, permite que varias órdenes se acumulen en una sola posición.
  • PRELOADBARS, número de bars históricos cargados antes de que comience el backtest.
  • FLATBEFORE, impide tomar posiciones antes de una hora determinada.
  • FLATAFTER, fuerza a la estrategia a quedar plana después de una hora determinada.
  • MAXORDER, tamaño máximo permitido para una sola orden.