Eine Einführung ins Backtesting mit Python

Im systematischen Handel ist Backtesting ein essenzieller Schritt, um eine Handelsstrategie zu testen, bevor sie in der realen Welt angewendet wird. Stell dir vor, du könntest deine Handelsentscheidungen in der Vergangenheit simulieren, um ihre Performance zu analysieren. Genau das ermöglicht Backtesting: Du wendest deine Strategie auf historische Marktdaten an, um Rentabilität, Risikomanagement und Robustheit zu bewerten. Dieser Artikel zeigt, wie du mit Python eine Backtesting-Umgebung aufbaust, um deine Strategien zu analysieren und zu optimieren.

Warum Python für Backtesting?

  • Python ist eine weit verbreitete Programmiersprache, die für ihre einfache Syntax und vielseitige Anwendungsmöglichkeiten bekannt ist. Sie wird besonders häufig in den Bereichen Datenanalyse sowie maschinelles Lernen genutzt. Für das Backtesting bietet Python zahlreiche Vorteile:
  • Einfache und verständliche Syntax, die den Einstieg erleichtert
  • Leistungsstarke Bibliotheken, die komplexe Berechnungen und
  • Simulationen ermöglichen
  • Große Community und Support, wodurch viele Lösungen bereits existieren
  • Flexibilität, um maßgeschneiderte Handelsstrategien zu entwickeln

Beispiel: Backtesting einer Strategie mit gleitenden
Durchschnitten

  • In diesem Beispiel erstellen wir eine Handelsstrategie, bei der wir verschiedene gleitende Durchschnitte (Moving Averages) verwenden, um Kauf- und Verkaufssignale zu erzeugen.
  • Liegt der Kurs über einem bestimmten gleitenden Durchschnitt, deutet das auf einen Aufwärtstrend hin (Kaufsignal)
  • Liegt der Kurs darunter, kann dies ein Abwärtstrend sein (Verkaufssignal) Strategie-Regeln
    • Strategie 1:
      • Kaufsignal: Der Kurs liegt über dem 50-Tage gleitenden Durchschnitt.
      • Verkaufssignal: Der Kurs liegt unter dem 50-Tage gleitenden Durchschnitt.
    • Strategie 2:
      • Kaufsignal: Der Kurs liegt über dem 125-Tage gleitenden Durchschnitt.
      • Verkaufssignal: Der Kurs liegt unter dem 125-Tage gleitenden Durchschnitt.

Umsetzung in Python

Bibliotheken importieren

Python verfügt über verschiedene Bibliotheken zur Finanzdatenanalyse. In diesem Beispiel nutzen wir:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import vectorbt as vbt

  • pandas zur Datenverarbeitung
  • numpy für mathematische Berechnungen
  • matplotlib zur Visualisierung der Ergebnisse
  • vectorbt, eine spezielle Bibliothek für Backtesting Marktdaten laden

Um eine Strategie zu testen, benötigen wir historische Marktdaten. In diesem Beispiel
laden wir Daten des S&P 500 ETFs (SPY) aus dem Internet.

spy = vbt.YFData.download(“SPY”,
start=”2010-01-01″).get(“Close”).to_frame()
close = spy.Close

Gleitende Durchschnitte berechnen

Wir berechnen die 50- und 125-Tage gleitenden Durchschnitte als Grundlage für unsere Strategie.

ma_20 = close.rolling(window=20).mean()
ma_125 = close.rolling(window=125).mean()

Handelssignale erstellen

Wir definieren die Bedingungen für Kauf- und Verkaufssignale.

buy_signal_20 = close > ma_20
buy_signal_125 = close > ma_125
sell_signal_20 = close < ma_20
sell_signal_125 = close < ma_125

Backtest durchführen

Nun testen wir die Strategie anhand der historischen Daten.

portfolio_20 = vbt.Portfolio.from_signals(close, buy_signal_20, sell_signal_20, freq=”1D”)
portfolio_125 = vbt.Portfolio.from_signals(close, buy_signal_125, sell_signal_125, freq=”1D”)

Ergebnisse visualisieren

Schließlich analysieren wir die Performance der Strategie.

portfolio = vbt.Portfolio.from_signals(close, buy_signal, sell_signal, freq=”1D”)
portfolio_20.stats()
portfolio_125.stats()

Auswertung

Die Ergebnisse des Backtests zeigen die Performance der Strategien im Vergleich zur Buy-and-Hold-Strategie (einfaches Halten des Assets über die gesamte Laufzeit).

Auswertungstabelle

Erklärung der Kennzahlen

  • Start / End: Der Zeitraum, über den die Strategie getestet wurde.
  • Total Return [%]: Die Gesamtperformance der Strategie über den Zeitraum in Prozent.
  • Max Drawdown [%]: Der größte Kapitalrückgang vom Höchststand zum Tiefpunkt.
  • Total Trades: Die Anzahl der durchgeführten Handelsgeschäfte.
  • Win Rate [%]: Der Prozentsatz der Trades, die mit Gewinn abgeschlossen wurden.
  • Best Trade [%]: Der profitabelste einzelne Trade in Prozent.
  • Worst Trade [%]: Der verlustreichste einzelne Trade in Prozent.
  • Avg Winning Trade [%]: Die durchschnittliche Rendite der Gewinn-Trades.
  • Avg Losing Trade [%]: Die durchschnittliche Rendite der Verlust-Trades.
  • Profit Factor: Verhältnis von Bruttogewinn zu Bruttoverlust (Werte über 1 zeigen Profitabilität an).
  • Expectancy: Erwarteter Gewinn oder Verlust pro Trade.
  • Sharpe Ratio: Eine Kennzahl zur Bewertung der risikobereinigten Rendite (höhere Werte sind besser).

Fazit

Dieses Beispiel zeigt, wie einfach es ist, eine Backtesting-Umgebung mit Python aufzusetzen. Python bietet eine exible und leistungsstarke Plattform zur Entwicklung und Optimierung von Handelsstrategien. Mit spezialisierten Bibliotheken lassen sich Strategien effizient testen und verbessern.

Leave a Reply

Your email address will not be published. Required fields are marked *