English Русский
preview
Einführung in MQL5 (Teil 33): Beherrschen der API- und WebRequest-Funktion in MQL5 (VII)

Einführung in MQL5 (Teil 33): Beherrschen der API- und WebRequest-Funktion in MQL5 (VII)

MetaTrader 5Integration |
19 0
ALGOYIN LTD
Israel Pelumi Abioye

Einführung

Willkommen zurück zu Teil 33 der Serie Einführung in MQL5. In den vorangegangenen Teilen dieser Reise haben wir uns darauf konzentriert, wie MQL5 mithilfe von APIs und der WebRequest-Funktion mit externen Plattformen kommunizieren kann. Sie haben gelernt, wie man HTTP-Anfragen sendet, Serverantworten empfängt und interpretiert, Kerzendaten organisiert, sie in Dateien speichert und diese Daten in nutzerdefinierten Indikatoren visualisiert. Mit diesen Schritten wurde eine solide Grundlage für die Arbeit mit externen Daten in MetaTrader 5 geschaffen.

In diesem Artikel verbinden wir MetaTrader 5 mit der Google Generative AI API, um einen anspruchsvollen und nützlichen Anwendungsfall zu untersuchen. Das Senden von textbasierten Abfragen, der Empfang von intelligenten Antworten, die korrekte Formatierung von Anfragekörpern, das Parsen von Serverantworten, das Extrahieren wertvoller Informationen aus JSON-Daten und die Verwaltung von API-Limits wie Abfragen pro Minute, Anfragen pro Tag und Token pro Minute werden behandelt.

Am Ende dieser Anleitung werden Sie ein gutes Verständnis dafür haben, wie AI-APIs in den MQL5 WebRequest-Workflow integriert werden. Ferner werden Sie sehen, wie diese Methode als Ersatz für das Hinzufügen anspruchsvoller Logik zu Ihren Programmen verwendet werden kann. Damit ist es möglich, intelligente Instrumente innerhalb von MetaTrader 5 zu erstellen, darunter Handelsassistenten, Lernassistenten, automatische Erklärungen oder andere clevere Funktionen, die über die herkömmliche Handelslogik hinausgehen.


Verständnis der Ratenlimits bei der API-Nutzung

Die Häufigkeit, mit der Sie Aufrufe an APIs wie die Google-API übermitteln können, ist durch integrierte Beschränkungen begrenzt. Diese Einschränkungen dienen dazu, die Systemstabilität aufrechtzuerhalten und einen gleichberechtigten Zugang für alle Nutzer zu gewährleisten. Ohne sie könnten zu viele Anfragen den Server überfordern und zu Fehlern oder Verlangsamungen führen, die nicht nur Ihre Software, sondern auch andere beeinträchtigen. Der Zweck von Ratenlimits besteht darin, den API-Verkehr zu kontrollieren und Missbrauch zu vermeiden. Sie setzen genaue Grenzen für die Häufigkeit der Kommunikation zwischen Ihrem Programm und dem Server, sei es pro Minute oder pro Tag. Dieser Ansatz ermöglicht allen Nutzern einen gleichberechtigten Zugang und verhindert, dass ein einzelner Nutzer alle Serverressourcen kontrollieren kann.

Sie können die Effizienz des Programms verbessern, indem Sie die Ratenlimits verstehen und einhalten. Um die Beschränkungen einzuhalten, können sie Strategien wie die Zusammenfassung von Anfragen, die Zwischenspeicherung von Antworten oder die Verschiebung von Anrufen anwenden. Diese Methode reduziert Fehler, sorgt für eine reibungslose Leistung und verbessert die Erfahrung von Nutzern und Entwicklern.

Analogie:

Stellen Sie sich eine Bibliothek mit einem einzigen Bücherregal vor, aus dem zahlreiche Besucher gleichzeitig Bücher ausleihen möchten. Der Bibliothekar legt fest, wie viele Bücher jeder Kunde in einer bestimmten Zeit mitnehmen darf, z. B. fünf Bände pro Minute, um Fairness zu wahren und Überfüllung zu vermeiden. In einem solchen Szenario ist der API-Server mit dem Fahrkartenschalter vergleichbar, die Fahrkarten sind die angeforderten Daten und die Regeln des Senders sind das Ratenlimit-System. Wenn zu viele Passagiere gleichzeitig einen Antrag stellen wollen, werden zusätzliche Anträge bis zur sicheren Weiterfahrt gestoppt. Dadurch wird eine Überfüllung des Schalters vermieden und sichergestellt, dass jeder Reisende den gleichen Zugang hat.

Ratenlimits werden von APIs wie der von Google durchgesetzt, um zu regeln, wie oft Ihre Software Anfragen übermitteln kann. Ähnlich wie bei der Wartezeit vor dem Erhalt zusätzlicher Tickets nach Erreichen eines persönlichen Limits, muss Ihr Programm entweder warten oder die Häufigkeit der Anfragen verringern, wenn es das Limit überschreitet. Dadurch werden Fehler durch Überlastung des Systems vermieden, der reibungslose Betrieb des Servers aufrechterhalten und eine gerechte Nutzung gefördert.

Anfragen pro Minute

Nachdem man erkannt hat, dass die Anfragen nicht unbegrenzt sind, muss man verstehen, wie Ratenlimits tatsächlich funktionieren. RPM ist die erste und wichtigste Einschränkung. Die Anzahl der einzelnen API-Aufrufe, die Ihr Programm in einer Minute an den Server senden kann, wird als Anfragen pro Minute (RPM) bezeichnet. Jedes Mal, wenn Ihr MQL5-Programm mit der API über WebRequest kommuniziert, zählt dies als eine Anfrage in Bezug auf diese Obergrenze. Ihr RPM-Verbrauch steigt unabhängig davon, wie einfach oder komplex die Anfrage ist. Wenn Ihre Software beispielsweise ein Limit von 60 RPM pro Minute hat, kann sie bis zu 60 Anfragen in einer Minute senden. Sie können mehrere Anfragen gleichzeitig stellen und müssen nicht genau eine Sekunde zwischen den Anfragen warten. Zusätzliche Anfragen können abgelehnt oder auf den Beginn der nächsten Minute verschoben werden, wenn die Zahl von 60 erreicht ist.

Ziel ist es, Ihr Programm davon abzuhalten, in kurzer Zeit zu viele Anfragen an den Server zu senden. Der Server kann langsamer werden, Fehler zurückgeben oder vorübergehend weitere Anfragen verhindern, wenn zu viele Anfragen auf einmal eingehen. API-Anbieter gewährleisten, dass alle Nutzer zuverlässig auf den Dienst zugreifen können, indem sie Beschränkungen durchsetzen. In der Praxis ist es von entscheidender Bedeutung, die Häufigkeit der von Ihrer MQL5-Software gesendeten Abfragen im Auge zu behalten. Die Schwelle von RPM kann leicht überschritten werden, wenn mehrere Anfragen gleichzeitig oder kurz hintereinander gestellt werden.

Weitere Anfragen können bis zur nächsten Minute nach Erreichen des Limits abgelehnt werden, in der Regel mit einer Fehlermeldung, die besagt, dass die maximale Anzahl von Anfragen erreicht wurde. Sie können den Zeitpunkt Ihrer letzten Anfrage überwachen und eine kleine Verzögerung vor dem Senden der nächsten Anfrage einbauen, um zu verhindern, dass die Grenzen überschritten werden. Die Wiederverwendung früherer Antworten oder die Zusammenführung mehrerer Anfragen zu einer einzigen kann ebenfalls dazu beitragen, sinnlose Anfragen zu reduzieren. Diese Techniken gewährleisten den reibungslosen Betrieb Ihres Programms und verhindern, dass Unterbrechungen die Ratenlimits überschreiten.

Anfragen pro Tag

Die RPD ist ein weiteres wichtiges Ratenlimit. RPD gibt die maximale Anzahl der Anfragen an, die Ihre Software an einem einzigen Tag senden kann, im Gegensatz zu RPM, das die Anfragen pro Minute regelt. Die Überwachung des täglichen Verbrauchs ist für MQL5-Entwickler, die mit häufigen API-Aufrufen arbeiten, unerlässlich. Die Programmausführung kann beeinträchtigt werden, wenn das RPD-Limit erreicht ist, da weitere Anfragen abgelehnt werden können, bis das tägliche Limit zurückgesetzt wird, was normalerweise um Mitternacht UTC geschieht. Sie sollten Ihr Programm optimieren, indem Sie nur notwendige Anfragen senden und, wenn möglich, bereits erfasste Daten wiederverwenden, um eine Überschreitung der RPD-Beschränkungen zu vermeiden. Die Verringerung sinnloser Aufrufe, die Zwischenspeicherung von Ergebnissen und die Zusammenfassung mehrerer Anfragen zu einer einzigen sind effiziente Möglichkeiten, um zu gewährleisten, dass Ihr Dienst den ganzen Tag über betriebsbereit ist und gleichzeitig die tägliche Obergrenze für Anfragen eingehalten wird.

Tokens pro Minute

Eine weitere entscheidende Komponente bei der Nutzung von APIs ist die Beschränkung, insbesondere bei KI-basierten APIs wie der Google Generative AI API. TPM zählt die Menge der pro Minute verarbeiteten Rechen- oder Textinhalte, im Gegensatz zu RPM oder RPD, die Anfragen zählen. Tatsächlich wird für jede Anfrage eine bestimmte Anzahl von Token verwendet, bei denen es sich im Wesentlichen um Textsegmente handelt, die sowohl die von Ihnen gesendete Aufforderung als auch die von der API generierte Antwort enthalten. Sie sorgt dafür, dass komplizierte oder umfangreiche Anfragen den API-Server nicht überfordern. Wenn Sie lange Eingabeaufforderungen senden oder umfangreiche Antworten verlangen, ist das TPM-Kontingent schnell erschöpft, obwohl Ihr Programm RPM- und RPD-Beschränkungen beibehält. Es ist von entscheidender Bedeutung, die Token-Nutzung zu überwachen, denn sobald das Limit erreicht ist, werden weitere Anfragen auf die nächste Minute verschoben oder verweigert.

Sie können die Größe von Anfrageaufforderungen reduzieren, die Erstellung von Fremdtext einschränken und, falls möglich, frühere Antworten wiederverwenden oder abschneiden, um das Limit in MQL5 effizient zu verwalten. Sie können eine nahtlose API-Kommunikation aufrechterhalten und Störungen vermeiden, die durch die Überschreitung der Token-Beschränkung pro Minute entstehen, indem Sie den Token-Verbrauch im Auge behalten und optimieren. Sie wird berechnet, indem jedes Token gezählt wird, das die API in einer Minute verarbeitet. Ein Token in KI-APIs kann eine Interpunktion, ein ganzes Wort oder ein Teil eines Wortes sein. Zum Beispiel stehen die Worte „Hallo, Welt!“ für vier Token: „Hallo“, „Welt“ und „!“. Diese Summe umfasst sowohl den von Ihnen eingereichten Anfragetext als auch die von der KI generierte Antwort.

Die API protokolliert jede Minute, wie viele Token insgesamt von allen Abfragen Ihres Programms verarbeitet wurden. Übersteigt diese Summe Ihr zulässiges TPM, so verweigert der Server vorübergehend weitere Anfragen bis zum Beginn der nächsten Minute. Dies bedeutet, dass ein erheblicher Teil Ihres Token-Kontingents durch eine einzige Anfrage mit einer großen Aufforderung oder eine Anfrage, die eine lange Antwort hervorruft, verbraucht werden kann. Die Token in jeder Anfrage und Antwort müssen addiert werden, um das TPM für Ihre MQL5-Software zu berechnen. Um die Verfolgung des Verbrauchs zu vereinfachen, bieten mehrere APIs Tools oder Felder in ihren Antworten an, die anzeigen, wie viele Token verwendet wurden. Sie können die Prompt-Größen optimieren, Ihre Aufrufe beschleunigen und sicherstellen, dass Ihr Programm innerhalb der TPM-Grenze bleibt, indem Sie die Token pro Anfrage überwachen.

Es ist wichtig, sich daran zu erinnern, dass das TPM normalerweise die Token sowohl Ihrer Eingabeaufforderung als auch der Antwort des Servers enthält, aber es schließt normalerweise andere Header oder Metadaten aus. Signifikante Token können entweder durch eine lange Aufforderung mit einer kurzen Antwort oder durch eine kurze Aufforderung mit einer langen Antwort verbraucht werden. Außerdem können verschiedene Plattformen die Token unterschiedlich zählen. Daher sollten Sie immer die entsprechende API-Dokumentation konsultieren, um zu sehen, wie das TPM berechnet wird, und um sicherzustellen, dass Ihr Programm genau verfolgt wird.


API-Schlüssel generieren

Sie müssen die Definition und Funktion eines API-Schlüssels verstehen, bevor Sie eine API nutzen können. Ein API-Schlüssel ist eine spezielle Nummer, die der API-Anbieter Ihrer Anwendung zuweist, um sie zu identifizieren. Sie ermöglicht es dem Server, die Nutzung zu überwachen und Anfragen zu authentifizieren. Die API lehnt in der Regel Anfragen ohne gültigen Schlüssel ab, da sie nicht in der Lage ist, die Quellen zu prüfen oder die Ratenlimits zu kontrollieren. Außerdem hilft der API-Schlüssel dem Dienstanbieter bei der Überwachung der Nutzung, der Durchsetzung von Ratenlimits und der Verhinderung eines unerwünschten Zugriffs auf die API. Der Server kann Ihrem Konto Beschränkungen wie RPM, RPD und TPM auferlegen, da jede Anfrage, die Sie senden, diesen Schlüssel enthält. Einfach ausgedrückt, ermöglicht das Token dem Server eine angemessene Reaktion, indem es der API mitteilt, dass „diese Anfrage von mir kommt“.

Wie bereits in diesem Beitrag erwähnt, verwenden wir für unsere Beispiele die kostenlose API von Google. Sie müssen zunächst einen API-Schlüssel erstellen, um mit der Gemini-API von Google über MQL5 zu interagieren. Je nach den API-Anforderungen enthalten entweder der Request-Body oder die WebRequest-Header diesen Schlüssel. Im folgenden Abschnitt erfahren Sie, wie Sie diesen Schlüssel Schritt für Schritt erstellen und ihn für die Verwendung in Ihren MQL5-Programmen vorbereiten.

Analogie:

Stellen Sie sich eine Bibliothek vor, in der die Besucher einen gültigen Bibliotheksausweis vorlegen müssen, um an Bücher zu gelangen. Die Karte dient zur Überprüfung der Identität des Besuchers und hilft dem Bibliothekar, die Anzahl und Häufigkeit der ausgeliehenen Bücher zu kontrollieren. Ohne sie ist der Zugang zu den Büchern verboten. In diesem Fall stehen die Bücher für die Antworten, die die API zurückgibt, der Bibliotheksausweis dient als API-Schlüssel und der Bibliothekar steht für den API-Server.

Sie müssen zunächst einen API-Schlüssel erstellen, um die Google Generative AI API nutzen zu können. Dieser Schlüssel ermöglicht es den Servern von Google, Ihre Anwendung zu identifizieren und Ihre MQL5-Anfragen zu authentifizieren. Starten Sie zunächst Ihren Browser und navigieren Sie zu aistudio.google.com. Suchen Sie nach der Option „API-Schlüssel abrufen“ und klicken Sie darauf, wenn die Seite geladen wird. Dies führt Sie zu dem Bereich, in dem Sie API-Schlüssel für die KI-Dienste von Google erstellen und kontrollieren können.

Wählen Sie anschließend „API-Schlüssel erstellen“. Es erscheint eine Aufforderung, den Schlüssel zu benennen. Dieser Name ist in erster Linie für Ihren persönlichen Gebrauch bestimmt und hilft bei der Bestimmung des Zwecks des Schlüssels, insbesondere wenn Sie beabsichtigen, in Zukunft mehrere Schlüssel zu erzeugen. Erstellen Sie den Schlüssel, nachdem Sie einen passenden Namen eingegeben haben. Google zeigt den Schlüssel auf dem Bildschirm an, nachdem er generiert wurde. Es ist wichtig, dass Sie den API-Schlüssel zu diesem Zeitpunkt kopieren und speichern. Bewahren Sie sie an einem sicheren Ort auf, z. B. in einem Passwort-Manager oder einer geschützten Textdatei. Später, wenn Sie WebRequest-Anfragen von MQL5 aus stellen, werden Sie diesen Schlüssel benötigen; wenn er verlegt oder gefährdet ist, müssen Sie möglicherweise einen neuen Schlüssel erstellen.


Senden von Google AI-Anfragen in MQL5

Der nächste Schritt nach dem Erhalt des API-Schlüssels ist das Aktivieren des Anfrageversands von MQL5 an die Google Generative AI API. Dazu muss MetaTrader 5 Zugriff auf den API-Endpunkt gewährt werden. Bevor Sie fortfahren, öffnen Sie mit der Tastenkombination Strg + O das Fenster mit den Optionen, wählen Sie die Registerkarte Expert Advisors und geben Sie die API-URL in den Bereich „WebRequest für aufgelistete URL zulassen“ ein. 

https://generativelanguage.googleapis.com

Abbildung 1. Anfrage zulassen

Da MetaTrader 5 aus Sicherheitsgründen externe Webabfragen automatisch einschränkt, ist dieser Schritt entscheidend. Sie informieren MetaTrader 5 ausdrücklich darüber, dass Ihr MQL5-Programm Anfragen an den API-Service von Google stellen darf, indem Sie diese URL angeben. Danach können Sie den MQL5-Code schreiben, der die WebRequest-Funktion verwendet, um Daten zu liefern und zu empfangen. Das Schreiben eines MQL5-Skripts, das eine WebRequest sendet, folgt als Nächstes, nachdem der API-Schlüssel generiert und die erforderliche URL zur Liste der zulässigen WebRequest von MetaTrader 5 hinzugefügt wurde. Die Erstellung der Anfrage, das Anhängen des API-Schlüssels, die Übermittlung der Daten an die Google Generative AI API und der Empfang der Antwort des Servers werden alle von diesem Skript übernommen.

Beispiel:

string API_KEY = "AbcdefCKJXiFPdvvM6f4ivPZ-zA2Qnoq6gabcde";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string url =  "https://generativelanguage.googleapis.com/v1beta/models/"
                 "gemini-2.5-flash-lite:generateContent?key=" + API_KEY;

  }

Erläuterung:

Der erste Schritt besteht darin, den API-Schlüssel zu definieren, d. h. die Google-Anmeldeinformationen, die Sie zuvor erstellt haben. Zur Authentifizierung jeder Anfrage an die Google Generative AI API ist dieser Schlüssel erforderlich. Durch die Identifizierung Ihres Kontos oder Projekts ist der Server in der Lage, die Nutzung zu verfolgen und Beschränkungen wie Token pro Minute, Anfragen pro Tag und Anfragen pro Minute aufzuerlegen. Es ist einfach, den API-Schlüssel jedes Mal wiederzuverwenden, wenn Ihre MQL5-Software eine Anfrage einreicht, wenn Sie ihn in einer Variablen speichern. Es ist auch wichtig zu wissen, wie die URL der API-Anforderung aufgebaut ist. Die Domäne, der Pfad und die Abfragezeichenfolge bilden eine vollständige URL. Die Domäne bezeichnet den Zielserver und steht für die Verwendung einer sicheren Verbindung. Er leitet die Nutzer an den Generative AI-Server von Google weiter, der in diesem Fall die eingehenden Anfragen bearbeitet.

Der Pfad, der direkt nach der Domäne folgt, gibt die genaue Ressource oder Aktion an, die der Server ausführen muss. Sie gibt das spezifische KI-Modell und die auszuführende Operation an und enthält die API-Version. Dieser Teil der URL weist den Server ausdrücklich an, was er nach Erhalt der Anfrage tun soll. Der letzte Teil ist der Query-String, der zusätzliche Informationen enthält, die für die Ausführung der Anfrage erforderlich sind. Hier wird der API-Schlüssel gesendet, damit der Server die Anfrage bestätigen kann. Mit Query-Strings sind mehrere Parameter und eine individuelle Anpassung der Anfrage möglich.

Wenn diese Komponenten kombiniert werden, wird eine vollständige URL erzeugt, die es MetaTrader 5 ermöglicht, mit der Google Generative AI API zu kommunizieren. Der Pfad gibt die auszuführende Aktion an, der Abfrage-String dient der Identifizierung, und die Domäne legt fest, wo die Anfrage gestellt wird. Diese Struktur garantiert eine genaue und sichere Kommunikation zwischen der WebRequest-Funktion und der API.

Analogie:

Der API-Schlüssel funktioniert ähnlich wie ein Bibliotheksausweis. Der API-Schlüssel identifiziert Ihre Anwendung gegenüber dem Google-Server und ermöglicht den Zugriff auf dessen KI-Dienste, ähnlich wie ein Bibliotheksausweis Ihre Identität verifiziert und Ihnen die Ausleihe von Büchern ermöglicht. Der Zugang ist beschränkt, und bei Fehlen der Karte oder des Schlüssels werden keine Antworten gegeben. Ein bestimmter Bereich innerhalb einer Bibliothek kann mit dem Pfad in der URL verglichen werden. Wenn Sie nach einem bestimmten Thema suchen, gelangen Sie direkt zu dem Abschnitt, der die gewünschten Bücher enthält. Auf ähnliche Weise sendet der Pfad Ihre Anfrage an ein bestimmtes KI-Modell und weist es an, was genau zu tun ist.

In Kombination mit dem Query-String und dem API-Schlüssel funktioniert er ähnlich wie das Vorzeigen des Ausweises und die Anfrage an der Bibliothekstheke. Der Bibliothekar prüft Ihre Angaben, bevor er Ihnen das Buch aushändigt, wenn Sie ihm Ihre Karte zeigen und das gewünschte Buch auswählen. Ebenso enthält der Query-String alle zusätzlichen Informationen, die für die Anfrage benötigt werden, und identifiziert den Anfragenden gegenüber dem Server.

Der nächste Schritt ist das Hinzufügen aller erforderlichen Parameter für WebRequest. Dies beinhaltet die Definition des Anforderungskörpers, der Kopfzeilen und der Anforderungsmethode. Diese Parameter weisen MetaTrader 5 an, welche Daten zu übermitteln sind, wie die Antwort zu interpretieren ist und wie die Interaktion mit der Google Generative AI API erfolgen soll. Ihr MQL5-Skript kann Abfragen durchführen, Antworten erhalten und die von der API zurückgegebenen Daten verwalten, wenn diese Parameter korrekt angegeben sind.

Beispiel:

string API_KEY = "AbcdyCKJXiFPdvvM6f4ivPZ-zA2Qnoq6gabcde";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string url =  "https://generativelanguage.googleapis.com/v1beta/models/"
                 "gemini-2.5-flash-lite:generateContent?key=" + API_KEY;

   string headers = "Content-Type: application/json\r\n";
   string body = "{"
                 "\"contents\": ["
                 "{"
                 "\"parts\": ["
                 "{"
                 "\"text\": \"Tell me about MQL5\""
                 "}"
                 "]"
                 "}"
                 "]"
                 "}";

   char data[];
   int copied = StringToCharArray(body, data, 0, WHOLE_ARRAY, CP_UTF8);

   if(copied > 0)
      ArrayResize(data, copied - 1);

   char result[];
   string result_headers;
   int timeout = 15000;

   int response = WebRequest("POST",url,headers,timeout,data,result,result_headers);

   if(response == -1)
     {
      Print("WebRequest failed. Error: ", GetLastError());
      return;
     }

   string response_text = CharArrayToString(result);
   Print(response_text);

  }

Erläuterung:

Die Bestimmung der Kopfzeilen der Anfrage ist der erste Schritt beim Senden einer WebRequest. Hier teilt die Kopfzeile dem Server mit, wie die Daten zu verstehen sind, indem sie angibt, dass der Inhalt im JSON-Format vorliegt. Die Deklaration garantiert, dass der Server die Anfrage angemessen bearbeiten kann, da die Google Generative AI API JSON-Abfragen erfordert. Im Wesentlichen bieten Kopfzeilen Metadaten, die die Verarbeitung der eingehenden Daten durch den Server steuern. Ihre Daten werden gemäß den API-Richtlinien aufbereitet und an den Request Body gesendet. Dazu wird ein JSON-Objekt mit einem Array „contents“ in Gemini AI verwendet, das jeweils „parts“ mit einem „text“-Feld für die AI-Frage enthält.

'{
"contents":
[
   {
 "parts": [
      {
 "text": "How does AI work?"
      }
    ]
  }
]
  }'

Dadurch wird gewährleistet, dass der Server die Nachricht genau entschlüsseln und beantworten kann. Damit die API den Textkörper verarbeiten kann, muss er sich genau an das Format halten. Die Zeichenkette wird in ein UTF-8-kodiertes Array umgewandelt, um zu gewährleisten, dass alle Zeichen, einschließlich Sonderzeichen, korrekt übertragen werden, da die WebRequest-Funktion in MQL5 den Body als Zeichenarray benötigt. Nach der Konvertierung wird ein standardmäßig hinzugefügtes Null-Zeichen entfernt, indem die Größe des Zeichenfelds geändert wird. Durch diesen Schritt wird sichergestellt, dass der Server korrekte Daten erhält, die keine fremden Zeichen enthalten, die das JSON fehlerhaft machen könnten.

Um die Informationen zu speichern, die der Server zurückgibt, werden Variablen initialisiert. Die Wartezeit wird durch eine Zeitüberschreitung geregelt, die Kopfzeilen werden einzeln gespeichert, und der Antwortkörper wird in einem Zeichenarray gespeichert. Diese Verfahren gewährleisten, dass das Skript alle vom Server zurückgegebenen Informationen genau erfassen kann. Die Funktion WebRequest verwendet die konfigurierten Kopfzeilen, den Inhalt und die Zeitüberschreitung, um die Anfrage an die URL zu stellen. Es wird ein Statuscode zurückgegeben, der angibt, ob die Anfrage erfolgreich war. Schlägt sie fehl, hält die Anwendung an und gibt den endgültigen Fehlercode aus, was eine wichtige Rückmeldung für die Fehlersuche und die Vermeidung der Verwendung falscher Daten ist.

Schließlich wird die Antwort des Servers wieder in eine Zeichenkette umgewandelt, nachdem sie als Zeichenfeld empfangen wurde. Dank dieser Konvertierung kann die Anwendung nun die von der KI erstellten Inhalte lesen, verarbeiten oder anzeigen. Der Prozess des Absendens und Empfangens einer WebRequest in MQL5 ist nun abgeschlossen, da die Antwort die Daten enthält, die von der KI auf der Grundlage der in der Anfrage angegebenen Eingabeaufforderung erzeugt wurden.

Analogie:

Die Kopfzeilen dienen dazu, dem Bibliothekar Ihre bevorzugte Liefermethode für das Buch mitzuteilen. Sie sagen im Grunde: „Bitte behandeln Sie diese Anfrage so, dass ich sie lesen und verstehen kann“, indem Sie angeben, dass der Inhalt im JSON-Format vorliegt. Der Bibliothekar könnte Ihnen das falsche Format geben oder nicht in der Lage sein, Ihre Anfrage zu bearbeiten, wenn Sie ihm diese Anweisung nicht geben.

Der Hauptteil der Anfrage ähnelt dem Brief, den Sie der Bibliothekarin oder dem Bibliothekar schreiben und in dem Sie genau beschreiben, welches Buch oder welche Informationen Sie suchen. Im Gemini AI-Handbuch heißt es, dass der Vermerk ein bestimmtes Format einhalten muss: Er muss den von Ihnen gewünschten Inhalt sowie den genauen Wortlaut und die Abschnitte jedes Elements beschreiben. Der Bibliothekar wird zum Beispiel genau wissen, welche Informationen er einholen muss, wenn Sie in die Notiz schreiben: „Wie funktioniert KI?“ Dadurch wird gewährleistet, dass die richtigen Informationen bereitgestellt werden und Ihre Anfrage angemessen interpretiert wird.

Ähnlich wie bei der Umwandlung einer Notiz in ein Format, das das Bibliothekssystem verstehen kann, wird der Textkörper in ein Zeichenfeld umgewandelt. MQL5 wandelt die Zeichenfolge in ein UTF-8-kodiertes Array um, damit der Server sie verstehen kann, ähnlich wie ein Bibliothekar einen QR-Code scannen oder Text zur Verarbeitung in einen Computer eingeben kann. Die Beseitigung des zusätzlichen Nullzeichens ist vergleichbar mit der Sicherstellung, dass die Notiz keine Fehler oder unnötigen Markierungen enthält, die den Bibliothekar verwirren könnten.

Die Variablen, die für die Antwort geliefert werden, sind vergleichbar mit einem speziellen Fach oder Notebook, in das die angeforderten Bücher oder Informationen von der Bibliothek gelegt werden. Dem Bibliothekar mitzuteilen, wie lange man bereit ist, auf die Informationen zu warten, bevor man zu einem späteren Zeitpunkt zurückkehrt, ähnelt der Verwendung der Zeitüberschreitung. Es ist so, als ob Sie dem Bibliothekar Ihren Zettel geben und darauf warten, dass er das Buch abruft, wenn die WebRequest geliefert wird. Der Bibliothekar benachrichtigt Sie mit einer Fehlermeldung, wenn etwas schief läuft, z. B., wenn die Notiz ungültig ist.

Es ist ähnlich wie beim Öffnen eines Buches oder beim Lesen einer Nachricht von der Bibliothekarin, wenn Sie die Antwort von einem Zeichenfeld in eine Zeichenkette umwandeln. Die Informationen können nun genutzt und interpretiert werden. Das Senden einer ordnungsgemäß vorbereiteten Anfrage, das Warten auf ihre Bearbeitung und der Empfang der Daten in lesbarer Form sind alles Schritte im WebRequest-Prozess, die mit dem Gang zur Bibliothek vergleichbar sind.

Ausgabe:

Abbildung 2. Server-Antwort


Extrahieren der AI-Antwort aus den Serverdaten

Sie sehen, dass die Antwort des Servers mehr als nur den von AI erzeugten Text enthält. Sie enthält zusätzliche Daten, darunter Kopfzeilen, Metadaten und Angaben zum verwendeten Modell oder zur Anfrage. Wir werden uns in diesem Kapitel darauf konzentrieren, nur die KI-Antwort aus allen zusätzlichen Daten zu extrahieren. So können Sie direkt mit dem KI-generierten Material arbeiten und dessen Anzeige, Verarbeitung oder Verwendung in Ihren MQL5-Programmen ohne überflüssige Daten vereinfachen.

Beispiel:

string pattern = "\"text\": ";
int pattern_lenght = StringFind(response_text,pattern);
pattern_lenght += StringLen(pattern);

int end = StringFind(response_text,"}",pattern_lenght + 1);
string ai_response = StringSubstr(response_text,pattern_lenght,end - pattern_lenght);

Print(ai_response);

Ausgabe:

Abbildung 3. AI-Reaktion

Erläuterung:

Zunächst wird die Zeichenfolge „text“ als „Muster“ angegeben. Dies ist der Teil der JSON-Antwort, der unmittelbar vor dem von AI erzeugten Text erscheint. Dieses Muster hilft bei der Bestimmung, wo der Inhalt der KI beginnt, da die KI-Ausgabe in einem Feld namens „Text“ in der Serverantwort enthalten ist. Der Code setzt dann eine Funktion ein, um dieses Muster in der gesamten Serverantwort zu finden. Die Funktion gibt den Index zurück, bei dem das Muster nach dem Durchsuchen des response_text beginnt. Um den Ort des Musters anzugeben, wird dieser Index in einer Variablen gespeichert. Die Länge des Musters selbst wird dann zu dieser Stelle addiert. Dadurch wird der Index an den Anfang des von der KI generierten Textes verschoben, unmittelbar nach "text":." Der Index zeigt nun auf das Anfangszeichen der KI-Antwort.

Der nächste Schritt ist das Auffinden des Endes des AI-Textes. Um die erste schließende geschweifte Klammer } nach dem Anfangsindex zu erhalten, wird eine andere Funktion verwendet. Dieser Index gibt das Ende des „Text“-Feldes der JSON-Struktur an. Eine Teilzeichenkette wird aus dem ursprünglichen Antworttext entnommen, nachdem die Anfangs- und Endstellen festgelegt wurden. Beginnend mit dem Index, der dem Muster folgt, wird die Teilzeichenkette bis zum Endindex fortgesetzt. Dadurch wird gewährleistet, dass der von der KI generierte Inhalt auf die Zeichen zwischen Anfang und Ende beschränkt ist. Eine Druckfunktion wird verwendet, um den extrahierten Text anzuzeigen, der in einer Variablen namens ai_response gespeichert wird. Dabei werden alle überflüssigen Metadaten und JSON-Formatierungen ignoriert und nur die von der KI generierten Inhalte der vollständigen Serverantwort angezeigt.

Analogie:

Die gesamte Serverantwort ähnelt einer Bücherkiste, die neben dem gesuchten Buch zusätzliche Materialien wie Notizen, Lesezeichen und Quittungen enthält. Das eigentliche Buch, an dem Sie interessiert sind, ist der von AI erstellte Text. Die Identifizierung des Labels auf dem Buchrücken ähnelt der ersten Stufe der Klassifizierung des Musters als "text":." Der Anfang des Buches innerhalb der Box wird durch dieses Label gekennzeichnet. Um zu wissen, wo man mit dem Lesen beginnen muss, ist die Suche nach diesem Muster vergleichbar mit dem Durchsuchen einer Schachtel, bis man das Label entdeckt.

Es ist so, als würde man die Schachtel auf der ersten Seite des Buches aufschlagen, das Label und das Geschenkpapier weglassen und die Länge des Musters zur Anfangsposition hinzufügen. Das Auffinden der Verschlussklammer ist ähnlich wie das Auffinden des Buches im Inneren der Schachtel. Es zeigt an, wo der Text enden soll, damit Sie nicht versehentlich auch die Begleitnotizen oder Quittungen einbeziehen.

Wenn Sie die Teilzeichenkette zwischen dem Start- und dem Stopp-Punkt extrahieren, ist das ähnlich, als würden Sie das Buch vorsichtig aus dem Karton nehmen und es von allem anderen trennen. Schließlich ist das Ausdrucken und Speichern der KI-Antwort vergleichbar mit einem Buch, das Sie auf Ihren Schreibtisch legen, um es zu nutzen oder zu lesen. Das gesamte zusätzliche Material in der Schachtel wurde entfernt, sodass Sie nur noch das Buch und die von der KI generierten Inhalte haben.

Möglicherweise wird nach dem Drucken der extrahierten AI-Antwort nicht der gesamte Text angezeigt. Dies ist auf die Begrenzung der Textanzeige im Expertenfenster von MetaTrader 5 zurückzuführen. Wir werden die KI-Antwort in eine Textdatei schreiben, um diese Einschränkung zu umgehen. Es ist einfacher, den von der KI generierten Text auszuwerten, zu analysieren oder für eine spätere Verwendung zu speichern, wenn Sie die Antwort in einer Datei speichern, die es Ihnen ermöglicht, unabhängig darauf zuzugreifen und den gesamten Inhalt ohne Einschränkungen zu lesen.

Beispiel:

string filename = "AI_RESPONSE.txt";
int handle = FileOpen(filename, FILE_WRITE|FILE_TXT|FILE_SHARE_READ|FILE_ANSI);

if(handle != INVALID_HANDLE)
  {

   FileWrite(handle, ai_response);
   FileClose(handle);
   Print("EA successfully wrote the data to " + filename);
  }
else
  {
   Print("Error opening file for writing. Error code: ", + GetLastError());
  }

Erläuterung:

Der erste Schritt ist die Wahl des Dateinamens für die AI-Antwort. Durch die Auswahl eines Dateinamens können Sie den Namen der Textdatei und den Ort, an dem sie von MetaTrader 5 gespeichert wird, auswählen. Standardmäßig befindet sich dieses Verzeichnis im Dateiverzeichnis des Terminals, sodass es später leicht zu finden ist. Danach wird die Datei mit Parametern geöffnet, die ihren Betrieb regeln. Andere Programme können gleichzeitig auf die Datei zugreifen, das Schreiben in die Datei ist möglich, sie ist als reines Textdokument eingestellt und die Textkodierung garantiert eine korrekte Lesbarkeit. Während des Vorgangs wird ein Handle erstellt, das die Datei repräsentiert.

Die Anwendung prüft, ob die Datei erfolgreich geöffnet wurde. Ist dies der Fall, wird eine zeilenweise Aufzeichnung der AI-Antwort in der Datei vorgenommen. Durch das sofortige Schließen der Datei wird sichergestellt, dass die Ressourcen freigegeben und alle Inhalte korrekt geschrieben werden. Das erfolgreiche Schreiben der Daten wird durch eine Meldung im Expertenfenster angezeigt. Wenn die Datei nicht geöffnet werden kann, werden eine Fehlermeldung und ein Fehlercode angezeigt, zusammen mit Informationen über mögliche Ursachen wie falsche Dateieinstellungen oder eingeschränkte Zugriffsrechte.

Analogie:

Dieses Verfahren ist vergleichbar mit dem Anlegen und Verwenden eines Notizblocks, um Material, das man später lesen möchte, in einem Bücherregal zu speichern. Die Auswahl des Dateinamens ist zunächst ähnlich wie die Auswahl des Titels eines neuen Notizbuchs. Wenn Sie später zum Bücherregal zurückkehren, können Sie anhand des Titels erkennen, was sich in dem Notizbuch befindet. Das Öffnen der Datei ist vergleichbar mit dem Öffnen eines Notizbuchs auf einem Tisch, nachdem es aus dem Regal genommen wurde. Das Notizbuch kann nach den Regeln verwendet werden, die Sie beim Öffnen festlegen. Wenn das Schreiben erlaubt ist, können die Notizen im Inneren geschrieben werden. Wenn Sie es als Textnotizbuch bezeichnen, schreiben Sie einfache Wörter anstelle von Abbildungen oder einzigartigen Symbolen.

Das ist so ähnlich, wie wenn Sie jemandem erlauben, auf Ihren Notizblock zu schauen, während Sie noch schreiben, wenn Sie das gemeinsame Lesen erlauben. Die Auswahl des Textformats garantiert, dass der getippte Inhalt von jedem, der das Notizbuch öffnet, gelesen werden kann. Die Überprüfung, ob die Datei ordnungsgemäß geöffnet wurde, ist vergleichbar mit der Überprüfung, ob das Notizbuch geöffnet wurde und ob es keine eingeklemmten Seiten oder fehlende Umschläge gab. Sie können bequem mit dem Schreiben beginnen, wenn sich das Notizbuch richtig öffnet. Anstatt zu versuchen, auf ein geschlossenes Buch zu schreiben, hält man inne und untersucht, was schiefgelaufen ist, wenn es sich nicht öffnen lässt.

 

Schlussfolgerung

In diesem Artikel haben Sie gelernt, wie Sie MetaTrader 5 mit der Google Generative AI API unter Verwendung von MQL5 verbinden können, angefangen von der Kenntnis der API-Ratenlimits, der Generierung eines API-Schlüssels und der Vorbereitung Ihrer Umgebung bis zum Senden von Anfragen mit WebRequest, der korrekten Strukturierung von Anfragekörpern, dem Extrahieren nur der AI-Antwort aus den Serverdaten und schließlich dem Speichern dieser Antwort in einer Textdatei, um die Anzeigebeschränkungen des Expertenfensters zu umgehen. Zusammengenommen zeigen diese Schritte, wie KI-APIs praktisch in MQL5-Programme integriert werden können. Damit wird eine solide Grundlage für den Aufbau intelligenter Tools wie Assistenten, Analysatoren und anderer intelligenter Funktionen geschaffen, die über die traditionelle Handelslogik hinausgehen.

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

Beigefügte Dateien |
Python-MetaTrader 5 Strategietester (Teil 03): MetaTrader 5-ähnliche Handelsoperationen – Handhabung und Verwaltung Python-MetaTrader 5 Strategietester (Teil 03): MetaTrader 5-ähnliche Handelsoperationen – Handhabung und Verwaltung
In diesem Artikel stellen wir Python-MetaTrader 5-ähnliche Wege vor, um Handelsoperationen wie das Öffnen, Schließen und Ändern von Aufträgen im Simulator zu handhaben. Um sicherzustellen, dass sich die Simulation wie MetaTrader 5 verhält, ist eine strenge Validierungsschicht für Handelsanfragen implementiert, die die Parameter des Symbolhandels und die typischen Brokerage-Einschränkungen berücksichtigt.
Larry Williams’ Geheimnisse des Marktes (Teil 6): Messung von Volatilitätsausbrüchen anhand der Swings des Marktes Larry Williams’ Geheimnisse des Marktes (Teil 6): Messung von Volatilitätsausbrüchen anhand der Swings des Marktes
Dieser Artikel zeigt, wie ein Expert Advisor für den Ausbruch der Volatilität nach Larry Williams in MQL5 entworfen und implementiert werden kann, wobei die Messung der Swing-Range, die Prognose des Eröffnungsniveaus, die risikobasierte Positionsgrößenbestimmung und das Backtesten anhand realer Marktdaten behandelt werden.
Larry Williams‘ Geheimnisse des Marktes (Teil 7): Eine empirische Untersuchung zum Konzept des Handelstages der Woche Larry Williams‘ Geheimnisse des Marktes (Teil 7): Eine empirische Untersuchung zum Konzept des Handelstages der Woche
Eine empirische Untersuchung des Konzepts „Trade Day of the Week“ von Larry Williams, die zeigt, wie zeitbasierte Marktverzerrungen mit MQL5 gemessen, getestet und angewendet werden können. In diesem Artikel wird ein praktischer Rahmen für die Analyse von Gewinnquoten und Performance über Handelstage hinweg vorgestellt, um kurzfristige Handelssysteme zu verbessern.
Statistische Arbitrage durch kointegrierte Aktien (Teil 9): Backtests, Portfolio-Gewichtungen, Updates Statistische Arbitrage durch kointegrierte Aktien (Teil 9): Backtests, Portfolio-Gewichtungen, Updates
Dieser Artikel beschreibt die Verwendung von CSV-Dateien für das Backtesting von Aktualisierungen der Portfoliogewichte in einer auf der Rückkehr zum Mittelwert basierenden Strategie, die statistische Arbitrage durch kointegrierte Aktien nutzt. Sie reicht von der Einspeisung der Ergebnisse der Rolling Windows Eigenvektor Comparison (RWEC) in die Datenbank bis zum Vergleich der Backtest-Berichte. In der Zwischenzeit werden in dem Artikel die Rolle der einzelnen RWEC-Parameter und ihre Auswirkung auf das Gesamtergebnis des Backtests detailliert beschrieben und gezeigt, wie der Vergleich des relativen Drawdowns uns helfen kann, diese Parameter weiter zu verbessern.