Word nu lid
ProBacktest/probacktest · proorder

NOCASHUPDATE

NOCASHUPDATE is een DEFPARAM-instelling in ProBacktest die het startkapitaal constant houdt tijdens een backtest, waardoor samengestelde effecten uit de strategieresultaten verdwijnen.

Syntaxis

probuilder
DEFPARAM NOCASHUPDATE = true

Parameters

NaamTypeStandaardBeschrijving
NOCASHUPDATEbooleanfalseWanneer true, wordt het startkapitaal tijdens de backtest niet aangepast met gerealiseerde winsten en verliezen. Wanneer false, wordt het kapitaal bij elke gesloten trade bijgewerkt.

Hoe het werkt

Standaard houdt een backtest een lopend kapitaalbedrag bij: elke gesloten trade telt zijn winst erbij op of trekt zijn verlies eraf, en het bijgewerkte bedrag bepaalt wat de strategie zich daarna kan veroorloven. Over een lange simulatie ontstaat hierdoor een samengesteld effect. Een winstgevende strategie bouwt kapitaal op dat grotere of frequentere posities ondersteunt, en een verlieslatende kan zonder geld komen te zitten en stoppen met traden.

Instellen NOCASHUPDATE naar true zet het kapitaal voor de hele simulatie vast op de beginwaarde. Trades leveren nog steeds winsten en verliezen op, en de equity curve legt ze nog steeds vast, maar het beschikbare geld dat de engine gebruikt beweegt nooit. Elke trade wordt tegen dezelfde kapitaalbasis genomen, de eerste trade net zo goed als de laatste.

De instelling isoleert de ruwe kwaliteit van de handelslogica van het verloop van de rekening. Twee sets signalen kunnen op gelijke voet worden vergeleken, zonder dat vroege verliezen in de ene run hem van kapitaal beroven of vroege winsten hem opblazen. Het voorkomt ook dat een technisch degelijke strategie halverwege de backtest stopt omdat een drawdown het gesimuleerde kasgeld tijdelijk had opgebruikt.

De instructie is een DEFPARAM, dus hij moet bovenaan de code staan, vóór elke uitvoerbare instructie.

Voorbeelden

Voorbeeld 1, Backtest met vast kapitaal (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

Een eenvoudig trendvolgend systeem beoordeeld op een constante kapitaalbasis. De gerapporteerde winst weerspiegelt alleen de signalen, niet het samengestelde effect van eerdere resultaten.

Voorbeeld 2, Een diepe drawdown overleven (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

Met de standaardinstelling kan een lange reeks verliezen het gesimuleerde kapitaal uitputten en de backtest stilzwijgend vroegtijdig stoppen. Het kasgeld constant houden houdt elk signaal in de steekproef.

Voorbeeld 3, Ruwe prestaties over markten vergelijken (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

Hetzelfde systeem met vaste positiegrootte op meerdere instrumenten draaien met constant kapitaal maakt de resultaten per markt direct vergelijkbaar, omdat het equity-verloop van geen enkele markt terugkoppelt op het innemen van posities.

Veelvoorkomende fouten en valkuilen

  • De standaard is false. De instructie weglaten betekent dat het kapitaal trade voor trade wordt bijgewerkt. Een strategie die halverwege een backtest lijkt te stoppen met traden, heeft onder het standaardgedrag misschien simpelweg zijn gesimuleerde kasgeld opgebruikt.
  • Equity-maatstaven bewegen nog steeds. De instelling bevriest het geld dat voor de engine beschikbaar is, niet de winststatistieken. Winsten en verliezen verschijnen nog steeds in de equity curve en in STRATEGYPROFIT, alleen de kapitaalbasis reageert er niet meer op.
  • DEFPARAM plaatsing. Zoals elke DEFPARAM, moet de instructie voor de eerste uitvoerbare regel van de code staan, anders mislukt het compileren.
  • Geen effect op live geld. In een live ProOrder-account weerspiegelt het werkelijke kassaldo altijd de feitelijke resultaten. De parameter bepaalt de backtestsimulatie, het is geen risicobeheersing voor live handel.
  • DEFPARAM, declareert uitvoeringsparameters op strategieniveau.
  • CASH, position sizing op basis van een geldbedrag.
  • STRATEGYPROFIT, lopende winst van de strategie in valuta.
  • CumulateOrders, staat toe dat meerdere orders tot één positie samenkomen.
  • PRELOADBARS, aantal historische bars dat wordt geladen voordat de backtest start.
  • FLATBEFORE, blokkeert het innemen van posities vóór een ingesteld tijdstip.
  • FLATAFTER, dwingt de strategie flat na een ingesteld tijdstip.
  • MAXORDER, maximale grootte die voor één order is toegestaan.