Pine Script in MQL5 umwandeln was KI dabei falsch macht.
Eine Pine-Strategie lässt sich mit ChatGPT, Claude oder Codex schnell in MQL5 oder Python umwandeln, aber die Ergebnisse stimmen danach selten Trade für Trade überein. Der Grund liegt meist nicht in der Syntax, sondern in der Semantik, also im Verhalten zur Laufzeit: TradingView rechnet eine Strategie auf historischen Bars einmal pro Bar-Schluss und führt Market-Orders standardmäßig erst zur nächsten Bar-Eröffnung aus, ein Expert Advisor in MetaTrader 5 reagiert dagegen auf jeden Tick. Dazu kommen Annahmen des TradingView-Broker-Emulators über den Kursverlauf innerhalb einer Bar, Repainting durch request.security(), abweichende Zeitzonen und die verschiedenen Modi des MT5 Strategy Testers. Dieser Leitfaden zeigt, Stand Oktober 2026, wo eine KI-Übersetzung typischerweise danebenliegt, wie Sie das Ausführungsmodell vorab festlegen und wie ein Trade-für-Trade-Abgleich als Abnahmetest aussieht. Er richtet sich an private Trader ebenso wie an Entwickler und Teams, die Strategien zwischen Plattformen portieren.
Warum stimmt eine KI-Übersetzung von Pine Script selten 1:1?
Sprachmodelle übersetzen Code auf der Ebene der Syntax in der Regel zuverlässig: ta.ema() wird zu einem Indikator-Handle mit iMA(), strategy.entry() zu einem CTrade-Aufruf, ta.crossover() zu einem Vergleich zweier Werte. Das Ergebnis kompiliert oft auf Anhieb und sieht plausibel aus. Was dabei verloren geht, steht nicht im Pine-Code, sondern in der Laufzeitumgebung von TradingView: wann das Skript ausgeführt wird, zu welchem Preis Orders gefüllt werden und welche Daten zu welchem Zeitpunkt verfügbar sind.
Diese Regeln sind implizit. Eine KI, die nur den Code sieht, ergänzt sie stillschweigend mit eigenen Annahmen, meist mit denen der Zielplattform. Daraus entsteht ein Expert Advisor (EA, ein automatisch handelndes MQL5-Programm), der formal dieselben Indikatoren nutzt, aber zu anderen Zeitpunkten und zu anderen Preisen handelt. Bei Python-Portierungen, etwa in ein eigenes Backtesting mit pandas, passiert dasselbe mit umgekehrtem Vorzeichen: Dort fehlt häufig die Verzögerung bis zur nächsten Bar, und der Backtest sieht besser aus als das Original.
Typische Symptome nach einer Portierung:
- Die Zahl der Trades weicht deutlich ab, obwohl die Indikatorwerte übereinstimmen.
- Einstiege liegen eine Bar früher oder später als in TradingView.
- Stops und Ziele werden in derselben Bar in umgekehrter Reihenfolge getroffen.
- Die Python-Version zeigt eine glattere Kapitalkurve als jede Plattform, auf der man tatsächlich handeln kann.
Wann Pine Script überhaupt das richtige Werkzeug ist, beschreibt der Artikel TradingView Pine Script: wann sinnvoll, wann limitiert. Hier geht es um den Schritt danach: die Portierung so, dass sie prüfbar wird.
Ausführungsmodell: Bar-Schluss in Pine, OnTick in MQL5.
Laut TradingView-Dokumentation wird ein Pine-Skript auf jeder historischen Bar genau einmal ausgeführt, mit bestätigten Werten am Bar-Schluss. Eine Strategie, die dort ein Signal erzeugt, kann ihre Market-Order nicht mehr in dieser Bar füllen. Der Broker-Emulator, also die Simulation der Orderausführung in TradingView, füllt sie deshalb standardmäßig zur Eröffnung der folgenden Bar. Mit process_orders_on_close = true füllt die Strategie stattdessen zum Schlusskurs der Signal-Bar. Weitere Schalter sind calc_on_every_tick (Berechnung bei jedem Echtzeit-Tick), calc_on_order_fills (zusätzliche Berechnung nach einer Ausführung) und die Intrabar-Auflösung (in der Oberfläche „Bar detalization“, im Code weiterhin der Parameter use_bar_magnifier), verfügbar in den Plänen Premium und Ultimate; sie zieht Daten aus niedrigeren Zeitrahmen für genauere Füllungen heran.
In MQL5 ruft das Terminal OnTick() bei jedem neuen Kurs auf. Übersetzt eine KI die Pine-Logik einfach in OnTick(), prüft der EA seine Bedingungen auf der laufenden, noch nicht abgeschlossenen Bar, und zwar viele Male pro Bar. Ein Kreuzen zweier Durchschnitte kann so mitten in der Bar auslösen und wieder verschwinden. Das ist ein anderes Handelssystem.
Die Lösung ist eine explizite Erkennung neuer Bars und die Auswertung auf der zuletzt abgeschlossenen Bar:
datetime g_lastBar = 0;
void OnTick()
{
datetime barTime = iTime(_Symbol, _Period, 0);
if(barTime == g_lastBar) return; // nur einmal je neuer Bar
g_lastBar = barTime;
// Signal auf der abgeschlossenen Bar (Index 1) prüfen,
// nicht auf der laufenden Bar (Index 0)
double c1 = iClose(_Symbol, _Period, 1);
// ... Regel auswerten, Order zur Eröffnung dieser neuen Bar senden
}| Aspekt | Pine (Standard) | MQL5 (naive KI-Übersetzung) | Was Sie festlegen sollten |
|---|---|---|---|
| Ausführung des Codes | einmal je Bar-Schluss | bei jedem Tick | Auswertung nur bei neuer Bar |
| Signalbasis | abgeschlossene Bar | laufende Bar (Index 0) | Index 1 bzw. bestätigte Werte |
| Füllung Market-Order | Eröffnung der Folge-Bar | sofort zum aktuellen Kurs | erste Ticks der neuen Bar |
| Positionsmodell | Gegensignal dreht die Position, standardmäßig kein Aufstocken | abhängig von Netting- oder Hedging-Konto | Netting-Verhalten im EA nachbilden |
| Kosten | nur, wenn Kommission und Slippage gesetzt sind | Spread aus Historie, Kommission vom Broker | gleiche Kostenannahmen in beiden Tests |
Wie füllt der TradingView-Broker-Emulator Orders innerhalb einer Bar?
Auf historischen Bars kennt TradingView nur Open, High, Low und Close. Für Stop- und Limit-Orders braucht der Emulator aber eine Annahme, in welcher Reihenfolge diese Preise erreicht wurden. Die Dokumentation beschreibt die Regel: Liegt das Open näher am High als am Low, nimmt der Emulator den Pfad Open → High → Low → Close an, im umgekehrten Fall Open → Low → High → Close. Außerdem unterstellt er keine Lücken innerhalb einer Bar; jeder Preis zwischen Low und High gilt als handelbar. Eine Limit-Order wird gefüllt, sobald der Kurs ihren Preis erreicht oder in günstiger Richtung kreuzt.
Für die Portierung heißt das: Trifft eine Bar sowohl Stop-Loss als auch Take-Profit, entscheidet in TradingView diese Heuristik, welcher zuerst ausgelöst wird. In MetaTrader 5 entscheidet der Tick-Verlauf des gewählten Testmodus, im Live-Betrieb der tatsächliche Markt. Bei engen Stops auf hohen Zeitrahmen kann das einen erheblichen Teil der Trades betreffen. Die Intrabar-Auflösung („Bar detalization“ bzw. use_bar_magnifier) verringert das Problem, indem sie Daten niedrigerer Zeitrahmen heranzieht; laut Dokumentation steht sie nur in den Plänen Premium und Ultimate zur Verfügung.
Eine KI bildet diese Heuristik nicht von sich aus nach. Sie sollte es meist auch nicht: Ziel ist nicht, die Schwächen des Emulators zu kopieren, sondern zu wissen, welche Trades wegen solcher Bars unterschiedlich ausfallen. Markieren Sie im Abgleich deshalb jede Bar, in der Stop und Ziel gemeinsam in der Spanne lagen.
Repainting und request.security: der versteckte Future Leak.
Repainting bedeutet, dass ein Skript auf historischen Bars andere Werte oder Signale zeigt, als es in Echtzeit gezeigt hätte. Laut TradingView weisen über 95 % aller Indikatoren irgendeine Form davon auf. Ursachen sind unter anderem Werte, die sich auf der laufenden Bar ständig ändern, Zeichnungen, die nachträglich in die Vergangenheit gesetzt werden, und Daten aus anderen Zeitrahmen über request.security().
Besonders gefährlich ist die Kombination lookahead = barmerge.lookahead_on ohne Versatz um eine Bar. Auf historischen Bars liefert sie dann Werte, die zu diesem Zeitpunkt noch gar nicht bekannt waren, etwa den Tagesschluss schon am Vormittag. Die Dokumentation nennt dafür als Gegenmittel den [1]-Offset und, für Bedingungen, barstate.isconfirmed:
// Zukunftsdaten auf historischen Bars (Future Leak): dClose = request.security(syminfo.tickerid, "D", close, lookahead = barmerge.lookahead_on) // Nicht-repaintende Variante laut TradingView-Doku: dCloseOk = request.security(syminfo.tickerid, "D", close[1], lookahead = barmerge.lookahead_on)
Für die Portierung ist das doppelt relevant. Übersetzt die KI die erste Variante korrekt nach MQL5, etwa mit iClose(_Symbol, PERIOD_D1, 0), verhält sich der EA im Tester ehrlich und liefert schlechtere Ergebnisse als TradingView. Das sieht aus wie ein Übersetzungsfehler, ist aber ein Fehler im Original. In Python entsteht derselbe Leak, wenn Tagesdaten ohne Verschiebung per Join an Intraday-Daten gehängt werden. Auch calc_on_every_tick, varip und timenow führen laut Dokumentation zu Verhalten, das sich auf historischen Bars nicht reproduzieren lässt.
Zeitzonen, Sessions und Tester-Modi in MT5.
Pine speichert Zeit als UNIX-Zeitstempel in Millisekunden, also unabhängig von einer Zeitzone. Funktionen wie hour(), dayofweek() oder time(timeframe, session) rechnen standardmäßig in der Zeitzone der Börse (syminfo.timezone), nicht in der Zeitzone, die der Chart anzeigt. In MetaTrader 5 laufen Bars dagegen in der Serverzeit des Brokers, die je nach Broker abweicht und oft eine eigene Sommerzeitregel hat. Eine Session-Regel wie „nur zwischen 09:30 und 16:00 handeln“ muss deshalb ausdrücklich umgerechnet werden, inklusive der Wochen, in denen europäische und US-Sommerzeit auseinanderliegen. Prüfen Sie die Serverzeit Ihres Brokers selbst, statt sie der KI zu überlassen.
Im Strategy Tester kommt ein weiterer Fallstrick hinzu: Laut MQL5-Dokumentation sind TimeLocal(), TimeTradeServer() und TimeGMT() während des Tests identisch. Ein EA, der seine Session-Logik über TimeGMT() rechnet, verhält sich im Test also anders als live.
Auch der Testmodus verändert die Ergebnisse:
| MT5-Modus | Was simuliert wird | Für den Abgleich mit Pine |
|---|---|---|
| Every tick based on real ticks | echte, vom Broker gesammelte Ticks | realistischste Variante, weicht dafür am stärksten von Pine-Annahmen ab |
| Every tick | aus Minutendaten erzeugte Ticks | genauer für Stops und Ziele innerhalb der Bar, aber mit künstlich erzeugten Ticks |
| 1 minute OHLC | vier Preise je Minuten-Bar | schnell; Pending Orders, SL und TP zu den Orderpreisen |
| Open prices only | OnTick() nur zur Bar-Eröffnung | nahe am Pine-Standard für reine Bar-Logik; Pending Orders, SL und TP zu den Orderpreisen |
Dass in den Modi „Open prices only“ und „1 minute OHLC“ Pending Orders, Stop-Loss und Take-Profit zu den in der Order angegebenen Preisen ausgeführt werden, steht ausdrücklich in der MetaTrader-Hilfe. Kurslücken über den Stop hinweg werden dort also nicht abgebildet. Für den ersten Abgleich mit TradingView ist „Open prices only“ trotzdem sinnvoll, weil beide Seiten dann ähnlich grob rechnen. Die belastbare Bewertung braucht danach echte Ticks und realistische Kosten. Spreads übernimmt der Tester laut Hilfe aus den historischen Daten, Verzögerungen lassen sich als feste oder zufällige Verzögerung einstellen.
Spezifikation vor Code: Prompt-Vorlage für die Portierung.
Der wirksamste Hebel ist die Reihenfolge. Lassen Sie die KI zuerst eine schriftliche Spezifikation erstellen und prüfen Sie diese, bevor eine Zeile MQL5 oder Python entsteht. Die Spezifikation legt das Ausführungsmodell ausdrücklich fest, damit keine stillen Annahmen in den Code wandern. Eine Vorlage, die Sie anpassen können:
Aufgabe: Portiere die angehängte Pine-Strategie nach MQL5. Schreibe ZUERST eine Spezifikation, noch KEINEN Code. 1. Signale: jede Bedingung als Formel, auf welcher Bar sie ausgewertet wird (nur abgeschlossene Bars). 2. Ausführung: Market-Entry zur Eröffnung der Folge-Bar (wie Pine-Standard ohne process_orders_on_close). 3. Stop und Ziel: Preisberechnung, Reihenfolge bei beidem in einer Bar, Verhalten bei Kurslücken. 4. Position: Netting, keine Pyramidisierung, Gegensignal dreht die Position. 5. Höhere Zeitrahmen: jede request.security-Stelle mit lookahead-Einstellung und Offset auflisten; markieren, wo Zukunftsdaten entstehen könnten. 6. Zeit: Session-Zeiten mit Zeitzone der Börse, Abbildung auf die Serverzeit meines Brokers (Parameter, nicht fest). 7. Liste alle Stellen, an denen Pine und MQL5 sich unterschiedlich verhalten können. Triff keine stillen Annahmen, sondern frag nach.
Erst wenn diese Spezifikation stimmt, folgt der Code, am besten in kleinen Schritten: Indikatoren, dann Signale, dann Orderlogik, dann Risikoregeln. Lassen Sie den EA bei jedem Trade Signal-Bar, Einstiegszeit, Einstiegspreis, Ausstieg und Grund in eine Datei schreiben. MetaEditor lässt sich laut MetaQuotes per Kommandozeile als Compiler aufrufen (/compile mit /log). Coding-Agenten, die Shell-Befehle ausführen, etwa Claude Code oder Codex, können so kompilieren, das Log lesen und Fehler beheben; wie diese Kompilier-Schleife für MQL5 aussieht, beschreibt Claude Code für MQL5. Kompilierbarer Code ist aber nur die Eintrittskarte, kein Beleg für korrektes Verhalten.
Grenzen und Risiken einer Portierung mit KI.
- Perfekte Übereinstimmung ist nicht erreichbar. TradingView und Ihr MT5-Broker nutzen unterschiedliche Datenquellen; schon andere Hochs und Tiefs verändern Signale. Ziel ist eine erklärbare Abweichung, keine identische Kapitalkurve.
- Die KI kann Fehler im Original übernehmen. Ein Future Leak oder ein repaintender Indikator wird sauber übersetzt und bleibt ein Leak. Manchmal ist die schlechtere Portierung die ehrlichere.
- Plausibler Code verdeckt Annahmen. Modelle füllen Lücken mit Standardverhalten der Zielplattform, ohne es zu sagen. Ohne Spezifikation fallen diese Entscheidungen erst im Abgleich oder im Live-Konto auf.
- Backtests sind keine Prognose. Auch eine korrekt portierte Strategie kann überangepasst sein. Mit Hebelprodukten wie CFDs ist ein Verlust des gesamten eingesetzten Kapitals möglich.
- Live-Betrieb ist ein eigenes Thema. Requotes, Teilausführungen, Verbindungsabbrüche und Wochenend-Lücken simuliert weder TradingView noch der Tester vollständig.
Wenn ich Strategien zwischen Plattformen übertrage, gilt deshalb eine einfache Regel: Jede Abweichung wird einer Ursache zugeordnet, bevor Geld im Spiel ist. Eine Abweichung ohne Erklärung ist ein offener Fehler, egal wie gut die Kennzahlen aussehen.
Trade-für-Trade-Abgleich: was Sie jetzt konkret tun können.
Der Abnahmetest für jede Portierung ist ein Vergleich auf Ebene einzelner Trades, nicht der Kennzahlen. So gehen Sie vor:
- Pine-Original prüfen: Alle
request.security()-Aufrufe auflookaheadund Offset durchsehen, Einstellungen wieprocess_orders_on_closeundcalc_on_every_ticknotieren. - Referenz exportieren: In TradingView die Liste der Trades im Strategy Report als CSV herunterladen.
- Spezifikation erstellen lassen mit der Prompt-Vorlage oben und jede Annahme bestätigen oder korrigieren.
- EA oder Python-Version mit Trade-Log bauen, das dieselben Felder wie der TradingView-Export schreibt.
- Zeiträume und Kosten angleichen: gleiches Symbol, gleicher Zeitraum, gleiche Positionsgröße, zunächst ohne Kosten, Tester-Modus „Open prices only“.
- Trades per Skript zusammenführen (Einstiegszeit plus Richtung) und drei Gruppen bilden: übereinstimmend, verschoben, nur auf einer Seite vorhanden.
- Abweichungen klassifizieren: Datenunterschied, Bar mit Stop und Ziel, Zeitzone, Repainting, Logikfehler. Nur die letzte Gruppe ist ein Übersetzungsfehler im engeren Sinn.
- Danach realistisch testen: echte Ticks, Spreads, Kommission und Verzögerung, anschließend Demo-Konto, erst dann Live-Betrieb mit kleiner Größe.
Legen Sie vor Schritt 6 fest, ab welcher Übereinstimmungsquote Sie die Portierung abnehmen, und ergänzen Sie die Regel, dass jede verbleibende Abweichung erklärt sein muss. Welche Neuerungen in Pine v6 dabei eine Rolle spielen, fasst der Artikel zu den Pine-Script-v6-Neuerungen 2026 zusammen. Wenn Sie die Portierung, den Abgleich oder den Weg in den Live-Betrieb nicht allein stemmen wollen, finden Sie unter Trading-Automatisierung mein Angebot für private Trader und Unternehmen.
Häufige Fragen.
Kann ChatGPT oder Claude Pine Script in MQL5 umwandeln?
Ja, syntaktisch gelingt das meist gut, und der Code kompiliert oft auf Anhieb. Das Verhalten stimmt aber selten überein, weil Pine Orders standardmäßig zur Eröffnung der nächsten Bar ausführt, während ein Expert Advisor bei jedem Tick reagiert. Legen Sie das Ausführungsmodell vorab in einer Spezifikation fest und prüfen Sie das Ergebnis Trade für Trade gegen den TradingView-Export.
Warum hat meine Strategie in MT5 andere Trades als in TradingView?
Häufige Ursachen sind Auswertung auf der laufenden statt der abgeschlossenen Bar, andere Füllzeitpunkte, die Intrabar-Annahmen des TradingView-Broker-Emulators, Repainting über request.security, abweichende Zeitzonen und unterschiedliche Datenquellen. Ordnen Sie jede Abweichung einer dieser Ursachen zu, bevor Sie den Code ändern.
Was bedeutet lookahead_on in request.security?
Mit barmerge.lookahead_on liefert request.security auf historischen Bars Werte des höheren Zeitrahmens, die zu diesem Zeitpunkt noch nicht feststanden, sofern kein Versatz um eine Bar verwendet wird. Das erzeugt einen Future Leak und zu optimistische Backtests. Die TradingView-Dokumentation empfiehlt den [1]-Offset zusammen mit lookahead_on beziehungsweise barstate.isconfirmed für Bedingungen.
Welchen MT5-Testmodus nehme ich für den Vergleich mit TradingView?
Für den ersten Abgleich einer reinen Bar-Strategie eignet sich „Open prices only“, weil der EA dann wie Pine nur einmal je Bar rechnet. Pending Orders, Stop-Loss und Take-Profit werden dort zu den Orderpreisen ausgeführt. Für die belastbare Bewertung testen Sie anschließend mit echten Ticks, Spreads, Kommission und Verzögerung.
Kann ich Pine Script auch nach Python übertragen?
Ja, mit denselben Fallstricken. In Python-Backtests fehlt oft die Verzögerung bis zur nächsten Bar, und Daten höherer Zeitrahmen werden ohne Verschiebung angefügt. Beides lässt Ergebnisse besser aussehen als in TradingView. Signale auf abgeschlossenen Bars berechnen, Ausführung zur Folge-Bar und ein Trade-Log für den Abgleich sind hier ebenso Pflicht.
Quellen und Stand.
- Strategies (Broker-Emulator, Order-Füllung, Bar detalization) — TradingView – Pine Script Docs
- Repainting — TradingView – Pine Script Docs
- Execution model — TradingView – Pine Script Docs
- Time — TradingView – Pine Script Docs
- Strategy Tester: Testing modes — MetaQuotes – MetaTrader 5 Hilfe
- How to export strategy data — TradingView – Hilfe
- Testing Features (Strategy Tester) — MetaQuotes – MetaTrader 5 Hilfe
- Testing Trading Strategies — MetaQuotes – MQL5 Reference
- Integration with IDE (Kommandozeilen-Kompilierung) — MetaQuotes – MetaEditor Hilfe
Stand: 7. Oktober 2026. Produkte, Funktionen und Preise ändern sich schnell; maßgeblich sind die Angaben der Anbieter und Behörden.
Sie wollen Ihre Pine-Strategie sauber nach MQL5 oder Python übertragen lassen? Unverbindlich anfragen — wir klären Ausführungsmodell, Abgleich mit TradingView und den Weg in den Live-Betrieb. Mehr zu meinem Angebot: Trading-Systeme entwickeln lassen.