Ein EA ist ein ereignisgesteuertes Programm, kein automatisch profitabler Roboter. Auf einem Chart zu erscheinen, bestätigt weder gültige Eingaben noch erlaubte und ausgeführte Orders. Trenne die Verarbeitungsschritte in Logs und Akzeptanzprüfungen.

MQ5, EX5 und Berechtigungen unterscheiden

MetaEditor kompiliert MQ5-Quelltext in EX5. Die ausführbare Datei kann ohne Quelle verteilt werden; MQL5 zu lernen offenbart keinen darin verborgenen Kaufalgorithmus. Expert Advisors können erlaubte Handelsanfragen stellen. Indikatoren haben andere Ereignisse und untersagte Handelsfunktionen, können aber auch rechnen oder benachrichtigen. „Zeichnet nur“ beschreibt sie unvollständig.

MQL5 verwendet die MT5-Umgebung. MT4 kennt ebenfalls Expert Advisors, jedoch eigene Sprache und Schnittstellen. Ein Pythonprogramm kann Anbieter-APIs oder MetaQuotes-Pythonintegration mit dem Terminal nutzen. Vergleiche tatsächliche Datenwege und Abhängigkeiten statt nur Sprachlabel; der Botvergleich vertieft das.

Ein erfolgreicher CopyBuffer-Aufruf kann die falsche Bar liefern

Angenommen: CopyBuffer liefert exakt drei Elemente mit start_pos=1 und count=3 in ein gewöhnliches Array ohne AS_SERIES. Fiktive Werte lauten Shift 3 = 103, Shift 2 = 101, Shift 1 = 102. In physischer Reihenfolge steht der älteste kopierte Wert zuerst: Index 0 enthält 103, Index 1 enthält 101, Index 2 enthält den letzten abgeschlossenen Wert 102. Shift 0 wurde nicht kopiert.

Vollständig kopiert, aber nicht automatisch richtige BarCopyBuffer start_pos=1, count=3; gewöhnliches Array ohne AS_SERIES, genau drei Werte. Technische Indizes bleiben exakt.RECHEN- UND LERNBEISPIELIndex 0 → Shift 3103 > 102,5: wahrIndex 1 → Shift 2101Index 2 → Shift 1102 > 102,5: falsch
Vollständig kopiert, aber nicht automatisch richtige Bar. CopyBuffer start_pos=1, count=3; gewöhnliches Array ohne AS_SERIES, genau drei Werte. Technische Indizes bleiben exakt.

Index 0 enthält älteren Shift 3, während hier Index 2 den letzten abgeschlossenen Shift 1 enthält.

Index 0 → Shift 3
103 > 102,5: wahr – Älterer kopierter Wert
Index 1 → Shift 2
101 – Mittlerer Wert
Index 2 → Shift 1
102 > 102,5: falsch – Letzter abgeschlossener Wert; keine universelle Indexregel

Die Gegenprobe „größer als 102,5“ besteht mit dem älteren 103, aber nicht mit dem letzten abgeschlossenen 102. Die Kopie ist vollständig, die Barwahl kann trotzdem falsch sein. Notiere start_pos, tatsächliche Rückgabeanzahl und Zielarray-Indizierung. Index 2 ist keine allgemeine Regel für andere Arrayeinstellungen. Eine korrekt geschriebene Vergleichsoperation korrigiert keinen falschen Input.

Ereignisse und laufende Programme trennen

OnInit initialisiert Ressourcen; notwendige fehlende Vorbereitung braucht einen Fehlerstatus. Initialisierung kann nach Änderungen erneut erfolgen, nicht nur einmal während der ganzen Nutzung. OnDeinit erhält einen Grund, etwa Entfernung, Shutdown oder eine Änderung mit Neuinitialisierung. Ressourcen und erhaltenen Zustand verwaltest du ausdrücklich.

OnTick behandelt NewTick für das angehängte Chartsymbol. Ist ein solches Ereignis schon in der Queue oder in Verarbeitung, wird kein weiteres NewTick hinzugefügt. Daher wird nicht automatisch jeder Brokerquote als eigener Aufruf abgearbeitet. Ein EA kann weitere Ereignisse verwenden und braucht nicht zwingend OnTick. OnTimer und OnTradeTransaction können zentral sein. Bei mehreren Symbolen bestätigt ein Tick des Charts nicht die Aktualität sämtlicher Fremdsymbole.

Deaktiviertes AutoTrading verhindert neue EA-Handelsanfragen, stoppt aber weder Berechnungen noch einen gerade laufenden Handler. Es schließt keine offene Position. Datenstatus und Handelsberechtigung bleiben verschiedene Prüfungen.

Anfrage, Order, Deal und Position abgleichen

OrderSend=true bestätigt nicht automatisch einen Fill. Prüfe Retcode und bestätigte Orders, Deals und Positionen. OrderCheck ist Vorprüfung, keine spätere Ausführungsgarantie. CTrade bietet Buy, Sell und PositionClose; auch eine erfolgreiche Buy-Methodenprüfung braucht ResultRetcode und ResultDeal.

Fiktiver Fehlerfall: Du verlangst 0,10 Lot Kauf und verlierst Gewissheit über die Antwort. Ein erneutes Senden ohne Abgleich kann 0,20 Lot erzeugen, wenn beide Anforderungen füllen. Fehlende lokale Bestätigung beweist nicht, dass der Server nichts ausführte. Bei einem hypothetischen EUR/USD-Kontrakt mit 100.000 EUR je Lot sind 0,10 und 0,20 Lot entsprechend 10.000 und 20.000 EUR Basiseinheiten; das ist Menge, kein Verlustbudget.

Zweite Gegenprobe ohne Anfangsposition: Bestätigte Kaufdeals D1 = 0,04 und D2 = 0,06 Lot. Ein defekter Zähler setzt bei ORDER_DELETE die Menge auf 0. Bei D1, D2, ORDER_DELETE endet er falsch bei 0; bei ORDER_DELETE, D1, D2 zeigt er 0,10. Die bestätigte Kaufsumme ist in beiden Fällen 0,10 Lot. OnTradeTransaction garantiert keine passende Ankunftspriorität. Orderentfernung und Exposure sind verschiedene Felder. Ein echter Ledger braucht zudem Verkäufe, Umkehrungen, Historienkorrekturen und das Kontomodell.

Historischen Tester als begrenzte Untersuchung verwenden

MT5 kann generierte und verfügbare brokerbezogene Echtticks verwenden. Dokumentiere Herkunft, Informationszeit, Vertrag und Kosten; „real ticks“ bezeichnet keinen universellen MetaQuotes-Preisfeed. Parameterauswahl auf später als Evaluation ausgegebener Historie kann Belege überschätzen. Sie garantiert mathematisch weder glatte Kurve noch Liveversagen.

Bewahre alle Varianten und unberührte Evaluation. Der Backtestleitfaden trennt Methodenfrage und Ausführung. Simulierte Verzögerung ist keine Messung sämtlicher künftiger realer Fills.

Zweck, Eingaben und No-Trade-Regeln spezifizieren

Ein EA kann wiederholbare Prüfungen und Überwachung übernehmen. 200 Trades, Nachtbetrieb oder schnelle Entscheidungen sind mögliche Anforderungen, kein Vorteilbeleg. Definiere Informations- und Ereignisbedingungen, einschließlich fehlender Daten und No-Trade-Fälle. Kontext kann formalisiert werden, wenn seine Eingaben und Regeln präzise sind. Ungewöhnliche Meldungen disqualifizieren nicht automatisch jede Automatisierung.

Ein Handle ist noch kein auswertbarer Indikatorwert

BarsCalculated liefert berechnete Datenzahl oder −1 bei Fehler. Danach prüfst du Buffer, Barshift, tatsächliche CopyBuffer-Anzahl und Leermarker. Unser Modell verlangt einen Wert: A hat ungültigen Handle; B gültigen Handle, aber 0 kopierte Werte; C einen kopierten Wert EMPTY_VALUE; D einen gültigen Wert 45. Nur D erlaubt jetzt eine Schwellenprüfung. 45 ist eine erfundene Lesung, kein Investmentinput.

Bereitschaft hat vier eigene PrüfungenModell verlangt genau einen Indikatorwert. Handle, berechnete Daten, Anzahl und Inhalt bleiben getrennt.RECHEN- UND LERNBEISPIELA: INVALID_HANDLEKein ReadB: Handle, 0 kopiertNicht bereitC: 1 Wert EMPTY_VALUENicht auswertbarD: 1 gültiger Wert 45Regel auswertbar
Bereitschaft hat vier eigene Prüfungen. Modell verlangt genau einen Indikatorwert. Handle, berechnete Daten, Anzahl und Inhalt bleiben getrennt.

Eine vollständige Kopie mit Leermarker liefert keinen gültigen Input.

A: INVALID_HANDLE
Kein Read – Ressource fehlt
B: Handle, 0 kopiert
Nicht bereit – Keine echte Zahl
C: 1 Wert EMPTY_VALUE
Nicht auswertbar – Endlichkeit genügt nicht
D: 1 gültiger Wert 45
Regel auswertbar – Fiktive Lesung; keine Order oder Investition

EMPTY_VALUE ist standardmäßig DBL_MAX und endlich. Eine bloße Endlichkeitsprüfung genügt deshalb nicht. Customindikatoren können einen anderen Leermarker verwenden. Prüfe ihren Vertrag statt jeden echten Nullwert zu verwerfen. Ein fehlgeschlagener RSI-Read wird nicht als 0 ausgegeben: 0 wäre ein gültiger extremer Zustand. Fehlende Historie, Leermarker und gültige Zahl bleiben getrennt.

API-Verfügbarkeit und Chartabhängigkeit haben zusätzliche eigene Prüfungen.

Betrieb und Lernprojekt nach Bedarf planen

Ein kleines eigenes Projekt kann präzise Regeln prüfen, ohne dass drei bis sechs Monate oder Eigenbau einen besseren Ausgang garantieren. Unbeaufsichtigte Nutzung braucht Infrastruktur, Rechte und Wiederanlauf.

Ein serverakzeptierter gewöhnlicher Stop kann nach lokaler Terminalschließung weiter aktiv bleiben; ein EA-only-Exit braucht laufenden Code und Verbindung. MetaQuotes Virtual Hosting ist eine separat migrierte Umgebung mit erlaubter Automatisierung; der lokale AutoTrading-Knopf stoppt sie nicht. Ein Windows-VPS ist ein anderes Angebot. Im Nettingkonto teilen Strategien desselben Symbols eine Nettoposition. Magic Number erzeugt kein getrenntes Kapital oder eigene Margin.

Mit konkreten Akzeptanzfällen beginnen

Lies OnInit, OnTick und CTrade in der offiziellen Dokumentation und prüfe bei Bedarf einen vorhandenen Sample-EA in einem einzelnen kontrollierten Test. Erhalte Einstellungen und Ergebnis. Definiere Signal, Exit, Menge und unbekannte Fälle vor einem eigenen Projekt.

Prüfe fehlende Daten, Neustart, ungültigen Lotschritt, ungewisse Antworten und manuelle Positionsänderungen. Gleiche aktuelle Exposure vor Wiederaufnahme ab statt einem alten lokalen Signal zu vertrauen. Demo kann Operationsfragen prüfen, muss Liveausführung aber nicht wiedergeben. Ein Monat ist ein Planbeispiel, keine automatische Einsatzfreigabe.

  1. Lies OnInit, OnTick und CTrade in der offiziellen Dokumentation und sichere Einstellungen eines einzelnen kontrollierten Sample-Tests. Definiere Signal, Exit, Menge und unbekannte Fälle vorher; vergleiche im Bufferbeispiel den älteren Wert 103 mit der letzten abgeschlossenen Bar 102, bevor du ihren Index verwendest.
  2. Teste fehlende Daten, ungültigen Lotschritt, Neustart und ungewisse Antworten in einer getrennten Umgebung und bewahre Ereigniskennungen auf. Rechne die bestätigten Deals 0,04 plus 0,06 als 0,10 Lot nach; ein unklar beantworteter Retry darf ohne Zustandsabgleich nicht eine weitere volle Menge senden.
  3. Gleiche vor Wiederaufnahme tatsächliche Exposition und manuelle Positionsänderungen mit dem gespeicherten lokalen Zustand ab. Dokumentiere, ob 10.000 oder 20.000 EUR Basismenge wirklich vorliegen; Demo prüft Operationsfragen, wiederholt aber nicht zwingend Liveausführung und ein Monatsplan ist keine automatische Einsatzfreigabe.