
Integration von Discord mit MetaTrader 5: Aufbau eines Handels-Bots mit Echtzeit-Benachrichtigungen
Einführung
Die Fähigkeit, Handelsaktivitäten aus der Ferne zu überwachen und zu steuern, ist auf dem heutigen, schnelllebigen Handelsmarkt immer wichtiger geworden. Eine der möglichen Lösungen zur Implementierung einer solchen Fernüberwachungsfunktion ist die Integration von Discord-Benachrichtigungen in MetaTrader 5. Durch den Empfang von Benachrichtigungen auf Ihrer Discord-App können Sie Ihre Aktivitäten in Echtzeit von jedem Ort aus überwachen. In diesem Artikel werden wir ein reales Beispiel für einen Zufalls-Handelsbot verwenden, um Ideen und Implementierungsschritte zu veranschaulichen. Wir werden also eine zuverlässige Kommunikation zwischen MetaTrader 5 und der Discord-Plattform herstellen, über die Sie Echtzeit-Benachrichtigungen über Handelsausführungen, Marktveränderungen und andere Alarme erhalten können.
In diesem Artikel werden wir sehen, welche Einstellungen Sie auf der Plattformseite vornehmen müssen, um diese Art der Integration zu ermöglichen. Insbesondere werden wir die WebRequest-Einstellungen sehen, die es Ihnen ermöglichen, die Plattform mit anderen Ressourcen wie Discord und anderen Instant Messengern zu verbinden. Wir werden auch sehen, wie Sie Ihren Discord-Server so konfigurieren, dass er in der Lage ist, Benachrichtigungen von MetaTrader 5 zu empfangen.
Das in diesem Artikel behandelte Material erfordert einige Vorkenntnisse der MQL5-Programmierung und eine gute Kenntnis der Funktionsweise der Plattform.
Konfiguration von Discord und MetaTrader 5
Sie müssen diese beiden https hinzufügen und überprüfen, ob die angegebene URL Webanfragen zulässt:
Neben dem Erstellen und Kopieren eines Webhooks müssen Sie auch einen Server einrichten (oder einen bereits in Discord vorhandenen verwenden).
EA Code Beispiel
Vergessen Sie nicht, im Expert Advisor den Link zum WebHook einzufügen.
#include <Trade/Trade.mqh> CTrade trade; // Discord webhook URL - Replace with your webhook URL string discord_webhook = "https://discord.com/api/webhooks/XXXXXXXXXXXXXXXXXXXXXXXXX"; // Strategy Parameters
*** Ich weiß nicht warum, aber der Webhook muss von discordapp.com auf discord.com geändert werden.
Hier sehen Sie, wie wir die Grundeinstellungen unseres MetaTrader 5 Expert Advisors für Discord einrichten:
string discord_webhook = "https://discord.com/api/webhooks/your-webhook-url"; input group "Discord Settings" input string DiscordBotName = "MT5 Trading Bot"; input color MessageColor = clrBlue; input bool SendPriceUpdates = true;
Die wichtigste Verbindung zwischen Discord und Ihrem MetaTrader 5 Expert Advisor ist die Webhook-URL. Außerdem haben wir Eingaben hinzugefügt, die die Nutzer anpassen können, um das Aussehen und Verhalten des Bots zu ändern. Diese Optionen sorgen für Flexibilität bei der Integration und ermöglichen es den Händlern, das System an ihre eigenen Anforderungen anzupassen.
Ein entscheidender Schritt zur Gewährleistung einer zuverlässigen Verbindung zwischen MetaTrader 5 und Discord ist die Aktivierung. In dieser Phase müssen wir bestätigen, dass der Discord-Webhook ordnungsgemäß funktioniert und dass der Expert Advisor über die erforderliche Berechtigung zur Übermittlung von Webanfragen verfügt. Zu diesem Überprüfungsprozess gehören mehrere wichtige Tests:int OnInit() { Print("Initialization step 1: Checking WebRequest permissions..."); if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) { Print("Error: WebRequest is not allowed. Please allow in Tool -> Options -> Expert Advisors"); return INIT_FAILED; } string test_message = "{\"content\":\"Test message from MT5\"}"; string headers = "Content-Type: application/json\r\n"; char data[], result[]; ArrayResize(data, StringToCharArray(test_message, data, 0, WHOLE_ARRAY, CP_UTF8) - 1); int res = WebRequest( "POST", discord_webhook, headers, 5000, data, result, headers ); if(res == -1) { Print("Make sure these URLs are allowed: https://discord.com/*, https://discordapp.com/*"); return INIT_FAILED; } return(INIT_SUCCEEDED); }
Um die Discord-Benachrichtigungen sowohl lehrreich als auch ästhetisch ansprechend zu gestalten, ist die Formatierung der Nachrichten wichtig. Da die Markdown-Formatierung von Discord unterstützt wird, können wir unsere Nachrichten so organisieren, dass wichtige Informationen hervorgehoben werden. Wir haben eine gründliche Methode zur Formatierung von Handelsdaten entwickelt, die es einfach macht, die Besonderheiten von jedem Handelsgeschäft schnell zu verstehen:
string FormatTradeMessage(TradeInfo& tradeInfo) { string message = "**New " + tradeInfo.type + " Signal Alert!**\n"; message += "Symbol: " + tradeInfo.symbol + "\n"; message += "Type: " + tradeInfo.type + "\n"; message += "Price: " + DoubleToString(tradeInfo.price, _Digits) + "\n"; message += "Lots: " + DoubleToString(tradeInfo.lots, 2) + "\n"; message += "Stop Loss: " + DoubleToString(tradeInfo.sl, _Digits) + "\n"; message += "Take Profit: " + DoubleToString(tradeInfo.tp, _Digits) + "\n"; message += "Time: " + TimeToString(TimeCurrent()); return message; }
Die korrekte Handhabung von Sonderzeichen ist bei der Arbeit mit JSON-Daten in MetaTrader 5 von entscheidender Bedeutung, um falsche JSON-Strings zu vermeiden, die zu einer erfolglosen Nachrichtenübermittlung führen könnten. Eine starke JSON-Escaping-Methode, die alle gängigen Sonderzeichen verarbeiten kann, ist Teil unserer Implementierung:
string EscapeJSON(string text) { string escaped = text; StringReplace(escaped, "\\", "\\\\"); StringReplace(escaped, "\"", "\\\""); StringReplace(escaped, "\n", "\\n"); StringReplace(escaped, "\r", "\\r"); StringReplace(escaped, "\t", "\\t"); return escaped; }
Die Funktion SendDiscordMessage sorgt für die zuverlässige Übermittlung von Nachrichten vom MetaTrader 5 an Discord über die Webhook-API von Discord. Im Kern nimmt diese Funktion eine Nachrichtenzeichenkette und ein optionales Fehlerflag als Parameter und wandelt sie in eine korrekt formatierte HTTP-Anfrage um, die die Discord-Server verstehen und verarbeiten können.
Die Funktion beginnt mit einer Sicherheitsprüfung, bei der überprüft wird, ob Webanfragen über das Flag isWebRequestEnabled aktiviert sind. Dieser Überprüfungsschritt verhindert jegliche Kommunikationsversuche, wenn die MetaTrader 5-Plattform nicht über die erforderlichen Berechtigungen verfügt, und vermeidet so mögliche Systemabstürze. Wenn Webanfragen nicht aktiviert sind, gibt die Funktion sofort false zurück, was bedeutet, dass die Nachricht nicht gesendet werden konnte.
Beim Aufbau der Nachricht verwendet die Funktion visuelle Markierungen zur besseren Lesbarkeit. Es stellt entweder ein rotes X-Emoji (❌) für Fehlermeldungen oder ein grünes Häkchen-Emoji (✅) für erfolgreiche Vorgänge voran. Diese visuellen Hinweise ermöglichen es den Händlern, die Art der Benachrichtigungen in ihrem Discord-Kanal auf einen Blick zu erkennen.
Die Nachricht wird dann in eine JSON-Nutzlast verpackt, das ist das Format, das die API von Discord erwartet. Die Funktion EscapeJSON (die innerhalb der Payload-Konstruktion aufgerufen wird) spielt hier eine wichtige Rolle, da sie sicherstellt, dass Sonderzeichen in der Nachricht die JSON-Struktur nicht zerstören. Dazu gehört auch die Behandlung von Anführungszeichen, Zeilenumbrüchen und anderen Sonderzeichen, die andernfalls Fehler beim Parsen verursachen könnten.
Die Funktion richtet die richtigen HTTP-Header ein und gibt insbesondere an, dass der Inhaltstyp JSON ist. Diese Header-Informationen sind wichtig, da sie den Discord-Servern mitteilen, wie die eingehenden Daten zu interpretieren sind. Der Content-Type-Header ist auf „application/json“ eingestellt, was dem Standard für REST-API-Kommunikation entspricht.
Zu den eher technischen Aspekten gehört die Umwandlung der Zeichenketten-Nutzlast in ein Char-Array. Diese Umwandlung ist notwendig, weil die WebRequest-Funktion von MetaTrader 5 binäre Daten und keine einfachen Zeichenketten erwartet. Die Funktion ArrayResize stellt sicher, dass das Char-Array die richtige Größe hat, um die konvertierte Nachricht zu speichern. Dabei wird die UTF-8-Kodierung berücksichtigt, die für die korrekte Behandlung von Sonderzeichen und Emojis unerlässlich ist.
Die eigentliche Kommunikation erfolgt über den Funktionsaufruf WebRequest, der eine POST-Anfrage an die Discord-Webhook-URL sendet. Die Funktion umfasst mehrere wichtige Parameter:
- Ein Timeout-Wert von 5000 Millisekunden (5 Sekunden), um zu verhindern, dass sich das System aufhängt, wenn die Discord-Server zu langsam reagieren.
- Die vorbereiteten Kopfzeilen und Daten.
- Arrays zum Speichern der Antwortdaten und Kopfzeilen.
Die Funktion überwacht den Erfolg der Nachrichtenübermittlung durch HTTP-Antwortcodes. Ein Antwortcode von 200 oder 204 bedeutet eine erfolgreiche Zustellung (200 bedeutet Erfolg mit zurückgesandtem Inhalt, 204 bedeutet Erfolg ohne Inhalt). Wird ein Erfolg festgestellt, aktualisiert die Funktion den Zeitstempel lastMessageTime, der zur Ratenbegrenzung verwendet werden kann, und gibt true zurück, um die erfolgreiche Zustellung anzuzeigen.
In Fällen, in denen die Nachricht nicht gesendet werden kann (angezeigt durch einen anderen Antwortcode als 200 oder 204), gibt die Funktion false zurück, sodass der aufrufende Code den Fehler entsprechend behandeln kann. Dieser Fehlerbehandlungsmechanismus ermöglicht die Implementierung einer Wiederholungslogik oder alternativer Benachrichtigungsmethoden, wenn die Discord-Kommunikation fehlschlägt.
Diese Implementierung schafft einen robusten und zuverlässigen Kommunikationskanal zwischen MetaTrader 5 und Discord, der alle Komplexitäten der plattformübergreifenden Kommunikation bewältigt und gleichzeitig dem aufrufenden Code eine klare Rückmeldung über Erfolg und Misserfolg gibt. Die Beachtung der korrekten Fehlerbehandlung, Zeichenkodierung und API-Konformität macht diese Funktion zu einer zuverlässigen Kernkomponente des Discord-Integrationssystems.
bool SendDiscordMessage(string message, bool isError = false) { if(!isWebRequestEnabled) return false; message = (isError ? "❌ " : "✅ ") + message; string payload = "{\"content\":\"" + EscapeJSON(message) + "\"}"; string headers = "Content-Type: application/json\r\n"; char post[], result[]; ArrayResize(post, StringToCharArray(payload, post, 0, WHOLE_ARRAY, CP_UTF8) - 1); int res = WebRequest( "POST", discord_webhook, headers, 5000, post, result, headers ); if(res == 200 || res == 204) { lastMessageTime = TimeCurrent(); return true; } return false; }
Wir haben unsere Discord-Integration in die Praxis umgesetzt, indem wir eine grundlegende Zufallsmethode für den Handel eingeführt haben. Diese Taktik zeigt, wie man erfolgreich Handelslogik mit Discord-Warnungen kombinieren kann, auch wenn ihr Hauptzweck ein pädagogischer ist:
void PlaceRandomTrade() { bool isBuy = (MathRand() % 2) == 1; double price = isBuy ? SymbolInfoDouble(_Symbol, SYMBOL_ASK) : SymbolInfoDouble(_Symbol, SYMBOL_BID); int slPoints = 50 + (MathRand() % 100); int tpPoints = 50 + (MathRand() % 100); double sl = isBuy ? price - slPoints * _Point : price + slPoints * _Point; double tp = isBuy ? price + tpPoints * _Point : price - tpPoints * _Point; TradeInfo tradeInfo; tradeInfo.symbol = _Symbol; tradeInfo.type = isBuy ? "BUY" : "SELL"; tradeInfo.price = price; tradeInfo.lots = LotSize; tradeInfo.sl = sl; tradeInfo.tp = tp; string message = FormatTradeMessage(tradeInfo); if(SendDiscordMessage(message)) { trade.SetExpertMagicNumber(magicNumber); bool success = isBuy ? trade.PositionOpen(_Symbol, ORDER_TYPE_BUY, LotSize, price, sl, tp, "Random Strategy Trade") : trade.PositionOpen(_Symbol, ORDER_TYPE_SELL, LotSize, price, sl, tp, "Random Strategy Trade"); if(success) { SendDiscordMessage("✅ Trade executed successfully! Ticket: " + IntegerToString(trade.ResultOrder())); } } }
Für Händler, die Kursbewegungen im Auge behalten wollen, ohne ihre Handelsplattform ständig zu überwachen, können regelmäßige Marktaktualisierungen sehr hilfreich sein. Wir haben eine Funktion zur Preisaktualisierung eingerichtet, die Discord regelmäßig aktualisiert:
void SendPriceUpdate() { if(!SendPriceUpdates) return; if(TimeCurrent() - lastMessageTime < 300) return; string message = "```\n"; message += "Price Update for " + _Symbol + "\n"; message += "Bid: " + DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_BID), _Digits) + "\n"; message += "Ask: " + DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_ASK), _Digits) + "\n"; message += "Spread: " + DoubleToString(SymbolInfoInteger(_Symbol, SYMBOL_SPREAD), 0) + " points\n"; message += "```"; SendDiscordMessage(message); }
Wenn der Expert Advisor beendet wird, enthält die Implementierung die folgenden geeigneten Reinigungsverfahren:
void OnDeinit(const int reason) { SendDiscordMessage("```\nEA stopped. Reason code: " + IntegerToString(reason) + "```"); }
Beispiel Ergebnis
Bei diesem Integrationsbeispiel sollten Sie folgendes beachten:
Sicherheit und Webhook-Management
Bei der Integration von Discord in eine Produktionsumgebung müssen einige entscheidende Faktoren beachtet werden. Sicherheit geht vor. Da jeder, der Zugriff auf die Webhook-URL hat, Nachrichten in Ihrem Discord-Kanal posten kann, sollten diese als sensible Daten behandelt werden. Um die Webhook-URL zu schützen, empfiehlt es sich, entweder Verschlüsselungstechniken anzuwenden oder sie in einer sicheren Konfigurationsdatei zu speichern.
Ein weiterer wichtiger Faktor ist die Zuverlässigkeit des Netzes. Bei der API von Discord kann es gelegentlich zu Ausfällen oder Geschwindigkeitsbegrenzungen kommen, und Internetverbindungen können unregelmäßig sein. Um mit diesen Umständen höflich umzugehen, sollte Ihre Lösung starke Fehlerbehandlungs- und Wiederholungsfunktionen enthalten. Dies könnte bedeuten, dass eine Nachrichtenwarteschlange für die Wiederholung erfolgloser Versuche geführt wird und ein exponentielles Backoff-Verfahren für fehlgeschlagene Nachrichten eingesetzt wird.
Überlegungen zur Leistung
Entscheidend ist auch die Verbesserung der Leistung, insbesondere bei Hochfrequenzhandelssystemen. Discord-Warnungen sind hilfreich, aber sie sollten keinen Einfluss darauf haben, wie gut Ihre Handelslogik funktioniert. Um Discord-Interaktionen zu verwalten, ohne Ihre primären Handelsaktivitäten zu beeinträchtigen, sollten Sie darüber nachdenken, einen separaten Thread einzurichten oder eine asynchrone Nachrichtenwarteschlange zu verwenden.
Es gibt mehrere Methoden, um die Möglichkeiten der Discord-Integration zu erweitern. Sie können beispielsweise Funktionen wie Echtzeit-Performance-Indikatoren, wie Handelsstatistiken und Gewinn-/Verlustberechnungen, einbeziehen. Warnungen aus dem Risikomanagement, die Sie darüber informieren, wenn bestimmte Risikostufen erreicht sind. Sie sollten auch den Zustand des Systems überwachen, einschließlich der Fehlerraten und der Discord-basierten nutzerdefinierten Befehle, mit denen Sie Parameter ändern oder den Status Ihres Handelssystems überprüfen können.Um diese Ergänzungen in die Praxis umzusetzen, müssen Sie sich genau überlegen, wie Sie die verschiedenen Arten von Informationen richtig anordnen und wie Sie Ihre Mitteilungen strukturieren. Es ist möglich, den Markdown-Stil von Discord zu verwenden, um visuell eindeutige Nachrichten für verschiedene Benachrichtigungsarten zu erstellen, was die schnelle Identifizierung wichtiger Informationen erleichtert.
Wie auch immer, es ist immer gut, ein Gleichgewicht zwischen dem Angebot hilfreicher Informationen und der Vermeidung einer Informationsflut zu finden, wenn neue Funktionen hinzugefügt werden. Denken Sie an die wichtigsten Benachrichtigungen. Vielleicht möchten Sie bestimmte Benachrichtigungsarten oder bestimmte Webhook-URLs für verschiedene Nachrichtenkategorien deaktivieren.
Praktische Anwendungsfälle
Im Folgenden finden Sie einige mögliche praktische Anwendungen für diese Discord-Integration:
- Portfolio-Management: Verfolgung mehrerer Handelstechniken über verschiedene Konten hinweg.
- Gefahrenmanagement: Sofortige Benachrichtigung, wenn die voreingestellten Werte überschritten werden.
- Häufige Informationen über die Leistung der Strategie und die Marktbedingungen.
- Austausch von Marktanalysen und Handelssignalen mit einem Handelsteam.
Der Ansatz, über den wir gesprochen haben, bietet diesen Anwendungen eine solide Grundlage und ist gleichzeitig anpassungsfähig genug, um bestimmte Anforderungen zu erfüllen. Ein Verständnis der technischen Aspekte der Integration sowie der realen Anforderungen der Händler, die das System nutzen werden, ist für eine effektive Einführung unerlässlich.
Die Aufrechterhaltung der zuverlässigen Funktionalität der Discord-Integration erfordert regelmäßige Tests und Beobachtungen. Dazu gehört es, die Zustellungsrate von Nachrichten im Auge zu behalten, erfolglose Mitteilungen aufzuspüren und dafür zu sorgen, dass alle wichtigen Benachrichtigungen rechtzeitig verschickt werden. Denken Sie darüber nach, ein Protokollierungssystem einzurichten, das alle Discord-Unterhaltungen und alle auftretenden Fehler aufzeichnet, damit Sie eventuelle Probleme sofort finden und beheben können.
Ihre Kreativität und Ihr Handelsbedarf sind die einzigen Grenzen für die vielen Möglichkeiten, diese Verbindung zu erweitern und zu verbessern. Sie können ein starkes Kommunikationssystem aufbauen, das Ihre Handelsabläufe verbessert und es Ihnen ermöglicht, sich von jedem Ort der Welt aus über Ihre Handelsaktivitäten auf dem Laufenden zu halten, indem Sie mit dieser soliden Grundlage beginnen und nach und nach Funktionen hinzufügen, die auf Feedback und praktischer Nutzung basieren.
Überwachung und Wartung
Denken Sie daran, dass es für einen erfolgreichen Handel ebenso wichtig ist, über die richtigen Ressourcen und Kenntnisse zu verfügen wie über solide Techniken. Diese Discord-Integration ist ein unverzichtbares Werkzeug für moderne Händler, da sie eine wichtige Verbindung zwischen Ihrem automatisierten Handelssystem und Ihrer Fähigkeit herstellt, die Marktbedingungen sofort zu verfolgen und darauf zu reagieren.
Schlussfolgerung
Zusammenfassend lässt sich sagen, dass die Integration von Discord in den MetaTrader 5 eine weitere nützliche Lösung ist, die Händlern eine Möglichkeit bietet, Marktumstände zu verfolgen und darauf zu reagieren. Die Vorteile von Echtzeit-Benachrichtigungen, Teamkommunikation und Fernüberwachungsfunktionen machen es sehr nützlich und bequem. Sie werden jedoch etwas Zeit und Wissen benötigen, um sie umzusetzen. Außerdem müssen Sie sehr vorsichtig sein und auf Sicherheit, Netzwerkzuverlässigkeit und Leistungsoptimierung achten. Die Möglichkeit verbesserter Funktionen wie Sprachkanal-Benachrichtigungen, interaktive Anweisungen und auf maschinellem Lernen basierende Alarmfilterung bietet noch mehr Möglichkeiten für die Effizienz des Handels, da sich beide Plattformen weiterentwickeln. Unabhängig von ihrem Aufenthaltsort können Händler ihre Handelsaktivitäten besser kontrollieren und sicherstellen, dass sie keine wichtigen Marktbewegungen oder Handelssignale verpassen, indem sie diese entscheidende Verbindung zwischen automatisierten Handelssystemen und Echtzeitkommunikation herstellen. Datei | Pfad zum Speichern |
---|---|
Discord_examples.mq5 | Speichern Sie diese in dem folgenden Ordner: MQL5/Experts/ |
Mit freundlichen Grüßen, Javier S. Gastón de Iriarte Cabrera
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/16682





- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.