Jetzt beitreten
ProBacktest/probacktest · proorder

NOCASHUPDATE

NOCASHUPDATE ist eine DEFPARAM-Einstellung in ProBacktest, die das Anfangskapital während eines Backtests konstant hält und so Zinseszinseffekte aus den Strategieergebnissen entfernt.

Syntax

probuilder
DEFPARAM NOCASHUPDATE = true

Parameter

NameTypStandardBeschreibung
NOCASHUPDATEBooleanfalseWenn true, wird das Anfangskapital im Backtest nicht um realisierte Gewinne und Verluste angepasst. Wenn false, aktualisiert sich das Kapital mit jedem geschlossenen Trade.

So funktioniert es

Standardmäßig führt ein Backtest eine laufende Kapitalgröße: jeder geschlossene Trade addiert seinen Gewinn oder subtrahiert seinen Verlust, und der aktualisierte Betrag begrenzt, was sich die Strategie als Nächstes leisten kann. Über eine lange Simulation entsteht dadurch ein Zinseszinseffekt. Eine profitable Strategie akkumuliert Kapital, das größere oder häufigere Positionen trägt, und eine verlustreiche kann ihr Geld aufbrauchen und den Handel einstellen.

Setzen NOCASHUPDATE zu true friert das Kapital für die gesamte Simulation auf seinem Anfangswert ein. Trades erzeugen weiterhin Gewinne und Verluste, und die Equity-Kurve zeichnet sie weiterhin auf, aber das von der Engine genutzte verfügbare Kapital bewegt sich nie. Jeder Trade wird gegen dieselbe Kapitalbasis eingegangen, der erste wie der letzte.

Die Einstellung isoliert die rohe Qualität der Handelslogik vom Verlauf des Kontos. Zwei Signalmengen können auf gleicher Basis verglichen werden, ohne dass frühe Verluste in einem Durchlauf ihm das Kapital entziehen oder frühe Gewinne es aufblähen. Sie verhindert außerdem, dass eine technisch solide Strategie mitten im Backtest stoppt, weil ein Drawdown das simulierte Geld zeitweise aufgebraucht hat.

Der Befehl ist ein DEFPARAM, daher muss er am Anfang des Codes vor jeder ausführbaren Anweisung stehen.

Beispiele

Beispiel 1, Backtest mit festem 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

Ein einfaches trendfolgendes System, ausgewertet auf einer konstanten Kapitalbasis. Der ausgewiesene Gewinn spiegelt allein die Signale wider, nicht den Zinseszinseffekt früherer Ergebnisse.

Beispiel 2, Einen tiefen Drawdown überstehen (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

Mit der Standardeinstellung könnte eine lange Verlustserie das simulierte Kapital aufbrauchen und den Backtest stillschweigend vorzeitig beenden. Das Kapital konstant zu halten behält jedes Signal in der Stichprobe.

Beispiel 3, Rohe Performance über Märkte hinweg vergleichen (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

Dasselbe System mit fester Größe auf mehreren Instrumenten mit konstantem Kapital laufen zu lassen, macht die Ergebnisse pro Markt direkt vergleichbar, da der equity-Verlauf keines Marktes auf dessen Positionseröffnung zurückwirkt.

Häufige Fehler und Stolperfallen

  • Der Standard ist false. Das Weglassen der Anweisung bedeutet, dass sich das Kapital Trade für Trade aktualisiert. Eine Strategie, die mitten in einem Backtest den Handel einzustellen scheint, hat unter dem Standardverhalten möglicherweise einfach ihr simuliertes Geld aufgebraucht.
  • Equity-Kennzahlen bewegen sich dennoch. Die Einstellung friert das der Engine verfügbare Kapital ein, nicht die Gewinnstatistik. Gewinne und Verluste erscheinen weiterhin in der Equity-Kurve und in STRATEGYPROFIT, nur die Kapitalbasis reagiert nicht mehr darauf.
  • DEFPARAM Platzierung. Wie jeder DEFPARAM, muss die Anweisung vor der ersten ausführbaren Zeile des Codes stehen, sonst schlägt die Kompilierung fehl.
  • Keine Auswirkung auf echtes Geld. In einem Live-ProOrder-Konto spiegelt der reale Barbestand immer die tatsächlichen Ergebnisse wider. Der Parameter formt die Backtest-Simulation, er ist keine Live-Risikokontrolle.
  • DEFPARAM, deklariert Ausführungsparameter auf Strategieebene.
  • CASH, Positionsgröße auf Basis eines Geldbetrags.
  • STRATEGYPROFIT, laufender Gewinn der Strategie in Währung.
  • CumulateOrders, erlaubt, dass sich mehrere Orders zu einer Position aufaddieren.
  • PRELOADBARS, Anzahl der historischen Bars, die vor dem Start des Backtests geladen werden.
  • FLATBEFORE, verhindert das Eröffnen von Positionen vor einer festgelegten Zeit.
  • FLATAFTER, zwingt die Strategie nach einer festgelegten Zeit in den positionslosen Zustand.
  • MAXORDER, maximal zulässige Größe für eine einzelne Order.