Iscriviti ora
ProBacktest/probacktest · proorder

NOCASHUPDATE

NOCASHUPDATE è un'impostazione DEFPARAM in ProBacktest che mantiene costante il capitale iniziale durante un backtest, eliminando gli effetti di capitalizzazione composta dai risultati della strategia.

Sintassi

probuilder
DEFPARAM NOCASHUPDATE = true

Parametri

NomeTipoPredefinitoDescrizione
NOCASHUPDATEbooleanofalseQuando true, il capitale iniziale non viene aggiustato dai profitti e dalle perdite realizzate durante il backtest. Quando false, il capitale si aggiorna a ogni operazione chiusa.

Come funziona

Per impostazione predefinita un backtest mantiene una cifra di capitale aggiornata: ogni operazione chiusa aggiunge il suo profitto o sottrae la sua perdita, e l'importo aggiornato limita ciò che la strategia può permettersi in seguito. In una simulazione lunga questo crea un effetto di capitalizzazione composta. Una strategia profittevole accumula capitale che sostiene posizioni più grandi o più frequenti, e una in perdita può esaurire la liquidità e smettere di operare.

Impostare NOCASHUPDATE a true congela il capitale al suo valore iniziale per tutta la simulazione. Le operazioni generano comunque profitti e perdite, e la curva equity continua a registrarli, ma la liquidità disponibile usata dal motore non si muove mai. Ogni operazione viene presa sulla stessa base di capitale, dalla prima all'ultima.

L'impostazione isola la qualità grezza della logica di trading dal percorso del conto. Due insiemi di segnali possono essere confrontati su basi uguali, senza che perdite iniziali in una esecuzione la privino di capitale o che guadagni iniziali la gonfino. Impedisce inoltre a una strategia tecnicamente valida di fermarsi a metà backtest perché un drawdown ha temporaneamente esaurito la liquidità simulata.

L'istruzione è un DEFPARAM, quindi deve comparire all'inizio del codice prima di qualsiasi istruzione eseguibile.

Esempi

Esempio 1, Backtest a capitale fisso (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 semplice sistema trend-following valutato su una base di capitale costante. Il profitto riportato riflette solo i segnali, non la capitalizzazione composta dei risultati precedenti.

Esempio 2, Sopravvivere a un drawdown profondo (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 l'impostazione predefinita, una lunga serie di perdite potrebbe esaurire il capitale simulato e interrompere silenziosamente il backtest in anticipo. Mantenere la liquidità costante conserva ogni segnale nel campione.

Esempio 3, Confronto della performance grezza tra mercati (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

Eseguire lo stesso sistema a dimensione fissa su più strumenti con capitale costante rende i risultati per mercato direttamente confrontabili, poiché il percorso di equity di nessun mercato influisce sull'apertura delle proprie posizioni.

Errori e insidie comuni

  • Il valore predefinito è false. Omettere l'istruzione significa che il capitale si aggiorna operazione per operazione. Una strategia che sembra smettere di operare a metà di un backtest può semplicemente aver esaurito la liquidità simulata con il comportamento predefinito.
  • Le metriche di equity si muovono comunque. L'impostazione congela la liquidità disponibile al motore, non le statistiche di profitto. Guadagni e perdite continuano a comparire nella curva equity e nelle STRATEGYPROFIT, solo la base di capitale smette di reagire ad essi.
  • DEFPARAM posizionamento. Come ogni DEFPARAM, l'istruzione deve precedere la prima riga eseguibile del codice, altrimenti la compilazione fallisce.
  • Nessun effetto sul denaro reale. In un conto ProOrder live il saldo di liquidità reale riflette sempre i risultati effettivi. Il parametro modella la simulazione di backtest, non è un controllo del rischio in tempo reale.
  • DEFPARAM, dichiara i parametri di esecuzione a livello di strategia.
  • CASH, dimensionamento della posizione basato su un importo in contanti.
  • STRATEGYPROFIT, profitto corrente della strategia in valuta.
  • CumulateOrders, consente a più ordini di accumularsi in un'unica posizione.
  • PRELOADBARS, numero di bar storici caricati prima dell'avvio del backtest.
  • FLATBEFORE, impedisce l'apertura di posizioni prima di un'ora stabilita.
  • FLATAFTER, forza la strategia fuori mercato dopo un'ora stabilita.
  • MAXORDER, dimensione massima consentita per un singolo ordine.