Backtest-Ergebnisse lesen
Du prüfst die Strategie Trade für Trade und vergleichst die Auswirkungen von Kosten.
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.
| Spalte | Was zeigt sie? |
|---|---|
Trade | Nummer des Trades und Einstiegskennung |
Entry time | Zeitpunkt der Einstiegsausführung |
Entry price | Ausführungskurs des Einstiegs |
Exit time | Zeitpunkt der Ausstiegsausführung |
Exit price | Ausführungskurs des Ausstiegs |
Qty | Menge des Trades |
Profit | Geldbetrag des Ergebnisses dieses geschlossenen Trades |
Profit % | Prozentuales Ergebnis des Trades |

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 × PunktwertDer 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.

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.
- Prüfe unter Initial capital den Wert 10000 und unter Order size die Einstellung 1 Contracts.
- Stelle Commission auf 0,1 und wähle als Einheit % of order value. In das Feld kannst du den Wert auch als
0.1eingeben. - Stelle Slippage auf 2 Ticks.
- Speichere mit Save, starte anschließend Run Pyne code und warte bis zum Ende der Ausführung.

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:
| Lauf | Daten | Schnelle/langsame Länge | Menge | Provision | Slippage |
|---|---|---|---|---|---|
| Basislauf | DEMO | 5 / 20 | 1 Einheit | 0 % | 0 Ticks |
| Mit Kosten | DEMO | 5 / 20 | 1 Einheit | 0,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.
- 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.
- Wähle einen Anbieter unter Provider. Die Abbildung verwendet
ccxt; hier wählst du unter Broker auch die konkrete Datenquelle. - Gib den gesuchten Markt in das Filterfeld ein. In der Abbildung wählen wir den Spotmarkt
BTC/USDder Quellecoinbase. Achte auf den vollständigen Symbolnamen: Zeilen mit ähnlichem Präfix können unterschiedliche Märkte bezeichnen. - Stelle Timeframe auf
1Dund From auf 365 days back. now unter To fordert Daten bis zum Downloadzeitpunkt an. - Klicke auf Download und warte, bis der Download abgeschlossen ist.

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.