Algorithmic Trading Tips 20.
MIT MONTE CARLO NOISE ZUR ROBUSTHEIT.
Stellen Sie die Robustheit Ihrer Handelsstrategie auf den Prüfstand.
Diese Ausgabe zeigt auf, wie Sie mithilfe der Monte Carlo Simulation die Robustheit Ihrer Handelsstrategie überprüfen können. Hierzu wird die Datenhistorie in Tradesignal mit einem Rauschanteil versehen. Der Vorgang lässt sich mithilfe zufällig generierter Werte beliebig oft wiederholen und zeigt dadurch, wie stabil die Ergebnisse Ihrer Strategie ausfallen, wenn sich die Datenreihe verändert.
ARBEITSBEREICH LADEN. (Für Anwender mit Refinitv Eikon.)
ARBEITSBEREICH LADEN. (Für Anwender mit Bloomberg.)
Mit dem Download erkennen Sie die unten aufrufbaren Nutzungsbedingungen an.
Das Problem des Curve Fitting.
Die Rechenpower heutiger Computer ermöglicht das Backtesten unzähliger Ideen. Gleichzeitig lassen sich dadurch diejenigen Strategien (und Parameter) identifizieren, die in der Vergangenheit am besten abgeschnitten haben; dadurch werden die Strategieparameter zu einem beträchtlichen Teil an die Kurshistorie („curve“) angepasst („fitting“). Dieser Effekt der Überanpassung lässt sich nie vollständig eliminieren, schließlich basiert die Entwicklung der Handelsstrategien gerade auf der Untersuchung von Mustern, die sich in der Vergangenheit bewährt haben.
Eine Überanpassung („Overfitting“) ist allerdings ein Problem. Der Grund: Je stärker die Anpassung an die Vergangenheit, desto besser die historische Performance. Umso höher aber auch die Gefahr des Misserfolgs in der Zukunft, schließlich werden sich die Kursbewegungen der Vergangenheit nicht exakt in der Zukunft wiederholen.
Zu starke Optimierung oder nicht? Der Robustheitstest liefert die Antwort.
Die größte Sorge aller systematischen Trader ist, dass ihre Handelsstrategie nicht mehr funktioniert, sobald sich die Marktbedingungen ändern. Der Einsatz sogenannter Robustheitschecks gibt Tradern Informationen darüber, wie „immun“ die Handelsstrategie gegenüber Veränderungen der Preisentwicklung ist.
Neben der Beschränkung auf möglichst wenige Parameter innerhalb der Handelsstrategie und dem Test auf Out-of-Sample-Daten (d.h. „unbekannten“ Daten, die nicht für das Auffinden des besten Parametersets verwendet wurden) gibt es drei Testverfahren, die sicherstellen, dass die Strategie nicht zu sehr angepasst wurde und damit gegenüber Veränderungen des zukünftigen Kursverhalten Robustheit zeigt.
Der erste Test untersucht die Performance der Handelsstrategie auf unterschiedlichen Märkten bzw. Wertpapieren, die einen ähnlichen Charakter haben wie jenes, für das die Handelsstrategie konzipiert wurde. Betrachten wir exemplarisch eine Strategie, die den Rohstoff A handeln soll. Wenn diese beim Rohstoff A gute Ergebnisse lieferte (sowohl In Sample als auch Out of Sample), beim verwandten Rohstoff B dagegen versagte, ist dies ein Warnhinweis, dass die Strategie für zukünftige Verluste anfällig sein könnte. Man kann zwar nicht erwarten, dass eine Handelsstrategie in allen Märkten profitabel ist, sie sollte aber zumindest eine brauchbare Performance in allen verwandten Märkten generieren. Schließlich werden diese Märkte von denselben Marktteilnehmern gehandelt und verfügen somit auch über gemeinsame Merkmale.
Der zweite und am häufigsten genutzte Robustheitstest überprüft die Performance einer Handelsstrategie, wenn deren Parameter geändert werden (siehe Ausgabe How To 03 „Stresstesting“). Der Optimizer von Tradesignal bietet alle Möglichkeiten für solch einen Test. Hierzu ein einfaches Beispiel: Zeigt eine SMA Crossover Strategie sehr gute Ergebnisse bei Verwendung eines 5- und 35-Perioden-SMA, während die Variante 6/36 nur ungenügende Resultate generiert, so ist dies ein indirekter Hinweis darauf, dass die Kombination 5/35 überoptimiert ist. Die Wahrscheinlichkeit, dass diese Handelsstrategie in Zukunft scheitern dürfte, ist somit deutlich erhöht.
Der dritte Robustheitstest – dieser wird nachfolgend im Fokus stehen – untersucht die Performance einer Handelsstrategie, wenn die zugrundeliegenden Kursdaten geändert werden. Hierbei handelt es sich um einen anspruchsvolleren Test, da zahlreiche Möglichkeiten der Datenmodifizierung existieren. Zur Durchführung dieses Tests bedarf es einer hohen Zahl von Backtests mithilfe der Monte Carlo Simulation.
Monte Carlo Simulation
Die Monte Carlo Simulation ist ein Verfahren aus der Stochastik, bei der mithilfe vieler gleichartiger Zufallsexperimente versucht wird, ein vorgegebenes Problem numerisch zu lösen. Um diese Testvariante durchzuführen, muss zunächst definiert werden, welche Art von Preisänderungen für den Test der Strategie zum Einsatz kommen soll. Darüber hinaus muss sichergestellt werden, dass möglichst viele (sehr kleine bis große) Änderungen implementiert werden. Anschließend wird die Handelsstrategie auf Basis dieser modifizierten Daten Backtests unterzogen. Im letzten Schritt wird das Ausmaß der Performanceveränderung im Vergleich zum Umfang der getätigten Preisänderungen untersucht.
Nachfolgend möchte ich Ihnen ein Beispiel für diesen Test in Tradesignal aufzeigen.
Modifizierung der Kursreihe mit Rauschen auf Basis der ATR
Betrachten wir ein Handelsinstrument namens SYMBOL. Wir möchten ein neues künstliches Instrument mit dem Namen SYMBOLnew erstellen, indem wir die Werte für das Open, High, Low, Close für jede Bar des SYMBOL verändern.
Die neuen Werte (OPENnew, HIGHnew, LOWnew and CLOSEnew) entsprechen den Originaldaten, allerdings wird ein zufälliger Bruchteil der Average True Range (ATR) addiert bzw. subtrahiert – unter der Voraussetzung, dass alle neuen Werte positiv und die logische Reihenfolge beibehalten wird (d.h. LOWnew ist positiv und entspricht dem Minimum, HIGHnew entspricht dem Maximum).
Um das SYMBOLnew in Tradesignal zu erstellen, bedienen wir uns eines Indikators, der die modifizierten Werte für den jeweiligen Open-, High-, Low- und Close-Kurs konstruieren und anschließend als Candlestick Chart wiedergeben wird. Ich habe solch einen Indikator mit dem Namen „Noisy Symbol“ programmiert. Sie können ihn einfach per Drag&Drop in einen Chart mit einem Handelsinstrument einfügen, das modifizierte SYMBOLnew wird dann in einem Subchart dargestellt.
Folgende Eingabeparameter stehen beim Indikator zur Verfügung:
ATR_Period
Dieser Parameter definiert die Periode der Average True Range (Standard: 1). Hierbei kommt die in Tradesignal vorinstallierte Funktion AvgTrueRange zum Einsatz.
ATR_FactorCutoff
Dieser Parameter bestimmt den maximalen Anteil des ATR, der zur Erzeugung des Rauschanteils herangezogen wird (Standard: 0,3). Null bedeutet in diesem Fall, dass das Noisy Symbol exakt der zugrundeliegenden Datenreihe gleicht. Bei der Wahl von 0,3 beträgt das aus den Zufallszahlen berechnete Rauschen, das auf den Kurs (Open, High, Low, Close) addiert bzw. subtrahiert wird, maximal das 0,3fache der Average True Range.
MaintainOCorder
Dieser Parameter bestimmt darüber, ob die ursprüngliche Reihenfolge von Open- und Close-Kursen bei der Monte Carlo Simulation beibehalten werden soll (Standard: false). Wird dieser Parameter auf „true“ gesetzt, werden Eröffnungs- und Schlusskurse in der ursprünglichen Reihenfolge beibehalten.
Iterations
Dies ist ein Dummy Input, der im Optimizer zur Durchführung der Monte Carlo Simulation zum Einsatz kommt. Beim Einfügen des Indikators in einem Chart hat der Wert dieses Inputs keinerlei Auswirkung.
TIPP:
Abb. 1 zeigt das Noisy Symbol mit den Standardparametern angewandt für den Tageschart der Adidas Aktie. Bei jedem Durchgang (z.B. wenn einer der Parameter geändert oder der Reload-Button des Noisy Symbol gedrückt wird) wird eine neue “verrauschte” Version der Adidas-Aktie erstellt.
Da das Noisy Symbol kein statisches Symbol ist, sondern ein Indikator, der sich bei jeder Kalkulation ändert, kann nun der Optimizer in Tradesignal zur Durchführung einer Monte Carlo Simulation eingesetzt werden. Dadurch werden Performanceveränderungen der jeweiligen Handelsstrategie sichtbar, wenn ATR-Rauschen zur Kursreihe hinzugefügt wird.Beim Einfügen des Indikators in einem Chart hat der Wert dieses Inputs keinerlei Auswirkung.
ABB. 1: TAGESCHART DER ADIDAS AKTIE IM ORIGINAL (OBEN) VS. NOISY SYMBOL MIT STANDARDEINSTELLUNGEN (UNTEN).
PRAXISBEISPIEL:
DURCHFÜHRUNG EINER MONTE CARLO SIMULATION.
Betrachten wir nun exemplarisch den Tageschart der Adidas-Aktie und die vorinstallierte Handelsstrategie “Adaptive MA Cross – Entry” mit Standardeinstellungen.
- 01. Zunächst öffnen wir den Tageschart von Adidas und ziehen den Indikator “Noisy Symbol” per Drag&Drop in den Chart.
Zu sehen ist nun die mit Rauschen versehen Version des Adidas-Charts. - 02. Anschließend ziehen den Indikator “Noisy Symbol” per Drag&Drop in den Chart. Zu sehen ist nun die mit Rauschen versehene Version des Adidas-Charts. Bei Betätigung des Reload Buttons (oder einer Änderung der Eingabeparameter des Noisy Symbol) wird das Noisy Symbol neu berechnet und eine neue, “verrauschte” Version des Adidas-Charts erstellt.Alle Handelssignale werden dementsprechend angepasst und im Chart angezeigt.
ABB. 2: ANWENDUNG EINER HANDELSSTRATEGIE AUF DAS NOISY SYMBOL PER DRAG AND DROP.
- 03. Wir öffnen Optimizer in der Werkzeugleiste, und wählen dort den „Brute Force“ Modus. Bei den zu optimierenden Parametern wählen wir ATR_FactorCutoff und Iterations.

ABB. 3: AUSWAHL DER PARAMETER IM OPTIMIZER.
- 04. Im nächsten Schritt legen wir das Start- und Enddatum fest und definieren, in welchen Schritten die beiden Parameter getestet werden sollen:

- 05. Wir starten den Optimierungsprozess, der nun als Monte Carlo Simulation ausgeführt wird. Hierbei wird also die Strategie “Adaptive MA Cross – Entry“ auf insgesamt 20.000 Versionen des verrauschten Adidas Charts getestet. Abbildung 4 zeigt die Verteilung des Gesamtnettogewinns dieser Optimierung als Heatmap. Die Optimierung wurde auf Basis von 2.000 Bars historischer Daten durchgeführt.

ABB. 4: STREUUNG DER GEWINNE BEI DER MONTE CARLO SIMULATION DER ADIDAS-AKTIE.
Die farbliche Visualisierung der Heatmap bietet einen schnellen Überblick der Streuung der Profitabilität einer Handelsstrategie, wenn diese auf Tausenden, mit Rauschen versehenen Varianten der Original-Kursreihe angewandt wurde. Im vorliegenden Beispiel wurden insgesamt 20.000 Durchläufe generiert.
VIELZAHL VON MODIFIZIERUNGSMÖGLICHKEITEN.
Die vorgestellte Methode eröffnet Ihnen unzählige Möglichkeiten. Sie können den Code des Noisy Symbol Indikators “frisieren” und dadurch jede erdenkliche Art der Änderung der Original-Datenreihe herbeiführen, um die Robustheit einer Handelsstrategie aus unterschiedlichen Blickwinkeln zu testen. Selbstverständlich lassen sich auch neue Kennzahlen zur Steuerung der Monte Carlo Simulation erstellen. Anstatt wie üblich den Nettogewinn zu betrachten, legen wir den Fokus nun auf den maximalen Drawdown einer Handelsstrategie. Folgende drei Variablen werden hierfür am Anfang Ihres Strategie-Codes eingefügt:
var: HHsf(0),OEq(0);
var: AllTrades::MaxDD(0),TMAXDD(0);
OEq:=OpenEquity;
HHsf:=Maxlist(OEq,HHsf);
If (HHsf-OEq>TMAXDD) then TMAXDD:=HHsf-OEq;
if IsLastBar then AllTrades::MaxDD:=-TMAXDD;
Meta: Synopsis("Adds ATR noise to the price data"),
Categories("Monte Carlo");
Input: ATR_Period(1,1),
ATR_FactorCutOff(0.3,0.0),
MaintainOCorder(FALSE),
Iterations (1,1);
var: nO,nH,nL,nC,
NoiseAbsSpan(0),FoundPrice(FALSE),noise,randsign,x;
//Set Noise Span
NoiseAbsSpan:=AvgTrueRange(ATR_Period)*ATR_FactorCutOff;
//Randomizer
x:=Iterations;
{OPEN}
FoundPrice:=FALSE;
While FoundPrice=FALSE do
begin
If NoiseAbsSpan=0 then noise:=0 else noise:=RANDOM(NoiseAbsSpan);
If RANDOM(1)>0.5 then randsign:=+1 else randsign:=-1;
nO:=randsign*noise+OPEN;
If nO>0 then FoundPrice:=TRUE;
end;
{HIGH}
If NoiseAbsSpan=0 then noise:=0 else noise:=RANDOM(NoiseAbsSpan);
If RANDOM(1)>0.5 then randsign:=+1 else randsign:=-1;
nH:=MaxList(randsign*noise+HIGH,nO);
{LOW}
FoundPrice:=FALSE;
While FoundPrice=FALSE do
begin
If NoiseAbsSpan=0 then noise:=0 else noise:=RANDOM(NoiseAbsSpan);
If RANDOM(1)>0.5 then randsign:=+1 else randsign:=-1;
nL:=MinList(randsign*noise+LOW,nO);
If (nL>0) then FoundPrice:=TRUE;
end;
{CLOSE}
If MaintainOCorder and C=O then nC:=nO
else
begin
FoundPrice:=FALSE;
While FoundPrice=FALSE do
begin
If NoiseAbsSpan=0 then noise:=0 else noise:=RANDOM(NoiseAbsSpan);
If RANDOM(1)>0.5 then randsign:=+1 else randsign:=-1;
nC:=MaxList(MinList(randsign*noise+CLOSE,nH),nL);
FoundPrice:=TRUE;
If MaintainOCorder AND ((C-O)*(nC-nO))<0 then FoundPrice:=FALSE;
end;
end;
//Draw New Symbol
DRAWCANDLESTICK(nO,nH,nL,nC,COLORWHITE,COLORRED,COLORBLUE);

ABB. 5: HEATMAP DER HÄUFIGKEITSVERTEILUNG MIT WEITERER ANALYSE.
Die Ergebnisse der Monte Carlo Simulation können im CSV Format exportiert und damit für weitergehende Analysezwecke in MS Excel verwendet werden. Das vorliegende Beispiel wurde auf Basis der Ergebnisse in Excel erstellt.
DATENEXPORT ERMÖGLICHT WEITERE ANALYSEOPTIONEN.
Zum Schluss können alle Ergebnisse der Monte Carlo Simulation durch einen Klick auf „Export Data“ im CSV-Format exportiert und in MS Excel für weitere statistische Analysen verwendet werden. Abbildung 4 zeigt exemplarisch eine Heatmap der Häufigkeitsverteilung, die auf Basis der Monte Carlo Simulation für die Adidas-Aktie mithilfe von Excel erstellt wurde.