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
DEFPARAM NOCASHUPDATE = trueParametri
| Nome | Tipo | Predefinito | Descrizione |
|---|---|---|---|
NOCASHUPDATE | booleano | false | Quando 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)
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 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)
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 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)
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
ENDIFEseguire 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. DEFPARAMposizionamento. Come ogniDEFPARAM, 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.
Istruzioni correlate
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.