Bli medlem i dag
ProBacktest/probacktest · proorder

NOCASHUPDATE

NOCASHUPDATE er en DEFPARAM-innstilling i ProBacktest som holder startkapitalen konstant under en backtest, og fjerner akkumulerende effekter fra strategiresultatene.

Syntaks

probuilder
DEFPARAM NOCASHUPDATE = true

Parametere

NavnTypeStandardBeskrivelse
NOCASHUPDATEboolskfalseNår true, justeres ikke startkapitalen av realiserte gevinster og tap under backtesten. Når false, oppdateres kapitalen for hver lukkede handel.

Slik fungerer det

Som standard holder en backtest et løpende kapitaltall: hver lukket handel legger til sin gevinst eller trekker fra sitt tap, og det oppdaterte beløpet begrenser hva strategien kan ha råd til neste gang. Over en lang simulering skaper dette en akkumulerende effekt. En lønnsom strategi akkumulerer kapital som støtter større eller hyppigere posisjoner, og en tapende strategi kan gå tom for kontanter og slutte å handle.

Å sette NOCASHUPDATE til true fryser kapitalen på startverdien for hele simuleringen. Handler gir fortsatt gevinst og tap, og equity-kurven registrerer dem fortsatt, men den tilgjengelige kontantbeholdningen motoren bruker, flytter seg aldri. Hver handel tas mot samme kapitalbase, både den første og den siste handelen.

Innstillingen isolerer den rene kvaliteten på handelslogikken fra kontoens utvikling. To signalsett kan sammenlignes på like vilkår, uten at tidlige tap i den ene kjøringen sulter den for kapital eller tidlige gevinster blåser den opp. Den hindrer også en teknisk solid strategi fra å stoppe midt i en backtest fordi en drawdown midlertidig brukte opp de simulerte kontantene.

Instruksjonen er en DEFPARAM, så den må stå øverst i koden før enhver kjørbar setning.

Eksempler

Eksempel 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

Et enkelt trendfølgende system evaluert på et konstant kapitalgrunnlag. Den rapporterte gevinsten gjenspeiler kun signalene, ikke den akkumulerende effekten av tidligere resultater.

Eksempel 2, Å overleve en dyp 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 standardinnstillingen kan en lang taperekke tømme den simulerte kapitalen og stoppe backtesten tidlig uten varsel. Å holde kontantene konstant beholder hvert signal i utvalget.

Eksempel 3, Sammenligning av rå ytelse på tvers av markeder (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

Å kjøre det samme systemet med fast størrelse på flere instrumenter med konstant kapital gjør resultatene per marked direkte sammenlignbare, siden ingen markeds equity-bane virker tilbake på posisjonstakingen.

Vanlige feil og fallgruver

  • Standardverdien er false. Å utelate setningen betyr at kapitalen oppdateres handel for handel. En strategi som ser ut til å slutte å handle underveis i en backtest kan rett og slett ha brukt opp de simulerte kontantene under standardoppførselen.
  • Equity-målene beveger seg fortsatt. Innstillingen fryser kontantbeholdningen som er tilgjengelig for motoren, ikke profittstatistikken. Gevinster og tap vises fortsatt i equity-kurven og i STRATEGYPROFIT, bare kapitalgrunnlaget slutter å reagere på dem.
  • DEFPARAM plassering. Som hver DEFPARAM, må setningen komme før den første kjørbare linjen i koden, ellers mislykkes kompileringen.
  • Ingen effekt på reelle penger. På en live ProOrder-konto gjenspeiler den faktiske kontantbeholdningen alltid de reelle resultatene. Parameteren former backtest-simuleringen, den er ikke en risikokontroll i live handel.
  • DEFPARAM, deklarerer utførelsesparametere på strateginivå.
  • CASH, posisjonsstørrelse basert på et kontantbeløp.
  • STRATEGYPROFIT, løpende gevinst for strategien i valuta.
  • CumulateOrders, tillater at flere ordrer akkumuleres til én posisjon.
  • PRELOADBARS, antall historiske barer som lastes inn før backtesten starter.
  • FLATBEFORE, blokkerer posisjonstaking før et fastsatt tidspunkt.
  • FLATAFTER, tvinger strategien flat etter et fastsatt tidspunkt.
  • MAXORDER, maksimal størrelse tillatt for en enkelt ordre.