Python Quantitativ

Quantitativer Handel mit Python bezeichnet den Prozess der Nutzung der Programmiersprache Python zusammen mit zugehörigen Bibliotheken und Werkzeugen zur Durchführung von Finanzmarktdatenanalysen, Strategieentwicklung und Handelsausführung.

Python ist aufgrund seiner Einfachheit, leichten Erlernbarkeit, seines leistungsstarken Ökosystems und seiner reichhaltigen Finanzbibliotheken zu einer der bevorzugten Programmiersprachen für den quantitativen Handel geworden.

Quantitativer Handel wird im Finanzbereich weit verbreitet eingesetzt. Er ermöglicht es Händlern, Handelsstrategien durch systematische Methoden zu entwickeln und auszuführen, wodurch die Handelseffizienz und die Wissenschaftlichkeit der Entscheidungsfindung verbessert werden.

Die quantitative Analyse verwendet hauptsächlich mathematische und statistische Methoden, kombiniert mit Computertechnologie, um Finanzmärkte quantitativ zu analysieren und dadurch Handelsstrategien zu entwickeln und auszuführen.

Für mehr Inhalte zum quantitativen Handel mit Python siehe:Python-Quantitativer-Handel。


Beispielanwendungen

Als Nächstes sehen wir uns ein einfaches Anwendungsbeispiel für den quantitativen Handel mit Python an. Wir können eine Gleitende-Durchschnitt-Strategie mit Daten von Yahoo Finance verwenden.

Die Grundidee dieser Strategie besteht darin, Kauf- und Verkaufssignale durch den Vergleich kurzfristiger und langfristiger gleitender Durchschnitte zu erzeugen.

Bevor wir mit diesem einfachen Beispiel fortfahren, müssen Sie drei Pakete installieren:

pip install pandas yfinance matplotlib

Paketbeschreibungen:

  • Pandas ist eine leistungsstarke Open-Source-Bibliothek zur Datenverarbeitung und -analyse, die speziell für effiziente Datenanalyse und -manipulation entwickelt wurde.
  • yfinance ist eine Bibliothek zum Abrufen von Finanzdaten, die das Abrufen von Aktien, Indizes und anderen Finanzmarktdaten von Yahoo Finance unterstützt.
  • Matplotlib ist eine 2D-Plot-Bibliothek, mit der statische, animierte und interaktive Datenvisualisierungen erstellt werden können.

Historische Aktiendaten abrufen

Verwenden Sie yfinance, um historische Aktiendaten abzurufen. Hier ist ein einfaches Beispiel:

Beispiel

import yfinance as yf

# Aktiendaten abrufen
symbol = "600519.SS"
start_date = "2022-01-01"
end_date = "2023-01-01"

data = yf.download(symbol, start=start_date, end=end_date)
print(data.head())

Das Ausgabeergebnis ist wie folgt:

                  Open         High          Low        Close    Adj Close   Volume
Date                                                                               
2022-01-04  2055.00000  2068.949951  2014.000000  2051.229980  1973.508057  3384262
2022-01-05  2045.00000  2065.000000  2018.000000  2024.000000  1947.309937  2839551
2022-01-06  2022.01001  2036.000000  1938.510010  1982.219971  1907.112915  5179475
2022-01-07  1975.00000  1988.880005  1939.319946  1942.000000  1868.416870  2981669
2022-01-10  1928.01001  1977.000000  1917.550049  1966.000000  1891.507446  2962670

Einfache Datenanalyse und Visualisierung

Verwenden Sie pandas für die Datenanalyse und matplotlib für die Visualisierung:

Beispiel

import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

# Aktiendaten abrufen
symbol = "600519.SS"
start_date = "2022-01-01"
end_date = "2023-01-01"

data = yf.download(symbol, start=start_date, end=end_date)
# Einfache Datenanalyse
print(data.describe())

# Aktienkurs-Trenddiagramm zeichnen
data['Close'].plot(figsize=(10, 6), label=Symbol)
plt.title(f"{symbol} Aktienkurs")
plt.xlabel("Datum")
plt.ylabel("Preis")
plt.legend()
plt.show()

Das Trenddiagramm wird wie folgt angezeigt:

Backtesting der Moving-Average-Crossover-Strategie

Backtesting ist der Prozess der Simulation und Bewertung einer Handelsstrategie anhand historischer Marktdaten.

Das Folgende ist Beispielcode für einen einfachen Moving-Average-Crossover-Strategie-Backtest. Die Strategie kauft, wenn der 50-Tage-Moving-Average den 200-Tage-Moving-Average nach oben kreuzt, und verkauft, wenn er nach unten kreuzt. Die Performance der Strategie gibt Kennzahlen wie Gesamtrendite, annualisierte Rendite und maximalen Drawdown aus.

Beispiel

import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

# Aktiendaten abrufen
symbol = "600519.SS"
start_date = "2021-01-01"
end_date = "2023-01-01"

data = yf.download(symbol, start=start_date, end=end_date)

# Gleitende Durchschnitte berechnen
data['SMA_50'] = data['Close'].rolling(window=50).mean()
data['SMA_200'] = data['Close'].rolling(window=200).mean()

# Crossover-Signal-Spalte initialisieren
data['Signal'] = 0

# Crossover-Signale berechnen
data.loc[data['SMA_50'] > data['SMA_200'], 'Signal'] = 1
data.loc[data['SMA_50'] < data['SMA_200'], 'Signal'] = -1

# Tagesrenditen berechnen
data['Daily_Return'] = data['Close'].pct_change()

# Berechne die Rendite basierend auf Strategie-Signalen (shift(1) wird verwendet, um Look-Ahead-Bias zu vermeiden)
data['Strategy_Return'] = data['Signal'].shift(1) * data['Daily_Return']

# Kumulierte Renditen berechnen
data['Cumulative_Return'] = (1 + data['Strategy_Return']).cumprod()

# Strategie-Performance ausgeben
strategy_performance = {
    'Gesamtrendite': data['Cumulative_Return'].iloc[-1] - 1,
    'Annualisierte Rendite': (data['Cumulative_Return'].iloc[-1] ** (252 / len(data))) - 1,
    'Maximaler Drawdown': (data['Cumulative_Return'] / data['Cumulative_Return'].cummax() - 1).min(),
}

print("Strategie-Performance:")
for key, value in strategy_performance.items():
    print(f"{key}: {value:.4f}")

# Kumulative Renditekurve plotten
plt.figure(figsize=(10, 6))
plt.plot(data['Cumulative_Return'], label='Kumulative Rendite der Strategie', color='b')
plt.plot(data['Close'] / data['Close'].iloc[0], label='Kumulative Rendite der Aktie', color='g')
plt.title("Kumulative Rendite der Strategie vs. Aktie")
plt.xlabel("Datum")
plt.ylabel("Kumulative Rendite")
plt.legend()
plt.show()

Das Anzeigediagramm sieht wie folgt aus:

Bitte beachten Sie, dass dies nur ein einfaches Beispiel ist. Anwendungen in der Praxis erfordern komplexere Strategien und zusätzliche Überlegungen.

Andere Erweiterungen