Die erste Strategie ist durchgelaufen. Jetzt untersuchst du, ob die simulierten Trades tatsächlich aus den vorgegebenen Regeln folgen und was die angezeigten Ergebnisse bedeuten.

Die Demodaten des Buchs sind eine künstliche Kursfolge. Ihre Ergebnisse dienen dazu, die Funktionsweise des Programms zu prüfen. Sie bestimmen keine erwartbare Rendite an einem echten Markt.

Sieh dir zuerst einen Trade an

Führe crossover_strategy.py mit den Längen 5 und 20 aus. Warte bis zum Ende und wähle im Panel unter dem Chart Trades. Ist das Panel geschlossen, öffne es mit dem Pfeil rechts.

Die Tabelle zeigt die Ein- und Ausstiegsdaten eines Trades. Bei einem Long-Trade ist der Einstieg ein Kauf und der Ausstieg ein Verkauf.

SpalteWas zeigt sie?
TradeNummer des Trades und Einstiegskennung
Entry timeZeitpunkt der Einstiegsausführung
Entry priceAusführungskurs des Einstiegs
Exit timeZeitpunkt der Ausstiegsausführung
Exit priceAusführungskurs des Ausstiegs
QtyMenge des Trades
ProfitGeldbetrag des Ergebnisses dieses geschlossenen Trades
Profit %Prozentuales Ergebnis des Trades
Unter dem Strategiechart der PyneIDE ist die Tabelle Trades mit Zeitpunkten, Kursen und Ergebnissen geöffnet.
In der Tabelle Trades lassen sich ausgeführte Ein- und Ausstiege einzeln prüfen.

Klicke auf eine Trade-Zeile. Du kannst den zugehörigen Zeitraum im Chart suchen. Prüfe sowohl die Kreuzung vor dem Einstieg als auch die Kreuzung, die die Schließung ausgelöst hat.

Das ursprüngliche Programm hat weder commission_value noch slippage festgelegt. Der Basislauf enthält daher nicht die Kosten, die wir gleich ergänzen. Prüfe zunächst in diesem einfachen Lauf Richtung, Zeitpunkt und Menge.

Berechne das Ergebnis eines einfachen Trades

Kaufst du eine Einheit für 100 und verkaufst sie für 103, beträgt die Kursdifferenz 3. Bei einem Punktwert von eins und ohne Kosten ist das auch der Geldbetrag des Ergebnisses.

Allgemein ergibt sich das Kursergebnis eines Long-Trades aus:

(Ausstiegskurs − Einstiegskurs) × Menge × Punktwert

Der Punktwert gehört zu den Marktmetadaten. Er beschreibt bei einer Position von einer Einheit den Geldwert einer Kursänderung um eine Einheit. In den DEMO-Daten des Buchs beträgt er 1.

Provisionen verringern das Nettoergebnis des Trades. Slippage verändert den Ausführungskurs und steckt deshalb bereits in der Kursdifferenz. Dieselbe Slippage musst du nicht noch einmal von den geänderten Kursen abziehen.

Die Ansicht Performance

Performance zeigt die Kapitalentwicklung des gesamten Laufs. Auf der Oberfläche findest du diese Felder:

  • Cumulative P&L: Veränderung des Kapitals gegenüber dem Anfangskapital;
  • Max drawdown: größter Rückgang gegenüber einem vorherigen Höchststand der betrachteten Kapitalkurve;
  • Final equity: Kapital auf der letzten verarbeiteten Kerze;
  • Max run-up: größter Anstieg gegenüber einem vorherigen Tiefstand des Kapitals.
Die Performance-Ansicht der PyneIDE zeigt Cumulative P&L, Max drawdown, Final equity und die Kapitalkurve.
Performance zeigt die Kapitalkurve und die zusammenfassenden Werte des gesamten Laufs.

Equity kann auch den veränderlichen Wert einer offenen Position berücksichtigen. Deshalb entspricht der letzte Kapitalwert nicht unbedingt der Summe der Gewinne geschlossener Trades plus Anfangskapital. Prüfe auch eine am Datenende noch offene Position.

Betrachte neben dem Endpunkt auch die Zwischenabschnitte der Kapitalkurve. Zum gleichen Endergebnis können unterschiedliche Rückgänge und lange Verlustphasen führen.

Die Ansicht Stats

Stats zeigt die detaillierte Statistik am Ende des Laufs. Total Trades hilft, die Anzahl der geschlossenen Trades zu prüfen, Net Profit deren gesamtes Nettoergebnis.

Profit Factor ist das Verhältnis der Gesamtergebnisse gewinnender und verlierender Trades: Gesamtgewinn geteilt durch den absoluten Gesamtverlust. Gibt es keinen Verlusttrade, ist der Quotient keine gewöhnliche endliche Vergleichszahl.

Die Trefferquote beschreibt, welcher Anteil der geschlossenen Trades profitabel ist. Sie bestimmt den Gesamtgewinn nicht allein. Wenige große Verluste können viele kleine Gewinne übersteigen.

Aus wenigen Trades kann leicht eine irreführende Zusammenfassung entstehen. Behalte die Gesamtzahl stets neben den anderen Kennzahlen im Blick und untersuche auch einzelne Verlusttrades.

Kosten unter Properties

Öffne die Strategieeinstellungen über das Zahnrad Strategy properties im unteren Chartpanel und wähle Properties. Hier kannst du Anfangskapital, Menge und Kosten ändern.

Der Vergleich der folgenden beiden Läufe ist eine Übung. Die angegebenen Kosten gehören zum Beispiel; für einen echten Markt musst du passende Kosten gesondert festlegen.

  1. Prüfe unter Initial capital den Wert 10000 und unter Order size die Einstellung 1 Contracts.
  2. Stelle Commission auf 0,1 und wähle als Einheit % of order value. In das Feld kannst du den Wert auch als 0.1 eingeben.
  3. Stelle Slippage auf 2 Ticks.
  4. Speichere mit Save, starte anschließend Run Pyne code und warte bis zum Ende der Ausführung.
Die Strategieeinstellungen zeigen den Tab Properties mit den Feldern Commission und Slippage.
Properties verwendet für Provisionen Prozent und für Slippage Ticks.

0,1 Prozent sind nicht 10 Prozent: Das Feld ist in Prozenteinheiten angegeben. Bei einer Ausführung im Wert von 100 bedeutet das eine Provision von 0,1. Sowohl Einstieg als auch Ausstieg sind Ausführungen und können jeweils Kosten verursachen.

Ein Tick ist die kleinste Kursstufe eines Markts. In den DEMO-Metadaten beträgt sie 0,01; zwei Ticks bedeuten also 0,02 Kursänderung. Slippage verschiebt den Ausführungskurs einer Market-Order in die für die Strategie ungünstige Richtung.

Auf anderen Märkten können Tickgröße und Punktwert abweichen. Übertrage die Kosteninterpretation aus DEMO nicht automatisch auf ein anderes Instrument.

Auch die Ausführungseinstellung gehört zum Experiment

On bar close unter Fill orders beeinflusst die zeitliche Ausführung von Market-Orders. Lasse es für die Basisstrategie des Buchs ausgeschaltet, damit eine aus dem Signal erzeugte Order bei der nächsten Eröffnung ausgeführt wird.

After order is filled kann eine Neuberechnung nach der Ausführung anfordern. Using bar magnifier kann Ausführungen innerhalb der Kerze anhand feinerer Daten eines kleineren Zeitrahmens untersuchen. Das verändert die Ausführungsbedingungen. Lasse beides beim Vergleich mit dem Basislauf ausgeschaltet.

Schon nach der Änderung einer einzigen Einstellung handelt es sich um ein neues Laufergebnis. Änderst du gleichzeitig Länge, Menge, Kosten und Ausführungsmodus, kannst du nicht feststellen, welche Änderung den Unterschied verursacht hat.

Halte fest, was du verglichen hast

Mit Open trades output CSV in der Chart-Werkzeugleiste öffnest du den Trade-Export. Open plot output CSV öffnet die Tabelle der gezeichneten Werte. Du findest die Ergebnisdateien auch unter Output im Projekt.

Kopiere einen Export, den du behalten möchtest, vor dem erneuten Start desselben Programms unter einen anderen Dateinamen. Der Ergebnisname allein kennzeichnet nicht sämtliche Einstellungen.

Notiere für dich mindestens diese Angaben:

LaufDatenSchnelle/langsame LängeMengeProvisionSlippage
BasislaufDEMO5 / 201 Einheit0 %0 Ticks
Mit KostenDEMO5 / 201 Einheit0,1 %2 Ticks

Trage auch die erhaltenen Ergebnisse daneben ein. Fülle die Tabelle in deinen eigenen Notizen anhand der tatsächlichen Läufe aus.

Probiere es selbst aus

Vergleiche denselben Trade im Lauf ohne Kosten und im Lauf mit Kosten. Prüfe Einstiegs- und Ausstiegskurs sowie Gewinn. Was hat sich verändert, und was ist an der Signalregel gleich geblieben?

Lösung der Aufgabe

Die gleitenden Durchschnitte und ihre Kreuzungen werden nicht aus Provision oder Slippage berechnet. Die grundlegenden Signale ändern sich deshalb nicht. Die Kurse von Markteinstieg und Marktschließung können durch Slippage ungünstiger sein. Provision verringert zusätzlich das Nettoergebnis.

Die Läufe lassen sich direkt vergleichen, wenn Inputs, Menge, Daten und Ausführungsmodus gleich sind und die Strategie in beiden Fällen ihre Orders ausführen kann.

Andere Daten auswählen

Nach der Demo kannst du mit dem Daten-Downloader der PyneIDE eigene Marktdaten anlegen. Neue Daten können andere Kurse, Tickgrößen, Mengengrenzen und Trades ergeben. Untersuche zuerst die Daten und vergleiche erst danach Ergebnisse.

  1. Bewege in der linken Ansicht Pyne den Mauszeiger auf die Überschrift Data. Klicke auf das erscheinende Symbol Download Data…, eine Wolke mit nach unten zeigendem Pfeil. Der Symbol Browser öffnet sich. Den gleichen Menüpunkt erreichst du auch per Rechtsklick auf Data.
  2. Wähle einen Anbieter unter Provider. Die Abbildung verwendet ccxt; hier wählst du unter Broker auch die konkrete Datenquelle.
  3. Gib den gesuchten Markt in das Filterfeld ein. In der Abbildung wählen wir den Spotmarkt BTC/USD der Quelle coinbase. Achte auf den vollständigen Symbolnamen: Zeilen mit ähnlichem Präfix können unterschiedliche Märkte bezeichnen.
  4. Stelle Timeframe auf 1D und From auf 365 days back. now unter To fordert Daten bis zum Downloadzeitpunkt an.
  5. Klicke auf Download und warte, bis der Download abgeschlossen ist.
Der Symbol Browser der PyneIDE zeigt den Spotmarkt BTC/USD der Quelle coinbase beim Anbieter ccxt und den Tageszeitrahmen.
Im Symbol Browser bestimmen Datenquelle, Markt, Zeitrahmen und Zeitraum gemeinsam die herunterzuladenden Daten.

In den Informationen rechts ist mintick die Tickgröße, pointvalue der Punktwert und mincontract die Mindestmenge. Prüfe diese Werte auch für deine eigenen Daten. Verfügbarkeit und erforderlicher Zugang hängen vom Anbieter ab. Das Abrufen der hier ausgewählten Daten bedeutet keine Verwendung eines Handelskontos.

Die heruntergeladenen Daten erscheinen unter Data im Projekt. Durch einen Klick auf den Marktnamen oben im Strategiechart öffnest du ebenfalls die Datenauswahl und kannst die neuen Daten wählen. Der Chart wird dann neu berechnet. Prüfe weiterhin die Inputs und Strategieeigenschaften.

Der Downloadzeitraum garantiert keine bestimmte Kerzenanzahl: Verfügbare Datenlänge, Handelstage und fehlende Zeiträume spielen ebenfalls eine Rolle. Ein neuer Download kann die betrachtete Datenreihe verändern. Bewahre für Vergleiche deshalb die Datendatei und die zugehörige Metadatendatei auf.

Einen Lauf einordnen

Ein Backtest rechnet mit dem Zusammenspiel einer bestimmten Regel, Datenreihe und eines Ausführungsmodells. Er hilft dir zu prüfen, ob der Code deine Beschreibung umsetzt und wie er sich im Modell verhalten hätte. Zukünftige Daten sind im Ergebnis nicht enthalten.

Wenn du Parameter oft auf denselben Daten änderst, kannst du eine an diese Daten angepasste Regel finden. Die Untersuchung eines getrennten, bei der Einstellung nicht verwendeten Zeitraums beantwortet eine andere Frage. Im Abschlussprojekt prüfst du deshalb die korrekte Programmfunktion und den Vergleich von Einstellungen getrennt.