Bli medlem idag
ProBacktest/probacktest · proorder

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

probuilder
DEFPARAM NOCASHUPDATE = true

Parametrar

NamnTypStandardBeskrivning
NOCASHUPDATEbooleskfalseNä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)

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

Ett 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)

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

Med 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)

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

Att 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.
  • DEFPARAM placering. Som varje DEFPARAM, 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.
  • 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.