NOCASHUPDATE
NOCASHUPDATE är en DEFPARAM-inställning i ProBacktest som håller startkapitalet konstant under ett backtest och tar bort ränta-på-ränta-effekter från strategiresultaten.
Syntax
DEFPARAM NOCASHUPDATE = trueParametrar
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
NOCASHUPDATE | boolesk | false | När true, justeras inte startkapitalet av realiserade vinster och förluster under backtestet. När false, kapitalet uppdateras vid varje stängd affär. |
Så fungerar det
Som standard upprätthåller ett backtest en löpande kapitalsiffra: varje stängd affär lägger till sin vinst eller drar av sin förlust, och det uppdaterade beloppet begränsar vad strategin kan kosta på sig härnäst. Över en lång simulering skapar detta en ränta-på-ränta-effekt. En lönsam strategi ackumulerar kapital som stöder större eller mer frekventa positioner, och en förlorande kan få slut på likvida medel och sluta handla.
Att sätta NOCASHUPDATE till true låser kapitalet vid sitt ursprungliga värde under hela simuleringen. Affärer genererar fortfarande vinster och förluster, och equity-kurvan registrerar dem fortfarande, men det tillgängliga kapital som motorn använder rör sig aldrig. Varje affär tas mot samma kapitalbas, första affären som sista.
Inställningen isolerar den rena kvaliteten i handelslogiken från kontots utveckling. Två uppsättningar signaler kan jämföras på lika villkor, utan att tidiga förluster i en körning svälter ut den på kapital eller att tidiga vinster blåser upp den. Den förhindrar också att en tekniskt sund strategi stannar mitt i ett backtest för att en drawdown tillfälligt förbrukade de simulerade likvida medlen.
Instruktionen är en DEFPARAM, så den måste stå överst i koden före varje körbar sats.
Exempel
Exempel 1, Backtest med fast kapital (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
ENDIFEtt enkelt trendföljande system utvärderat på en konstant kapitalbas. Den redovisade vinsten speglar enbart signalerna, inte ränta-på-ränta-effekten från tidigare resultat.
Exempel 2, Att överleva en djup drawdown (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
ENDIFMed standardinställningen kan en lång förlustsvit tömma det simulerade kapitalet och i tysthet avbryta backtestet i förtid. Att hålla kapitalet konstant håller varje signal kvar i urvalet.
Exempel 3, Jämföra rå prestation mellan marknader (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
ENDIFAtt köra samma system med fast storlek på flera instrument med konstant kapital gör resultaten per marknad direkt jämförbara, eftersom ingen marknads equity-kurva återkopplar till dess positionstagning.
Vanliga fel och fallgropar
- Standardvärdet är
false. Att utesluta satsen innebär att kapitalet uppdateras affär för affär. En strategi som verkar sluta handla halvvägs genom ett backtest kan helt enkelt ha förbrukat sina simulerade likvida medel under standardbeteendet. - Equity-mått rör sig fortfarande. Inställningen låser det kontantbelopp som är tillgängligt för motorn, inte vinststatistiken. Vinster och förluster syns fortfarande i equity-kurvan och i
STRATEGYPROFIT, det är bara kapitalbasen som slutar reagera på dem. DEFPARAMplacering. Som varjeDEFPARAM, måste satsen stå före kodens första körbara rad, annars misslyckas kompileringen.- Ingen effekt på riktiga pengar. På ett live-konto i ProOrder speglar det verkliga kontosaldot alltid faktiska resultat. Parametern formar backtest-simuleringen, den är inte en riskkontroll i live.
Relaterade instruktioner
DEFPARAM, deklarerar exekveringsparametrar på strateginivå.CASH, position size baserad på ett kontantbelopp.STRATEGYPROFIT, strategins löpande vinst i valuta.CumulateOrders, gör att flera ordrar kan ackumuleras till en position.PRELOADBARS, antal historiska barer som laddas innan backtest startar.FLATBEFORE, blockerar positionstagning före en angiven tidpunkt.FLATAFTER, tvingar strategin flat efter en angiven tidpunkt.MAXORDER, den största storlek som tillåts för en enskild order.