ARTIKEL 22

QuantConnect mit Python: Einstieg in algorithmische Handelssysteme

SEO-Titel: QuantConnect mit Python – Einstieg in algorithmisches Trading
Meta-Description: QuantConnect mit Python lernen: QCAlgorithm, initialize, on_data, Wertpapiere, Indikatoren, Orders, Portfolio und Backtests verständlich erklärt.
URL-Slug: /blog/quantconnect-python/
Haupt-Suchbegriff: QuantConnect Python
Weitere Suchbegriffe: QuantConnect Python Tutorial, Python Trading Algorithmus, QCAlgorithm, algorithmisches Trading Python

QuantConnect und Python

Python gehört zu den wichtigsten Programmiersprachen der quantitativen Finanzanalyse.

Die Sprache besitzt ein umfangreiches Ökosystem für:

  • Datenanalyse,
  • Statistik,
  • Machine Learning,
  • Visualisierung,
  • Finanzmodellierung.

QuantConnect ermöglicht es, dieselbe Sprache auch für die Implementierung von Handelssystemen in der LEAN Engine zu verwenden.

Damit kann ein Quant einen relativ durchgängigen Workflow aufbauen:

Research → Modell → Python-Code → Backtest → Live-System

Grundstruktur eines Python-Algorithmus

Ein einfacher QuantConnect-Algorithmus beginnt mit dem Import der Algorithmusumgebung:from AlgorithmImports import *

Anschließend wird eine Klasse definiert, die von QCAlgorithm erbt:class MyAlgorithm(QCAlgorithm): def initialize(self): pass def on_data(self, data: Slice): pass

Die aktuelle QuantConnect-Dokumentation verwendet diese Python-Namenskonvention.

initialize

Die Methode initialize wird einmal zu Beginn des Algorithmus ausgeführt.

Hier wird die Umgebung konfiguriert.

Beispielsweise:def initialize(self): self.set_start_date(2020, 1, 1) self.set_end_date(2025, 12, 31) self.set_cash(100000) self._symbol = self.add_equity( "SPY", Resolution.DAILY ).symbol

Damit werden unter anderem definiert:

  • Backtestzeitraum,
  • Startkapital,
  • gewünschtes Wertpapier,
  • Datenauflösung.

Symbol und Security

add_equity liefert ein Equity- beziehungsweise Security-Objekt.

Das symbol dient als eindeutige Referenz für das Instrument.

Beispiel:self._symbol = self.add_equity("SPY").symbol

Dieses Symbol kann später für:

  • Indikatoren,
  • Orders,
  • Portfoliozugriffe,
  • historische Daten

verwendet werden.

on_data

on_data wird aufgerufen, wenn neue Daten entsprechend den Abonnements verfügbar werden.

Beispiel:def on_data(self, data: Slice): if not self.portfolio.invested: self.market_order(self._symbol, 10)

Damit würde der Algorithmus bei entsprechender Ausführung zehn Einheiten kaufen, sofern das Portfolio nicht bereits investiert ist.

Dieses Beispiel zeigt lediglich die technische Struktur.

Es stellt keine Handelsstrategie dar.

Portfolio

Über self.portfolio kann auf den aktuellen Portfoliostatus zugegriffen werden.

Dazu gehören beispielsweise:

  • investiert oder nicht investiert,
  • Holdings,
  • Positionsgrößen,
  • nicht realisierte Gewinne und Verluste.

Eine wichtige Trennung besteht zwischen:

Signal

und

Portfolioposition.

Ein Signal sollte nicht unkontrolliert direkt in beliebige Positionsgrößen übersetzt werden.

Orders

QuantConnect unterstützt unterschiedliche Ordertypen und Ordermanagement-Funktionen.

Eine einfache Market Order kann beispielsweise konzeptionell mit:self.market_order(self._symbol, 10)

erzeugt werden.

Bei professionelleren Systemen müssen zusätzlich berücksichtigt werden:

  • Limit Orders,
  • Stop Orders,
  • Order Tickets,
  • Updates,
  • Cancel-Logik,
  • Teilausführungen.

Indikatoren

LEAN enthält zahlreiche technische Indikatoren.

Ein einfacher Moving Average kann beispielsweise in initialize erzeugt werden.self._sma = self.sma( self._symbol, 20, Resolution.DAILY )

Danach kann geprüft werden, ob der Indikator bereit ist und welchen aktuellen Wert er besitzt.

Warum Warm-up wichtig ist

Ein 20-Tage-Indikator benötigt zunächst historische Beobachtungen.

Ohne diese Daten wäre der Indikator unmittelbar nach Start noch nicht vollständig aufgebaut.

LEAN kann Indikatoren deshalb vor dem eigentlichen Handelsbeginn mit historischen Daten aufwärmen.

QuantConnect stellt dafür eigene Warm-up-Funktionen zur Verfügung.

Ein einfaches Beispiel

Ein minimalistisches Lehrbeispiel könnte so aussehen:from AlgorithmImports import * class SimpleMovingAverageAlgorithm(QCAlgorithm): def initialize(self): self.set_start_date(2020, 1, 1) self.set_end_date(2025, 12, 31) self.set_cash(100000) self._symbol = self.add_equity( "SPY", Resolution.DAILY ).symbol self._sma = self.sma( self._symbol, 20, Resolution.DAILY ) self.set_warm_up( 20, Resolution.DAILY ) def on_data(self, data: Slice): if self.is_warming_up: return if not self._sma.is_ready: return if self._symbol not in data.bars: return price = self.securities[self._symbol].price if price > self._sma.current.value: self.set_holdings(self._symbol, 1) elif self.portfolio[self._symbol].invested: self.liquidate(self._symbol)

Dieses Beispiel dient ausschließlich dazu, die Struktur zu demonstrieren.

Es ist kein Beleg dafür, dass eine Moving-Average-Strategie profitabel ist.

set_holdings

Mit set_holdings kann eine gewünschte Portfoliogewichtung angefordert werden.

Beispielsweise:self.set_holdings(self._symbol, 0.5)

würde konzeptionell versuchen, ungefähr 50 Prozent des Portfolios diesem Asset zuzuweisen.

Eine professionelle Strategie sollte die Positionsgröße allerdings aus einem expliziten Risikomodell ableiten.

Liquidation

Eine Position kann beispielsweise mit:self.liquidate(self._symbol)

geschlossen werden.

Auch hier ist zu beachten:

Der Methodenaufruf ist keine Garantie für einen bestimmten Ausführungspreis im Live-Markt.

Historical Data

Historische Daten werden nicht nur für Backtests benötigt.

Sie können auch verwendet werden für:

  • Feature-Berechnung,
  • Indikatorinitialisierung,
  • statistische Schätzungen,
  • Regimeanalyse.

History Requests sollten jedoch bewusst eingesetzt werden.

Insbesondere im Live-Trading können sie andere Performanceeigenschaften besitzen als im Backtest.

Scheduled Events

Nicht jede Strategie soll bei jedem neuen Datenpunkt handeln.

Bei einer monatlich rebalancierten Strategie ist es oft sinnvoller, eine geplante Funktion auszuführen.

Scheduled Events können beispielsweise verwendet werden für:

  • tägliche Routinen,
  • monatliches Rebalancing,
  • Marktöffnungslogik,
  • Reporting.

Das führt häufig zu saubererem Code als zahlreiche Zeitprüfungen innerhalb von on_data.

Datenauflösung richtig wählen

Eine Tagesstrategie benötigt normalerweise keine Tickdaten.

Umgekehrt kann eine Intraday-Strategie nicht sinnvoll allein mit Tagesdaten modelliert werden.

Die Auflösung sollte deshalb aus dem Anlagehorizont abgeleitet werden.

Gebühren und Slippage

Ein Python-Algorithmus kann historisch hervorragend aussehen und trotzdem wirtschaftlich wertlos sein.

Deshalb sollten im Backtest realistische Modelle verwendet werden für:

  • Gebühren,
  • Slippage,
  • Fills,
  • Brokerage-Bedingungen.

LEAN stellt dafür Reality-Modeling-Komponenten bereit.

Debugging und Logging

Während der Entwicklung sind Logging- und Debug-Funktionen hilfreich.

Allerdings sollte ein Live-System nicht jeden einzelnen Datenpunkt ungefiltert protokollieren.

Sinnvolle Logs konzentrieren sich beispielsweise auf:

  • Signaländerungen,
  • Trades,
  • Warnungen,
  • Fehler,
  • Risikoverletzungen.

Python-Code sauber strukturieren

Je größer das Projekt wird, desto weniger sinnvoll ist es, die gesamte Logik in on_data zu schreiben.

Besser ist eine Modularisierung.

Beispielsweise:main.py signals.py risk.py portfolio.py execution.py

Dadurch lassen sich Research, Risiko und Ausführung besser voneinander trennen.

Klassischer Algorithmus versus Framework

Ein klassischer QCAlgorithm eignet sich gut zum Erlernen der Plattform.

Bei komplexeren Portfoliostrategien kann das Algorithm Framework Vorteile besitzen.

Dort werden:

  • Alpha,
  • Portfolio Construction,
  • Risk Management,
  • Execution

in getrennte Module aufgeteilt.

Fehler, die Einsteiger vermeiden sollten

1. Sofort Orders senden

Bevor Indikatoren bereit sind.

2. Zukunftsinformation verwenden

Beispielsweise falsche Datenzeitpunkte.

3. Keine Kosten modellieren

Dies kann Ergebnisse stark verzerren.

4. Alles in on_data schreiben

Das erschwert Wartung und Tests.

5. Backtest als Beweis betrachten

Ein Backtest ist lediglich historische Evidenz.

Empfohlener Lernweg

Für Python-Einsteiger in QuantConnect ist folgende Reihenfolge sinnvoll:

1. QCAlgorithm verstehen

2. add_equity und Symbol

3. on_data

4. Portfolio

5. Orders

6. Indikatoren

7. Historical Data

8. Scheduled Events

9. Backtesting

10. Risk Management

11. Algorithm Framework

12. Live-Trading

Fazit

QuantConnect mit Python ermöglicht es, quantitative Modelle in einer produktionsnahen Umgebung zu implementieren.

Die technische Einstiegshürde ist relativ überschaubar.

Die größere Herausforderung liegt nicht in der Syntax.

Sie liegt darin, ein methodisch belastbares Handelssystem zu entwickeln.

Python ist das Werkzeug.

QuantConnect ist die Infrastruktur.

Die Strategiequalität entsteht durch:

Hypothese → Daten → Validierung → Risiko → saubere Implementierung

Weiterführende Quellen

  • QuantConnect Documentation: Getting Started
  • QuantConnect Documentation: Initialization
  • QuantConnect Documentation: Securities
  • QuantConnect Documentation: Trading and Orders
  • QuantConnect Documentation: Historical Data

Passendes Fachbuch

Handelssysteme in QuantConnect von Olaf Sund.

Weiterführende Artikel

  • QuantConnect auf Deutsch
  • Backtesting mit QuantConnect
  • QuantConnect Algorithm Framework
  • Quant Engineering

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Dieses Feld ist ein Pflichtfeld

Dieses Feld ist ein Pflichtfeld

Dieses Feld ist ein Pflichtfeld

Bei der Übermittlung Ihrer Nachricht ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.

Sicherheitsüberprüfung

Ungültiger Captcha-Code. Versuchen Sie es erneut.

Information icon

Wir benötigen Ihre Zustimmung zum Laden der Übersetzungen

Wir nutzen einen Drittanbieter-Service, um den Inhalt der Website zu übersetzen, der möglicherweise Daten über Ihre Aktivitäten sammelt. Bitte überprüfen Sie die Details in der Datenschutzerklärung und akzeptieren Sie den Dienst, um die Übersetzungen zu sehen.