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
DEFPARAM NOCASHUPDATE = trueParámetros
| Nombre | Tipo | Por defecto | Descripción |
|---|---|---|---|
NOCASHUPDATE | booleano | false | Cuando 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)
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
ENDIFUn 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)
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
ENDIFCon 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)
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
ENDIFEjecutar 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. DEFPARAMcolocación. Como todoDEFPARAM, 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.
Instrucciones relacionadas
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.