Zum Inhalt springen
ForexBob
Automatisiertes Trading4 Min. Lesezeit

Algo Trading mit Python und MetaTrader 5: ein praktischer Einstieg

Wie Sie Python mit MetaTrader 5 verbinden, Kurshistorie laden, Orders prüfen und senden, auf welche Fallen wir gestoßen sind und wann ein MQL5-Expert-Advisor das bessere Werkzeug ist.

Von Sukhwinder Singh · Aktualisiert
A code editor panel on the left linked by a gold dotted arrow to a monitor showing a candlestick chart on the right.

Für Algo Trading ist Python die beliebteste Sprache in der Trading-Forschung, und für MetaTrader 5 gibt es ein offizielles Python-Paket, das sich mit dem Terminal verbindet. Damit können Sie aus einem Python-Skript Kurshistorie laden, Ihr Konto auslesen und echte Orders senden.

Wir nutzen es viel für Research. Hier lesen Sie, wie Sie loslegen, was die wichtigsten Funktionen tun, in welche Fallen wir getappt sind und wo ein MQL5-Expert Advisor die Aufgabe immer noch besser erledigt.

So funktioniert die Verbindung zwischen MetaTrader 5 und Python

How Python talks to MetaTrader 5: a Python script uses the MetaTrader5 package, which talks to a logged-in MT5 terminal on Windows, which talks to the broker's server.

Das Paket MetaTrader5 spricht nicht direkt mit Ihrem Broker. Es spricht mit einem MetaTrader-5-Terminal auf demselben Rechner, und das Terminal spricht mit dem Broker. Das hat drei Folgen:

  • Es funktioniert nur unter Windows, wo das Terminal läuft.
  • Das Terminal muss installiert und mit Ihrem Konto angemeldet sein.
  • Wird das Terminal geschlossen, verliert Ihr Skript die Verbindung.

Einrichtung

  1. Installieren Sie MetaTrader 5 von Ihrem Broker und melden Sie sich an. Ein Demokonto ist der richtige Ort für den Anfang.
  2. Installieren Sie das Paket mit pip install MetaTrader5. Pandas ist ebenfalls nützlich.
  3. Gehen Sie im Terminal auf Extras, Optionen, Expert Advisors und erlauben Sie den algorithmischen Handel, wenn das Skript Orders platzieren soll.

Verbinden und Konto auslesen

Importieren Sie das Paket und rufen Sie mt5.initialize() auf. Haben Sie mehr als ein Terminal installiert, übergeben Sie den Pfad zur richtigen terminal64.exe. Bei Erfolg gibt die Funktion True zurück. Gibt sie False zurück, sagt Ihnen mt5.last_error(), warum.

mt5.account_info() liefert Login, Kontostand, Equity, Margin und Hebel. Prüfen Sie das zuerst, jedes Mal. Wenn Sie mehrere Terminals betreiben, richtet man ein Skript leicht auf das falsche Konto.

Kursdaten laden

mt5.copy_rates_from_pos("EURUSD", mt5.TIMEFRAME_H1, 0, 5000) liefert die letzten 5.000 Stundenkerzen. mt5.copy_rates_range() nimmt stattdessen ein Start- und Enddatum. Beide geben ein NumPy-Array mit Zeit, Open, High, Low, Close, Tick-Volumen, Spread und echtem Volumen zurück, das sich direkt in einen pandas-DataFrame übernehmen lässt.

Für Tick-Daten liefert mt5.copy_ticks_range() jede Bid- und Ask-Änderung zwischen zwei Daten. Rechnen Sie mit sehr vielen Zeilen: Ein lebhafter Tag bei Gold kann Hunderttausende Ticks haben.

Wird ein Symbol nicht in der Marktübersicht angezeigt, rufen Sie zuerst mt5.symbol_select("XAUUSD", True) auf, sonst liefern die Datenabfragen nichts.

Zwei Fallen, in die wir getappt sind

Kerzenzeiten sind in der Serverzeit des Brokers. Die Zeitspalte enthält Unix-Sekunden, die Uhr dahinter ist aber der Server Ihres Brokers, nicht UTC. Bei einem Broker mit GMT+2 im Winter und GMT+3 im Sommer wurde eine mit 10:00 gestempelte Kerze um 08:00 bzw. 07:00 UTC eröffnet. Rechnen Sie um, bevor Sie mit Nachrichtenzeiten oder einer anderen Datenquelle vergleichen.

Sie können nicht mehr Kerzen abfragen, als das Terminal vorhält. Abfragen über die Einstellung „Max. Balken im Chart“ hinaus schlagen fehl. Auf unserem Terminal lag diese Grenze bei 60.000, und größere Abfragen gaben den Fehler Invalid params zurück. Erhöhen Sie den Wert unter Extras, Optionen, Charts oder fragen Sie in Datumsabschnitten ab.

Eine Order platzieren

Orders werden als Dictionary gesendet. Für einen Kauf zum Marktpreis setzen Sie die Aktion auf mt5.TRADE_ACTION_DEAL, dazu das Symbol, das Volumen in Lots, den Typ mt5.ORDER_TYPE_BUY, den aktuellen Ask-Kurs, einen Stop-Loss und Take-Profit, eine maximale Slippage in Punkten (deviation), eine Magic Number zur Kennzeichnung Ihrer Trades und einen Filling-Modus.

Python code that connects to MetaTrader 5, builds a market buy request for 0.10 lots of EUR/USD with a stop loss and take profit, checks it with order_check, sends it with order_send and prints the retcode, where 10009 means done.

Rufen Sie zuerst mt5.order_check(request) auf. Die Funktion sagt Ihnen, ob die Order angenommen würde und wie viel Margin sie braucht, ohne etwas zu senden. Dann sendet mt5.order_send(request) sie ab. Prüfen Sie den Retcode im Ergebnis: 10009 (TRADE_RETCODE_DONE) heißt, sie ist durchgegangen. Bei allem anderen lesen Sie den Kommentar.

Am Filling-Modus scheitern viele. Broker unterstützen unterschiedliche Modi, und der falsche führt zur Ablehnung der Order. mt5.symbol_info(symbol).filling_mode zeigt Ihnen, welche erlaubt sind.

mt5.positions_get() listet offene Positionen auf, und mt5.history_deals_get() liefert geschlossene Deals zwischen zwei Daten. Das ist praktisch, um ein eigenes Trading-Journal aufzubauen.

Wofür wir es nutzen

Unsere Python-Arbeit ist überwiegend Research. Als wir prüfen wollten, ob sich aus negativ korrelierten Paaren ein Hedging-EA bauen lässt, haben wir 4.000 Stundenkerzen für 28 Währungspaare direkt aus dem Terminal geladen und jede Korrelation gemessen. Die stärksten Paare, etwa EUR/USD und USD/CHF mit −0,77, erwiesen sich als dieselbe Währung auf entgegengesetzten Seiten. Beide long zu kaufen ist nur ein teurerer Weg, EUR/CHF zu handeln. Das hat in Python einen Nachmittag gedauert und uns erspart, einen EA auf einer schlechten Idee aufzubauen.

Python oder MQL5?

  • Backtesting: Der MT5 Strategietester führt nur MQL5-Code aus (siehe unsere Anleitung zum MetaTrader 5 Backtest). Eine Python-Strategie müssen Sie in Python backtesten, mit eigenem Code für Ausführungen, Spreads und Kosten. Dabei passieren leicht Fehler.
  • Geschwindigkeit: Python fragt das Terminal regelmäßig ab. Für Strategien ab M5-Kerzen reicht das. Für Reaktionen auf Tick-Ebene ist ein EA, der im Terminal läuft, schneller.
  • Betrieb rund um die Uhr an fünf Tagen: Ein Python-Skript braucht das Terminal und das Skript, meist auf einem Windows-VPS. Ein EA braucht nur das Terminal.
  • Research und Machine Learning: Hier gewinnt Python klar, mit pandas, NumPy, scikit-learn und dem Rest.

Ein verbreiteter Weg ist, das Research in Python zu machen und die endgültigen Regeln dann als MQL5-Expert-Advisor zu schreiben, damit sie im Strategietester geprüft werden können und ohne separates Skript laufen. Wenn Ihre Regeln feststehen und Sie sie umgesetzt haben möchten, sehen Sie sich unseren Service Expert Advisor programmieren lassen an.

Weiterlesen: Was ist ein Expert Advisor?, MetaTrader 5 Backtest mit dem Strategietester, Trading-Strategie automatisieren und MT4 vs. MT5.

Risikohinweis: Der Handel mit Devisen ist mit einem hohen Risiko verbunden und nicht für jeden geeignet. Dieser Artikel dient nur der Weiterbildung und ist keine Anlageberatung.

Sie möchten Ihre Strategie automatisieren?

Wir setzen Handelsregeln in getestete Expert Advisors für MT4 und MT5 um. Beschreiben Sie uns, wie Sie traden, und Sie erhalten eine Spezifikation und ein Angebot.