Zum Inhalt springen
t4ri > Algotrading > Datenquellen für Algo-Trading

Datenquellen für Algo-Trading

Daten sind der Kern des systematischen Handels. Marktdaten decken viele Handelsaktivitäten auf einem Markt oder Handelsplatz ab und sind die Voraussetzung für die Strategieanalyse.

Historische Kursdaten sind leicht zu erhalten. Sie werden in regelmäßigen Abständen aktualisiert und sehen z.B. so aus:

Date       Open     High     Low      Close    Adj Close  Volume
2023-01-03 125.0700 126.8900 124.1700 125.0700 124.598679 84640200
2023-01-04 126.0100 126.6100 124.8300 126.3600 125.884399 67844000
2023-01-05 127.1300 127.7700 125.1200 126.9600 126.481613 72248000

yfinance

Die Python-Bibliothek yfinance ist ein nützliches Tool, um Finanzdaten von Yahoo Finance einfach abzurufen. Sie ermöglicht das Herunterladen von Aktienkursen, Indizes und anderen Finanzinformationen direkt in Python.

Falls yfinance noch nicht installiert ist, kannst du es mit folgendem Befehl installieren:

pip install yfinance

Mit yfinance kannst du historische Kursdaten wie Öffnungs-, Schluss-, Höchst- und Tiefstkurse sowie Handelsvolumen abrufen. Dazu nutzt man die Funktion yfinance.download() oder ein Ticker-Objekt.

Im folgenden Beispiel wird der Aktienkurs von Apple Inc. (AAPL) für das Jahr 2023 abgerufen:

import yfinance as yf

# Ticker-Symbol definieren
ticker = "AAPL"

# Historische Daten abrufen
data = yf.download(ticker, start="2023-01-01", end="2024-01-01")

# Die ersten fünf Zeilen der Daten anzeigen
print(data.head())

# Optional: Daten als CSV speichern
data.to_csv("apple_historische_daten.csv")

ib_insync

Die Bibliothek ib_insync ist eine Python-API, die die Interaktion mit der Trader Workstation (TWS) oder dem IB Gateway von Interactive Brokers erleichtert. Mit ib_insync können Trader historische Kursdaten abrufen, um diese für Analysen, Backtesting oder andere Zwecke zu nutzen.

Voraussetzung ist ein aktives Konto bei IB und die TWS muss laufen und du musst vollständig eingelogged sein und die API-Verbindung muss über die Einstellungen zugelassen sein.

Falls ib_insync noch nicht installiert ist, kannst du es mit folgendem Befehl installieren:

pip install ib_insync

Stelle sicher, dass in TWS/IB Gateway die API in den Einstellungen aktiviert ist. Gehe in den Einstellungen zu Configure > API > Settings und aktiviere die Option ActiveX und Socket Clients.
Das nachfolgende Beispiel verwendet Port 7496, achte auf eine ensprechende Einstellung, gleichfalls darf die API nicht schreibgeschützt sein.

Im folgenden Beispiel wird demonstriert, wie man mit ib_insync historische Kursdaten eines bestimmten Symbols (z. B. AAPL für Apple) abruft.

from ib_insync import IB, Stock

# Verbindung zur TWS/IB Gateway herstellen
ib = IB()
ib.connect('127.0.0.1', 7496, clientId=1)

# Finanzinstrument definieren (z. B. Apple Aktie)
symbol = 'AAPL'
contract = Stock(symbol, 'SMART', 'USD')

# Daten abonnieren (optional: um sicherzustellen, dass die Verbindung funktioniert)
ib.qualifyContracts(contract)

# Historische Daten abrufen
# Beispiel: Hole 30 Minuten Kerzen für die letzten 2 Tage
historical_data = ib.reqHistoricalData(
    contract,
    endDateTime='',  # aktuelles Datum und Uhrzeit
    durationStr='2 D',  # Zeitspanne (z. B. '2 D' für 2 Tage)
    barSizeSetting='30 mins',  # Kerzengröße (z. B. '30 mins')
    whatToShow='MIDPOINT',  # Art der Daten (z. B. 'TRADES', 'BID', 'ASK', 'MIDPOINT')
    useRTH=True  # Nur Daten aus den regulären Handelszeiten
)

# Ergebnisse anzeigen
for bar in historical_data:
    print(f"{bar.date} - Open: {bar.open}, High: {bar.high}, Low: {bar.low}, Close: {bar.close}")

# Verbindung trennen
ib.disconnect()

falls du diesen Code in Jupyter Notebook testen möchtest, läuft bereits durch Jupyter eine Event Loop, die einen Fehler erzeugt. Für eine korrekte Verarbeitung ergänze folgenden Code am Anfang:

import nest_asyncio
from ib_insync import IB, Stock

# Event-Loop für Jupyter fixen
nest_asyncio.apply()

# Verbindung zur TWS/IB Gateway herstellen
ib = IB()
ib.connect('127.0.0.1', 7496, clientId=1)
...
Schlagwörter: