English Русский 日本語
preview
Vom Neuling zum Experten: Animierte Nachrichtenschlagzeilen mit MQL5 (VI) – Strategie von schwebenden Aufträgen für den Nachrichtenhandel

Vom Neuling zum Experten: Animierte Nachrichtenschlagzeilen mit MQL5 (VI) – Strategie von schwebenden Aufträgen für den Nachrichtenhandel

MetaTrader 5Handel |
197 0
Clemence Benjamin
Clemence Benjamin

Inhalt:



Einführung

Die Integration von Alerts in die Vorgängerversion unseres Expert Advisors war ein bedeutender Schritt nach vorn, der ihn zu einem wertvollen Instrument für manuelle Nachrichtenhändler machte. Eine wichtige Einschränkung bleibt jedoch bestehen: Der EA muss noch die Handelsausführungen automatisieren. Unser heutiges Ziel ist es, diese Lücke zu schließen, indem wir die CTrade-Klasse integrieren, um den automatischen Handel auf der Grundlage von Nachrichtenereignissen zu ermöglichen.

Die Vorgängerversionen unseres Projekts boten bereits mehrere Vorteile, wobei jede neue Funktion dazu diente, ein bestimmtes Problem zu lösen und den praktischen Wert des EA zu erhöhen. Im Folgenden finden Sie eine kurze Zusammenfassung einiger dieser Vorteile:

  • Bequemer Zugang zum Nachrichtenkalender: Die Nutzer können bevorstehende Wirtschaftsereignisse direkt auf dem Chart sehen, ohne ihren Handels- oder Analyse-Workflow zu unterbrechen.
  • Wirtschaftliche Schlagzeilen in Echtzeit: Wir haben Alpha Vantage als Nachrichtenquelle integriert, die aktuelle Schlagzeilen liefert, um Händler auf dem Laufenden zu halten.
  • Einblicke in die integrierten Indikatoren: Mithilfe der MQL5-API konnten wir technische Indikatordaten abrufen und maßgeschneiderte Einblicke in speziellen Chart-Streifen anzeigen.
  • Einblicke in die Künstliche Intelligenz: Wir haben lokale KI-Modelle verknüpft, um Markteinblicke zu generieren und so eine ausgefeilte analytische Dimension hinzuzufügen, auch wenn dies zu einer gewissen Verlangsamung der Scroll-Geschwindigkeit über alle Bahnen hinweg führte.

Mit diesen soliden Grundlagen sind wir nun bereit, die nächste Herausforderung anzugehen: die automatische Umwandlung von Nachrichtensignalen in tatsächliche Handelsausführungen innerhalb des EA.



Strategieübersicht für die Integration von schwebenden Aufträgen

Jeder Expert Advisor (EA) steht und fällt letztlich mit der Logik, die bestimmt, wann und wie er handelt. Unser Projekt News Headline EA konzentrierte sich bisher auf ein leistungsstarkes visuelles Erlebnis und ein Warnsystem für wirtschaftliche Ereignisse. Wir haben Ereignisstreifen, Nachrichtenticker und sogar KI-gesteuerte Einblicke entwickelt, die über das Chart rollen. All diese Tools sind zwar nützlich, überlassen aber dem Händler die manuelle Ausführung von Handelsgeschäften. Die nächste logische Entwicklung besteht darin, diesen EA in eine autonome Handelsmaschine zu verwandeln, die nicht nur informiert, sondern auch entschlossen handelt, wenn sich Gelegenheiten ergeben.

Wir bereiten uns darauf vor, eine Logik für den Handel mit schwebenden Aufträgen zu integrieren, um die Volatilität zu erfassen, die häufig durch wichtige Wirtschaftsnachrichten ausgelöst wird. Diese Planungsphase ist von entscheidender Bedeutung, denn ohne einen soliden Plan kann die Umsetzung leicht unübersichtlich oder fehleranfällig werden.

Die Notwendigkeit einer Handelslogik in einem Expert Advisors

Ein rein informativer EA – auch wenn er visuell beeindruckend sein kann – bleibt passiv. Um den Handel zu automatisieren, benötigt ein EA klare Regeln für:

  1. Timing: Wann Sie in den Handel einsteigen sollten.
  2. Richtung: Entweder kaufen oder verkaufen – oder neutral bleiben.
  3. Art des Auftrags: Ob Markt-, Limit- oder Stop-Aufträge erteilt werden sollen.
  4. Risikokontrollen: Wie man Stop-Loss- und Take-Profit-Levels definiert.
  5. Logik der Bereinigung: Wie man Aufträge aufhebt oder ändert, wenn sich die Umstände ändern.

In unserem Fall wählen wir absichtlich zeitbasierte Bedingungen für die Ausführung von Handelsgeschäften. Dies eignet sich besonders für den Handel mit Nachrichten, da der Zeitpunkt der Veröffentlichung von Nachrichten im Voraus bekannt ist. Im Gegensatz zu Setups, die sich ausschließlich auf Chartmuster oder Indikatorsignale stützen, nutzt dieser Ansatz den geplanten Nachrichtenkalender als primären Auslöser für Handelsaktivitäten.

Marktbeobachtungen hinter der Strategie

Im Laufe der monatelangen Beobachtungen und Tests hat sich ein konsistentes Marktverhalten herauskristallisiert: Die Volatilität der Märkte sinkt häufig wenige Minuten vor wichtigen Wirtschaftsmeldungen. Die Liquidität kann leicht abnehmen, da Händler und Institutionen an der Seitenlinie auf neue Informationen warten. Dann, wenn die Nachricht eintrifft, steigen oder fallen die Kurse häufig in einem rasanten Ausschlag, angetrieben sowohl von menschlichen Händlern als auch von algorithmischen Systemen, die auf die neuen Daten reagieren.

Diese scharfe Bewegung nach den Nachrichten kann sein:

  1. Ein Ausbruch nach oben, wenn die Nachrichten nach oben überraschen.
  2. Ein Durchbruch nach unten, wenn die Nachricht den Markt negativ schockiert.

Dieser Volatilitätsanstieg schafft einen fruchtbaren Boden für Strategien für schwebende Aufträge, die darauf abzielen, die jeweilige Seite des Marktes zu erwischen, die ausbricht.

Die Blaupause für schwebende Aufträge

Unser Ansatz für den Handel mit den Nachrichten wird sich auf zwei ausstehende Stop-Orders stützen:

  1. Ein Kauf-Stopp, der über dem aktuellen Marktpreis platziert wird, um Aufwärts-Ausbrüche abzufangen.
  2. Ein Verkaufs-Stopp, der unterhalb des Marktpreises platziert wird, um Abwärts-Ausbrüche abzufangen.

Wir beabsichtigen, diese Aufträge eine bestimmte Anzahl von Minuten vor der geplanten Nachrichtenveröffentlichung zu platzieren (wie durch unsere Eingabe InpOrderMinutesBefore definiert). Dies gibt dem EA Zeit, die Aufträge vorzubereiten, und minimiert gleichzeitig die Anfälligkeit für falsches Marktrauschen.

Die Logik ist elegant:

Wenn die Nachricht stark genug ist, um eine entscheidende Kursbewegung auszulösen, sollte einer dieser schwebenden Aufträge ausgelöst werden, sodass wir das Momentum in diese Richtung mitnehmen können. Sobald ein Auftrag ausgeführt wird, wird der andere Auftrag gelöscht, um zu vermeiden, dass er in eine Umkehrung gerät.

Ohne den Löschschritt könnten beide Aufträge in rascher Folge ausgelöst werden – ein Phänomen, das als „Whipsaw“ oder „Hit-and-Run-Preisaktion“ bekannt ist. Dies kann dazu führen, dass beide Handelsgeschäfte mit einem Verlust abgeschlossen werden, was den Zweck der Strategie zunichte macht.

Risikomanagement im Nachrichtenhandel

Der Handel mit Nachrichten birgt einzigartige Risiken. Im Gegensatz zu traditionellen Setups, die sich allmählich entwickeln, können Wirtschaftsnachrichten dazu führen, dass ein Währungspaar innerhalb von Millisekunden um Dutzende von Pips springt. Die Spreads weiten sich aus, es kommt zu Slippage und Kurslücken.

In unserem geplanten EA wird das Risikomanagement kein Nachzügler sein – es ist ein zentrales Gestaltungsprinzip.

Wir bauen mehrere Schutzmechanismen in unsere Strategie ein:

1. Feste Abstände für Stop-Loss und Take-Profit

Wir stellen InpStopLossPips und InpTakeProfitPips als Eingänge zur Verfügung. Auf diese Weise lässt sich genau steuern, wie weit sich die Kurse gegen uns bewegen können, bevor wir Verluste begrenzen, und wie weit wir Gewinne laufen lassen wollen. Ein Stoppkurs von 10 Pips und ein Take-Profit von 20 Pips ergeben beispielsweise ein kontrolliertes Chance-Risiko-Profil von 2:1.

2. Spread- und Tick-Size-Kompensation

Bevor wir Aufträge erteilen, berechnen wir den aktuellen Spread und beziehen ihn in den Offset des schwebenden Auftrags ein. Dadurch wird verhindert, dass die Spanne „versehentlich“ unsere Aufträge bei bloßen Schwankungen von Bid und Ask auslöst, und die Integrität unserer beabsichtigten Einstiegsniveaus bleibt gewahrt.

3. Dynamische Pip-Berechnungen

Für Paare wie USDJPY gelten andere Pip-Konventionen (0,01) als für EURUSD (0,0001). Unser EA liest die Tickgröße und die Ziffern des Symbols und stellt sicher, dass unsere schwebenden Preise für SL und TP für jedes Instrument korrekt berechnet werden.

4. Bereinigung von nicht ausgelösten Aufträgen

Sobald ein Handel ausgelöst wird, löscht der EA sofort den entgegengesetzten Auftrag. Dies verhindert eine doppelte Belastung während chaotischer Ausschlägen.

All diese Maßnahmen sollen sicherstellen, dass unser EA mit der Disziplin eines erfahrenen menschlichen Händlers handelt – ohne Panik oder Impulsivität. Unter volatilen Bedingungen wie den NFP-Freitagen (None Farm Payroll) sind diese Schutzmaßnahmen von entscheidender Bedeutung.

Die Rolle von CTrade verstehen

Im Mittelpunkt unseres Plans steht die Klasse CTrade, eine High-Level-Verschalung für die untergeordneten Handelsfunktionen von MQL5. Ohne CTrade wären wir gezwungen, jede MqlTradeRequest- und MqlTradeResult-Struktur manuell zu erstellen, Rückgabe-Codes zu behandeln und Dutzende von Fehlerszenarien zu verwalten. CTrade kümmert sich darum:

  • Verpacken von Aufträgen mit angemessener Struktur.
  • Überprüfung der Symbolgenehmigungen und der Nachschussanforderungen.
  • Behandlung von Slippage über Einstellungen der Abweichung (deviation).
  • Verfolgung von Ticketnummern für spätere Änderungen oder Löschungen.
  • Protokollierung und Fehlerbehandlung.

In der Praxis werden wir, anstatt seitenweise Anfragelogik zu schreiben, einfach aufrufen:

trade.BuyStop(volume, price, symbol, stoploss, takeprofit);
trade.SellStop(volume, price, symbol, stoploss, takeprofit);
trade.OrderDelete(ticket);

Es ist schneller, sauberer und reduziert das Risiko von Fehlern erheblich.

Unser Integrationskonzept

Zusammenfassend lässt sich sagen, dass unsere Integration von schwebenden Aufträgen diesem konzeptionellen Ablauf folgen wird:

1. Durchsuchen des Wirtschaftskalenders, um das nächste wichtige Ereignis zu finden.

2. Berechnen des Zeitdifferenz zwischen jetzt und dem Ereignis.

3. Platzieren der schwebenden Aufträge eine bestimmte Anzahl von Minuten vor der Nachrichtenzeit:

  • Berechnen des Referenzpreis anhand des nächstgelegenen offenen M1.
  • Addieren oder subtrahieren des Pip-Offsets und anpassen der Streuung.
  • Berechnen von Stop-Loss- und Take-Profit.

4. Verwenden der Methoden von CTrade, um Buy Stop- und Sell Stop-Aufträge zu senden.

5. Überwachen der offenen Positionen:

  • Sobald ein Auftrag ausgelöst wird, wird der zweite Auftrag gelöscht.

6. Handhabung des Risikos:

  • Feste SL/TP-Abstände verwenden.
  • Sicherstellen, dass schwebende Aufträge storniert werden, wenn sie nicht mehr benötigt werden.

Dieses Konzept gewährleistet, dass wir auf blitzschnelle Bewegungen vorbereitet sind und gleichzeitig das Risiko unter Kontrolle halten.

Zusammenfassend habe ich den gesamten Entwicklungsprozess im Detail dargestellt und jeden Schritt bei der Integration der nachrichtengesteuerten Handelslogik in unseren EA hervorgehoben. Ergänzend zu dieser Erklärung habe ich auch ein Flussdiagramm beigefügt, das die Entwicklungsphasen und die wichtigsten Entscheidungen auf dem Weg dorthin visuell darstellt. Es bietet einen umfassenden Überblick für alle, die sowohl die technischen als auch die praktischen Aspekte der Umsetzung einer solchen Strategie in MQL5 verstehen wollen.

Flussdiagramm der Entwicklung

Flussdiagramm der Entwicklungsprozesse

Die oben genannten Konzepte bilden die Grundlage für die nächste Phase: die eigentliche MQL5-Implementierung. In der nächsten Phase werden wir diesen Plan in Code umsetzen, die CTrade-Logik verdrahten, sie in unsere Timer-Schleife integrieren und gründlich testen, wie sich der EA bei Live-Nachrichtenereignissen verhält.

An dieser Stelle verwandelt sich unser News Headline EA von einem reinen Informationstool in ein leistungsstarkes, autonomes Handelssystem, das in der Lage ist, innerhalb von Millisekunden zu reagieren und Chancen zu ergreifen, die kein manueller Händler so schnell ergreifen könnte.


Umsetzung

Diese Phase konzentriert sich auf den praktischen Integrationsprozess und bietet eine detaillierte Aufschlüsselung des Codes und Erklärungen, um ein klares Verständnis zu gewährleisten. Hier stellen wir die Klasse CTrade vor, die wir einbinden, indem wir ihre Header-Datei am Anfang unseres EA-Codes einfügen, wie in dem hervorgehobenen Codefragment unten gezeigt. Nehmen Sie sich die Zeit, jedes Codefragment und die dazugehörigen Erklärungen durchzugehen, um ein umfassendes Verständnis dafür zu erlangen, wie die Integration funktioniert und wie die verschiedenen Komponenten innerhalb des EA miteinander verbunden sind.

1. Handelseinrichtung und Konfiguration

Unmittelbar nach unseren Standard-Charts und AI-Insights-Variablen deklarieren wir ein einzelnes CTrade-Objekt trade; zusammen mit einer Handvoll globaler Variablen: ordersPlaced, nextEventTime und zwei Ticket-Identifikatoren (ticketBuyStop, ticketSellStop). Dieser Block befindet sich neben unseren Eingaben für Volumen, Pip-Offsets, Stop-Loss/Take-Profit in Pips und der Einstellung „Minuten vorher“. Indem wir diese unter „ORDER EXECUTION INPUTS“ zentralisieren und eine CTrade-Instanz erstellen, nutzen wir die High-Level-Methoden der MQL5-Trade-Bibliothek, während alle Parameter über den Inputs-Dialog des EAs anpassbar bleiben.

#include <Trade/Trade.mqh>
//…
CTrade trade;
bool   ordersPlaced    = false;
datetime nextEventTime = 0;
ulong  ticketBuyStop   = 0;
ulong  ticketSellStop  = 0;
//--- ORDER EXECUTION INPUTS ---
input int    InpOrderMinutesBefore  = 3;    
input double InpOrderVolume         = 0.10; 
input double InpStopOffsetPips      = 5.0;  
input double InpStopLossPips        = 20.0; 
input double InpTakeProfitPips      = 40.0; 

2. Identifizierung des nächsten Nachrichtenereignisses

In ReloadEvents() wird nach dem Abrufen und Sortieren der heutigen Ereignisse mit hoher/mittlerer/geringer Auswirkung der nextEventTime berechnet, indem der früheste Zeitstempel unter denjenigen Wichtigkeitsstufen gefunden wird, die der Nutzer für den Handel aktiviert hat. Durch das Setzen von ordersPlaced = false und das Zurücksetzen beider Ticketvariablen bei jeder Aktualisierung der Ereignisliste wird gewährleistet, dass jeder neue Nachrichtenveröffentlichungszyklus mit einer sauberen Schiefertafel beginnt – ohne verweilende Flags oder verwaiste ausstehende Aufträge.

void ReloadEvents()
{
  // … calendar fetching and sorting …

  // pick next event only from enabled levels
  datetime th = INT_MAX;
  if(InpTradeHigh && ArraySize(highArr)>0) th = MathMin(th, highArr[0].time);
  if(InpTradeMed  && ArraySize(medArr)>0)  th = MathMin(th, medArr[0].time);
  if(InpTradeLow  && ArraySize(lowArr)>0)  th = MathMin(th, lowArr[0].time);
  nextEventTime = (th==INT_MAX ? 0 : th);

  // reset order flags
  ordersPlaced   = false;
  ticketBuyStop  = ticketSellStop = 0;
}

3. Zeiteinstellung des Fensters für schwebende Aufträge

In OnTimer() vergleichen wir die aktuelle Serverzeit (jetzt) mit nextEventTime – InpOrderMinutesBefore*60. Sobald die Zeit in dieses Fenster tritt – und das ist dank unserer OrderPlaced-Wache nur einmal pro Ereignis der Fall – platzieren wir zwei schwebende Aufträge (Sell-Stop und Buy-Stop). Diese Trennung von „wann handeln“ und „wie handeln“ hält unsere Logik der Zeitplanung sauber und verhindert wiederholtes Einsteigen.

void OnTimer()
{
  datetime now       = TimeTradeServer();
  datetime placeTime = nextEventTime - InpOrderMinutesBefore*60;

  if(!ordersPlaced && nextEventTime>now && now>=placeTime)
  {
    // … compute prices and place orders …
    ordersPlaced = true;
  }

  // … rest of drawing, alerts, AI, etc. …
}

4. Pip-genaue Preise berechnen und Aufträge erteilen

Um Kursniveaus zu berechnen, die die Tick-Größe jedes Symbols berücksichtigen, holen wir SYMBOL_POINT und leiten einen „Pip“ als zehn Punkte ab – auch bei JPY-Crosses. Wir finden dann die genaue M1-Kerze, die zum Zielzeitpunkt geöffnet ist, über iBarShift + iOpen. Offsets für Einstieg, Stop-Loss und Take-Profit werden alle mit einem Pip multipliziert und zur offenen Kerze addiert oder subtrahiert. Vor dem Senden von Aufträgen wird jeder Rohpreis durch NormalizeDouble(..., SYMBOL_DIGITS) geleitet, um die Genauigkeitsanforderungen des Brokers zu erfüllen. Schließlich rufen wir trade.SetExpertMagicNumber() und trade.BuyStop(...) / trade.SellStop(...) auf. Unter der Haube wickelt die CTrade-Klasse den OrderSend()-A ufruf, die Ergebnisprüfung und die Fehlerberichterstattung ab, sodass unser EA-Code übersichtlich bleibt.

// inside the placement block in OnTimer()
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double pip   = point * 10.0;

// find the bar open at target time
int idx = iBarShift(_Symbol, PERIOD_M1, placeTime, false);
if(idx >= 0)
{
  double baseOpen = iOpen(_Symbol, PERIOD_M1, idx);
  double ask      = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
  double bid      = SymbolInfoDouble(_Symbol, SYMBOL_BID);
  double spreadPips = (ask - bid) / pip;

  double offsetP = (spreadPips + InpStopOffsetPips) * pip;
  double slP     = InpStopLossPips   * pip;
  double tpP     = InpTakeProfitPips * pip;

  double rawBuy  = baseOpen + offsetP;
  double rawSell = baseOpen - offsetP;
  double rawBsl  = rawBuy  - slP;
  double rawBtp  = rawBuy  + tpP;
  double rawSsl  = rawSell + slP;
  double rawStp  = rawSell - tpP;

  int d = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
  double buyPrice  = NormalizeDouble(rawBuy,  d);
  double sellPrice = NormalizeDouble(rawSell, d);
  double buySL     = NormalizeDouble(rawBsl,  d);
  double buyTP     = NormalizeDouble(rawBtp,  d);
  double sellSL    = NormalizeDouble(rawSsl,  d);
  double sellTP    = NormalizeDouble(rawStp,  d);

  trade.SetExpertMagicNumber(123456);
  trade.SetDeviationInPoints(10);

  ticketBuyStop  = trade.BuyStop (InpOrderVolume, buyPrice,  _Symbol, buySL,  buyTP) ? trade.ResultOrder() : 0;
  ticketSellStop = trade.SellStop(InpOrderVolume, sellPrice, _Symbol, sellSL, sellTP) ? trade.ResultOrder() : 0;
}

5. Nicht ausgelöste Aufträge bereinigen

Unmittelbar nachdem schwebenden Aufträgen platziert wurden, fährt der EA fort, PositionSelect(_Symbol) abzufragen. Wenn einer unserer Stopps in eine Live-Position umgewandelt wird, erkennen wir die ausgeführte Seite über PositionGetInteger(POSITION_TYPE) und rufen dann trade.OrderDelete() auf dem gegenüberliegenden Ticket auf. Die Aufteilung in zwei separate Anweisungen (eine zum Löschen der Bestellung, eine zum Zurücksetzen der Ticket-ID auf Null) macht die Logik kristallklar – CTrade abstrahiert erneut das Low-Level-Protokoll und stellt damit sicher, dass unsere Bereinigung zuverlässig ist.

// later in OnTimer()
if(ordersPlaced && PositionSelect(_Symbol))
{
  long ptype = PositionGetInteger(POSITION_TYPE);
  if(ptype==POSITION_TYPE_BUY && ticketSellStop>0)
  {
    trade.OrderDelete(ticketSellStop);
    ticketSellStop = 0;
  }
  if(ptype==POSITION_TYPE_SELL && ticketBuyStop>0)
  {
    trade.OrderDelete(ticketBuyStop);
    ticketBuyStop = 0;
  }
}

Alles zusammenfügen

Durch die Schichtung dieser Abschnitte – Eingaben und Globals, Ereignisauswahl, Timing, pip-korrekte Preisberechnung, CTrade-gestützte Platzierung von schwebenden Aufträgen und automatisierte Bereinigung – haben wir einen primär auf die Anzeige ausgerichteten EA in einen vollständig nachrichtengesteuerten Autopiloten verwandelt. Der Header von Trade.mqh liefert die gesamte Technik (Auftragsformatierung, Senden/Ändern/Löschen, Ticket-/Ergebnisspeicherung), sodass sich unser EA auf das „Was“ (Handelseinstellungen und Ereignis-Timing) und nicht auf das „Wie“ (Aufbau roher MqlTradeRequest-Strukturen) konzentrieren kann. Zu Ihrer Erleichterung finden Sie am Ende dieses Artikels den vollständigen, integrierten EA-Quelltext, in dem alle Teile zusammengefügt sind und den Sie kompilieren und in MetaTrader 5 laden können.


Tests

Frühes Testergebnis:

2025.07.15 13:45:02.348  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.922 sl: 148.128 tp: 147.522 [invalid price]
2025.07.15 13:49:02.373  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: buy stop 0.10 USDJPY.0 at 147.951 sl: 147.740 tp: 148.351 [invalid price]
2025.07.15 13:49:02.374  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.929 sl: 148.140 tp: 147.529 [invalid price]

In unserer frühen Testphase stieß der EA beim Versuch, schwebende Buy Stop- und Sell Stop-Aufträge zu platzieren, auf mehrere Fehler: „ungültiger Preis – ersichtlich aus Log-Einträgen wie CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.922 sl: 148.128 tp: 147.522 [ungültiger Preis]. Diese Fehler rührten von zwei wesentlichen Versäumnissen bei der ursprünglichen Implementierung her: Erstens konnte der EA symbolspezifische Pip- und Tick-Größen nicht angemessen handhaben, und zweitens versuchte er, Preise auf der Grundlage von Echtzeit-Geld-/Briefkursen zu berechnen, die schnell schwanken und gegen Broker-Beschränkungen wie Mindestabstände bei Stopps verstoßen können. Um dieses Problem zu beheben, haben wir die Logik dahingehend überarbeitet, dass sie sich auf den Eröffnungskurs der letzten abgeschlossenen M1-Kerze einige Minuten vor dem Nachrichtenereignis bezieht. Damit wurde ein stabilerer und konformerer Anker für die Berechnung der anhängigen Einfuhrpreise geschaffen.

Darüber hinaus haben wir die Pip-Größe des Symbols mit SymbolInfoDouble(SYMBOL_POINT) dynamisch abgerufen und die Pip-Werte unter Verwendung der Tick-Größen-Skalierung berechnet, um die Konsistenz für Instrumente wie USDJPY zu gewährleisten, die in der Regel 3 Stellen nach dem Komma (0,001) verwenden, im Vergleich zu 5-stelligen Instrumenten wie EURUSD (0,00010). Alle berechneten Preise wurden außerdem mit NormalizeDouble (price, digits) normalisiert, um der Genauigkeit des Symbols zu entsprechen. Diese doppelte Verfeinerung – stabiler Referenzpreis und korrekte Preisformatierung – stellt sicher, dass alle schwebenden Aufträge nun in gültige Bereiche fallen, behebt die Fehler mit ungültigen Preisen vollständig und macht den EA sicher und anpassbar für jedes Währungspaar.

Abschließende Prüfung

Bei meinen Tests konzentrierte ich mich auf ein bevorstehendes Ereignis von großer Tragweite: die GBP-Rede des BoE-Gouverneurs Bailey, die im Wirtschaftskalender des EA als „rotes Nachrichtenpaket“ erschien. Zum Zeitpunkt der Aufnahme von Testbildern zeigte der EA korrekt einen Countdown von „5 minutes remaining“ für dieses Ereignis an. Da unsere Logik so eingestellt ist, dass schwebenden Aufträgen 3 Minuten vor einer geplanten Veröffentlichung platziert werden, habe ich absichtlich weitere 2 Minuten gewartet, um zu sehen, ob der EA das Handels-Setup wie erwartet einleiten würde.

Warnfenster, das auf ein bevorstehendes Ereignis in einem Zeitraum von 5 Minuten hinweist

In der Standardkonfiguration werden die Aufträge genau 3 Minuten vor dem Zeitpunkt des Ereignisses aufgegeben. Das praktische Testen eines solchen News-Trading-EAs stellt jedoch eine besondere Herausforderung dar, insbesondere weil der MetaTrader 5 Strategy Tester nicht vollständig für die Simulation von Live-Ereignissen im Wirtschaftskalender geeignet ist. Der Strategietester arbeitet mit der Wiedergabe von Marktticks, hat aber keine Kenntnis von Echtzeit-Kalenderdaten und unterstützt auch keine asynchronen HTTP-Anfragen wie im Live-Betrieb. Das bedeutet, dass wir im Tester nicht zu den Nachrichten „vorspulen“ oder die gesamte Pipeline des EA – vom Abrufen der Schlagzeilen bis zur Platzierung der Trades – unter echten Zeitbedingungen validieren können.

Testen des EA für die Platzierung schwebender Aufträge

Um diese Einschränkung zu überwinden, besteht eine praktische Testtechnik darin, den Eingabeparameter anzupassen, der festlegt, wie viele Minuten vor dem Nachrichtenereignis anstehende Aufträge erteilt werden. Nehmen wir zum Beispiel an, dass in 50 Minuten ein echtes Nachrichtenereignis ansteht und Sie nicht fast eine Stunde warten wollen. Stattdessen können Sie die Vorlaufzeit für ausstehende Aufträge vorübergehend von den standardmäßigen 3 Minuten auf z. B. 45 Minuten einstellen. Auf diese Weise können Sie testen, ob der EA seine Logik zum Platzieren der Aufträge zeitnah und ohne lange Wartezeit auslöst. Wenn der EA bei Verwendung dieses geänderten Zeitversatzes erfolgreich Orders platziert, können Sie davon ausgehen, dass die Automatisierungslogik des EA auch in Live-Szenarien, die näher am Ereignis liegen, korrekt funktioniert.

Während meines Tests habe ich mit einem Stop-Loss und einem Take-Profit von 20 Pips experimentiert, aber ich fand das für meinen Geschmack und die Größe meines Handelskontos etwas zu groß. Für viele Privatanleger kann ein 10-Punkte-Stopp eine konservativere und praktischere Wahl sein, je nach Kontostand und Risikotoleranz. Letztendlich ist der EA so flexibel, dass Sie Ihre Stop-Loss und Take-Profit an Ihre individuelle Risikomanagement-Strategie anpassen können.



Schlussfolgerung

Was als einfaches System zur Anzeige von Nachrichten und Ereignissen begann, haben wir nun zu einer hochentwickelten Lösung für den Handel mit Nachrichten und deren Anzeige weiterentwickelt, die auf einer robusten Strategie für anstehende Bestellungen basiert. Auf dieser Reise haben wir aus erster Hand die bemerkenswerte Flexibilität von MQL5 erfahren, das sich nahtlos in externe Systeme integrieren lässt – von Maschinen für künstliche Intelligenz über Nachrichten-APIs bis hin zu den leistungsstarken integrierten Analysetools der Plattform. Dieser Prozess war schlichtweg verblüffend und hat die praktisch unendlichen Möglichkeiten offenbart, die MQL5 für den algorithmischen Handel bietet.

Unser EA hat sich zu einem nahezu vollständigen Meisterwerk des Nachrichtenhandels entwickelt, das Echtzeit-Anzeigen auf dem Chart, automatisierte Handelslogik und diszipliniertes Risikomanagement kombiniert. Dank der anpassbaren Voreinstellungen können Händler die Einstellungen feinabstimmen, um ihre optimalen Konfigurationen zu finden, und sie können den EA auf einem Virtual Private Server (VPS) einsetzen, sodass er rund um die Uhr als zuverlässiger Begleiter für den Nachrichtenhandel fungiert.

In dieser aktuellen Version haben wir unsere Tests ohne die Festlegung des News-API-Schlüssels und ohne Verbindung zum KI-Server durchgeführt. Diese bewusste Entscheidung ermöglichte es uns, uns ganz auf die Perfektionierung der Handelslogik zu konzentrieren, Stabilität zu gewährleisten und eine Leistungsüberlastung während der Tests zu vermeiden. Auch ohne diese Integrationen beobachteten wir einen reibungslosen und zuverlässigen Ablauf bei der Verarbeitung von Nachrichtenereignissen und der Handelsplatzierung.

Für diejenigen, die daran interessiert sind, den EA weiter auszubauen, habe ich die notwendigen Dateien für die Einrichtung eines lokalen KI-Modells beigefügt. Wenn Sie sich eingehender mit dieser Konfiguration befassen möchten, lesen Sie bitte den Artikel, in dem wir die einzelnen Schritte ausführlich beschrieben haben.

Obwohl der EA bereits über eine Vielzahl von Funktionen verfügt, gibt es noch reichlich Raum für zusätzliche Verbesserungen. Wenn es die Zeit und die Gelegenheit zulassen, planen wir die Veröffentlichung zukünftiger Versionen mit noch weitergehenden Funktionen.

Ich freue mich auf Ihr Feedback, Ihre Kommentare und Testergebnisse. Gemeinsam können wir dieses Instrument weiter verfeinern und die Grenzen des nachrichtenbasierten algorithmischen Handels weiter ausloten.


Wichtige Lektionen

LektionBeschreibung
Ereignisbehandlung mit OnTimerDie Verwendung der Funktion OnTimer() ermöglicht es Ihrem Expert Advisor, Aktionen nach einem festen Zeitplan auszuführen, wie z. B. die Überprüfung von Nachrichtenzeiten, die Aktualisierung von Grafiken oder die Verwaltung von Trades, ohne auf neue Ticks angewiesen zu sein.
Verwendung von CTrade für die AuftragsverwaltungDie Klasse CTrade vereinfacht das Platzieren, Ändern und Schließen von Aufträgen ohne das Schreiben von Low-Level-Code einer Handelsanfrage, was eine stabilere und wartbare Handelslogik gewährleistet.
Dynamische Array-VerwaltungDie Arbeit mit Arrays in MQL5, wie z.B. das Ändern der Größe und das Sortieren, ist entscheidend für die Verwaltung von Ereignislisten, Preisdaten oder anderen dynamischen Datensätzen.
Verarbeitung & Parsing von ZeichenkettenDas Parsen von JSON- oder Textantworten, das Trimmen von Zeichenketten und der Umgang mit Teilstrings sind unerlässlich, wenn Sie Web-APIs integrieren oder nutzerdefinierte Nutzernachrichten in Ihrem EA erstellen.
Grundsätze des RisikomanagementsDie korrekte Berechnung von Losgrößen, Stop-Loss- und Take-Profit-Abständen ist von grundlegender Bedeutung für die Erhaltung eines gesunden Kontos und die Verringerung des Risikos unvorhersehbarer Preisspitzen bei Nachrichtenereignissen.
Die Integration von WebRequestMQL5 ermöglicht das Senden von HTTP/HTTPS-Anfragen an externe Server, wodurch Funktionen wie das Abrufen von Nachrichtenschlagzeilen oder KI-Vorhersagen ermöglicht werden, die den Handelsstrategien leistungsstarke externe Daten hinzufügen.
Grafisches Zeichnen auf der LeinwandCCanvas und ähnliche Klassen ermöglichen das Zeichnen von nutzerdefinierten visuellen Elementen auf Charts, von Lauftext bis hin zu Grafiken, wodurch es möglich ist, fortschrittliche UI-Overlays direkt in MetaTrader 5-Charts zu erstellen.
Symbolspezifische PräzisionJedes Symbol kann unterschiedliche Punkt- und Pip-Größen oder Dezimalziffern haben. Passen Sie Berechnungen wie Preis-Offsets und SL/TP immer an die Genauigkeit des Symbols an, um Auftragsfehler zu vermeiden.
Magische ZahlenMagische Nummern identifizieren die Aufträge eines bestimmten EAs eindeutig, was eine sichere Verwaltung der Positionen ermöglicht und Konflikte mit anderen EAs oder manuellen Trades vermeidet.
Fehlersuche und ProtokollierungDie Verwendung von Print(), Alert() und Logging-Mechanismen hilft beim Aufspüren von Fehlern und bei der Beobachtung des EA-Verhaltens während der Entwicklung und des Live-Handels.


Anlagen

DateinameVersionBeschreibung
News Headline EA.mq51.10MetaTrader 5 Expert Advisor, der wirtschaftliche Kalenderereignisse, Alpha Vantage-Schlagzeilen, technische Indikatoren, KI-gesteuerte Markteinblicke, Warnungen, Push-Benachrichtigungen und automatische News-Trading-Ausführung mit dynamischem Pip-Handling kombiniert.
download_model.py
Python-Skript, das ein maschinelles Lernmodell herunterlädt und speichert, das für die Generierung von KI-Market Insights erforderlich ist. Stellt sicher, dass die KI-Komponente des EA die erforderliche Modelldatei für Vorhersagen lokal zur Verfügung hat.
serve_insights.pyPython-Webdienst, der lokal ausgeführt wird, um HTTP-POST-Anfragen vom EA anzunehmen und mit KI-generierten Markteinblicken zu antworten. Dient als KI-Backend für Echtzeit-Daten in dem EA-Streifen.

Zurück zum Inhalt

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/18754

Beigefügte Dateien |
download_model.py (0.28 KB)
serve_insights.py (1.77 KB)
MQL5-Assistenz-Techniken, die Sie kennen sollten (Teil 73): Verwendung von Ichimoku-Mustern und ADX-Wilder MQL5-Assistenz-Techniken, die Sie kennen sollten (Teil 73): Verwendung von Ichimoku-Mustern und ADX-Wilder
Der Ichimoku-Kinko-Hyo-Indikator und der Oszillator ADX-Wilder sind ein Paar, das ergänzend in einem MQL5 Expert Advisor verwendet werden kann. Das Ichimoku hat viele Facetten, aber in diesem Artikel verlassen wir uns hauptsächlich auf seine Fähigkeit, Unterstützungs- und Widerstandsniveaus zu definieren. Inzwischen verwenden wir auch den ADX, um unseren Trend zu definieren. Wie üblich verwenden wir den MQL5-Assistenten, um das Potenzial dieser beiden zu erstellen und zu testen.
MQL5-Handelswerkzeuge (Teil 4): Verbesserung des Dashboards des Multi-Timeframe-Scanners mit dynamischer Positionierung und Umschaltfunktionen MQL5-Handelswerkzeuge (Teil 4): Verbesserung des Dashboards des Multi-Timeframe-Scanners mit dynamischer Positionierung und Umschaltfunktionen
In diesem Artikel erweitern wir das MQL5 Multi-Timeframe Scanner Dashboard mit beweglichen und umschaltbaren Funktionen. Wir ermöglichen das Verschieben des Dashboards und eine Option zum Minimieren/Maximieren für eine bessere Bildschirmnutzung. Wir implementieren und testen diese Verbesserungen für eine verbesserte Handelsflexibilität.
Umstellung auf MQL5 Algo Forge (Teil 4): Arbeiten mit Versionen und Releases Umstellung auf MQL5 Algo Forge (Teil 4): Arbeiten mit Versionen und Releases
Wir werden die Entwicklung der Projekte Simple Candles und Adwizard fortsetzen und dabei auch die feineren Aspekte der Verwendung des Versionskontrollsystems und des Repositorys von MQL5 Algo Forge beschreiben.
Selbstoptimierende Expert Advisors in MQL5 (Teil 9): Kreuzen zweier gleitender Durchschnitte Selbstoptimierende Expert Advisors in MQL5 (Teil 9): Kreuzen zweier gleitender Durchschnitte
Dieser Artikel beschreibt den Aufbau einer Strategie des Kreuzens zweier gleitender Durchschnitte, die Signale aus einem höheren Zeitrahmen (D1) verwendet, um Einstiege auf einem niedrigeren Zeitrahmen (M15) zu steuern, wobei die Stop-Loss-Niveaus aus einem Zeitrahmen mit mittlerem Risiko (H4) berechnet werden. Es werden Systemkonstanten, nutzerdefinierte Enumerationen und Logik für trendfolgende und zum Mittelwert rückkehrende Modi eingeführt, wobei der Schwerpunkt auf Modularität und künftige Optimierung mithilfe eines genetischen Algorithmus liegt. Der Ansatz ermöglicht flexible Einstiegs- und Ausstiegsbedingungen und zielt darauf ab, die Signalverzögerung zu verringern und das Handels-Timing zu verbessern, indem Einstiegsmöglichkeiten im unteren Zeitrahmen mit Trends im oberen Zeitrahmen abgestimmt werden.