
Verwendung des JSON Data APIs in Ihren MQL-Projekten
Einführung und Hintergrund
Die Einbeziehung externer Daten könnte die Entscheidungsfindung im algorithmischen Handel verbessern. APIs ermöglichen den Datentransfer zwischen verschiedenen Systemen und helfen den Händlern, auf verschiedene Datenquellen zuzugreifen, z. B. auf Echtzeit-Marktdaten von anderen Brokern und Banken, auf Wirtschaftsindikatoren (nicht nur auf Wirtschaftskalender), auf Nachrichten-Feeds oder soziale Stimmungsanalysen, auf Online-Tools für künstliche Intelligenz, auf Online-Prognosesysteme oder auf alles, was Sie sich vorstellen können, das in API-Diensten verfügbar ist. In diesem Artikel zeigen wir Ihnen, wie Sie dieses Tool am besten nutzen können.
Die Verwendung von API-Daten in Expert Advisors (EA) kann Ihnen neue und bessere Einblicke in den Handelsmarkt geben, die Ihnen helfen, fundierte Entscheidungen zu treffen, dynamischere Handelsstrategien zu entwickeln und Risiken besser zu verwalten. Mithilfe von API-Daten können Händler die Genauigkeit von Handelssignalen durch fortschrittliche technische Indikatoren und hochentwickelte Charting-Tools verbessern. Diese Integration erweitert die Möglichkeiten von Plattformen wie MetaTrader und bietet Zugang zu wertvoller Marktintelligenz wie der Verarbeitung natürlicher Sprache (NLP) für die Analyse der Marktstimmung und den Zugang zu Fundamentaldaten und Nachrichten.
Einführung in die Ziwox API
Ziwox ist ein Datenanalysesystem für Forex, das kostenlose API-Dienste enthält. Diese API bietet Händlern umfassende Marktdaten, darunter Kurse, technische Indikatoren, Stimmungsanalysen und Fundamentaldaten. Es unterstützt wichtige und weniger wichtige Devisenpaare und liefert wichtige Metriken, wie z. B. fundamentale Währungsvorteile, KI-basierte Prognosen, Statistiken für Einzelhändler, COT-Berichte, technische Unterstützungen und Widerstände, Marktstimmung (Risk-on und Risk-off), Anleiherenditen und VIX-Index. Dieser umfangreiche Datensatz ermöglicht eine facettenreiche Marktanalyse, bei der technische, fundamentale und stimmungsbezogene Erkenntnisse kombiniert werden, um bahnbrechende Tools zu entwickeln.
Das Interessante an diesen Daten ist, dass wir neben Kursen und technischen Daten auch Zugang zu Daten haben werden, die von künstlicher Intelligenz oder echten Analysten generiert werden. Zu diesen Daten gehören unter anderem: Fundamentalanalyse für Forex-Paare durch ein Analystenteam, NLP (Natural Language Processing) Systemausgaben als Forex-Nachrichten-Stimmung, Preisprognose durch AI generiert.
Die API ist einfach zu nutzen. Es ist eine einfache Anmeldung erforderlich, um einen API-Schlüssel zu generieren und auf Daten im JSON- oder Textformat zuzugreifen. Diese Zugänglichkeit zusammen mit der umfangreichen Datenabdeckung macht es zu einem unschätzbaren Werkzeug für die Verbesserung von Handelsstrategien und die Entwicklung von nutzerdefinierten Indikatoren oder automatisierten Handelssystemen.
Machen wir uns ein wenig vertrauter: Was ist ein API?
APIs (Programmierschnittstellen) sind Mechanismen, die es zwei Software-Komponenten ermöglichen, unter Verwendung einer Reihe von Definitionen und Protokollen miteinander zu kommunizieren. Das Softwaresystem des Wetteramtes enthält zum Beispiel tägliche Wetterdaten. Die Wetter-App auf Ihrem Telefon „kommuniziert“ über eine API mit diesem System und zeigt Ihnen das aktuelle Tageswetter auf Ihrem Telefon an.
API steht für Application Programming Interface. Eine Schnittstelle kann man sich als Dienstleistungsvertrag zwischen zwei Anwendungen vorstellen. In diesem Vertrag wird festgelegt, wie die beiden über Anfragen und Antworten miteinander kommunizieren. Die API-Dokumentation enthält Informationen darüber, wie Entwickler diese Anfragen und Antworten strukturieren.
Die API-Architektur wird in der Regel in Form von Client und Server beschrieben. Das Programm, das die Anfrage sendet, wird als Client bezeichnet und das Programm, das die Antwort sendet, als Server. In dem Beispiel mit dem Wetter ist also die Wetterdatenbank des Büros der Server und die mobile App der Client.
Formate der API-Antworten:
Es gibt verschiedene Formate für die Antworten oder den Datenaustausch einer API. Je nachdem, für welchen Zweck die API erstellt wird und mit welchen anderen Anwendungen sie verbunden ist, kann sich das Format ändern.Diese Antworten können im JSON-, HTML-, TEXT-, XML- oder CSV-Standardformat vorliegen.
Eine kurze Einführung in dieses Standardmodell:
1. JSON: JSON ist ein leichtgewichtiges, von Menschen lesbares Datenaustauschformat, das aufgrund seiner Einfachheit und Flexibilität in API-Antworten verwendet wird. Es stellt Daten als Schlüssel-Wert-Paare dar, sodass sie in verschiedenen Programmiersprachen leicht analysiert und bearbeitet werden können.
Ein Beispiel für eine JSON-Antwort:
"id": 5687,
"source": "oanda",
"symbol": "EURUSD",
"price": "1.08562",
"high": "1.09211",
"low": "1.08154"
}
2. XML: XML oder „eXtensible Markup Language“ ist ein weiteres weit verbreitetes Format zur Darstellung strukturierter Daten in API-Antworten. Im Gegensatz zu JSON verwendet XML Tags, um hierarchische Datenstrukturen zu definieren, was eine präzisere, aber strukturierte Darstellung ermöglicht. Es ist wie HTML-Tags in Webdesign und Webstrukturen. Während JSON wegen seiner Einfachheit und Lesbarkeit bevorzugt wird, bleibt XML in bestimmten Bereichen wie Unternehmenssystemen und Legacy-Integrationen relevant.
Beispiel für XML in Forex Factory News API:
<title>German Trade Balance</title>
<country>EUR</country>
<![CDATA[ 07-07-2024 ]]> </date>
<![CDATA[ 8:30am ]]>
</time>
<forecast><![CDATA[ 19.9B ]]></forecast>
<previous><![CDATA[ 22.1B ]]></previous>
<url>
<![CDATA[ https://www.forexfactory.com/calendar/125-eur-german-trade-balance ]]>
</url>
3. Andere Formate: Neben JSON und XML können APIs auch andere Antwortformate verwenden, wie z. B. reinen Text, HTM, Protokollpuffer oder CSV-Dateien, je nach domänenspezifischen Anforderungen und Konventionen. Jedes Format hat seine eigenen Vorteile und Nutzen, von Effizienz und Leistung bis hin zu Lesbarkeit und Anpassungsfähigkeit.
Das JSON-Format ist aufgrund seiner Einfachheit, Lesbarkeit und Nutzerfreundlichkeit zu einer beliebten Wahl in der Webentwicklung geworden. Glücklicherweise verwendet der betreffende Dienst dieses Modell auch für den Datenaustausch.
Einrichten Ihrer Umgebung und Entwicklung
Um in MQL5 eine Umgebung für die Verwendung von JSON-APIs einzurichten, müssen Sie einige Schritte befolgen.
MQL5 ist eine Programmiersprache zur Erstellung von Handelsrobotern, technischen Indikatoren, Skripten und Funktionsbibliotheken für die Handelsplattform MetaTrader 5.
Hier finden Sie eine allgemeine Anleitung, wie Sie eine Umgebung für die Arbeit mit JSON-APIs in MQL5 einrichten:
- Verstehen Sie die MQL5-Grundlagen: Vergewissern Sie sich, dass Sie die Grundlagen der Programmiersprache MQL5 sowie grundlegende Konzepte im Zusammenhang mit dem Handel und den Finanzmärkten beherrschen. Machen Sie sich mit der Dokumentation von MQL4 und der MQL5-Referenz vertraut, um die Syntax und die Funktionen der Sprache zu verstehen.
- Wählen Sie eine JSON-Bibliothek: MQL5 hat keine native Unterstützung für JSON-Parsing, sodass Sie eine Bibliothek eines Drittanbieters verwenden müssen. Sie können diese Bibliotheken in Foren wie der MQL5-Community oder GitHub finden. JSON-Serialisierung und JSON-Parser.
- Laden Sie die JSON-Bibliothek herunter und installieren Sie sie: Laden Sie die gewünschte JSON-Bibliothek herunter und folgen Sie den Installationsanweisungen der Bibliothek. Dazu müssen Sie die Bibliotheksdatei (mqh oder mq5) in den Include-Ordner Ihrer MetaTrader-Installation legen.
- Binden Sie die Bibliothek in Ihren Code ein: Am Anfang Ihres MQL-Skripts oder EA (Expert Advisor) schließen Sie die JSON-Bibliothek mit der #include-Direktive ein:
- HTTP-Anfragen stellen: Um mit JSON-APIs zu interagieren, müssen Sie HTTP-Anfragen stellen. Beliebte Optionen sind WinHTTP oder WebRequest. Wenn Sie andere Arten der HTTP-Nutzung benötigen, laden Sie eine HTTP-Bibliothek herunter, die Ihren Anforderungen entspricht, und binden Sie sie ein.
- Speichern der HTTP-Antwort in einer Datei: Da die meisten dieser APIs in Bezug auf die Anzahl der Anfragen begrenzt sind, ist es besser, die angeforderten Daten in einer Datei zu speichern und unsere gespeicherte Datei zu verwenden, anstatt wiederholte und unnötige Anfragen zu stellen.
- Parsen von JSON-Antworten: Sobald Sie eine Antwort von der API erhalten haben, verwenden Sie die JSON-Bibliothek zum Parsen der JSON-Daten. Die spezifische Syntax hängt von der Bibliothek ab, die Sie verwenden.
- Kombinieren: Nachdem Sie die JSON-Daten klassifiziert haben, können Sie nun die gewünschten Daten je nach Modell, Strategie oder Typ mit Ihrem Programm kombinieren.
//Use this type of file include if the file is in MQL include follder #include <JAson.mqh> // Use this type of file include If this file is next to your EA file/follder #include "JAson.mqh"
Eine Struktur für den Code der API-Funktionen
MQL5 bietet die Funktion WebRequest für HTTP-Anfragen, die die Interaktion mit APIs ermöglicht.
Lesen Sie mehr über die Webrequest-Dokumentation > Webrequest und HTTP-Datenaustausch
Im Folgenden finden Sie ein Beispiel für MQL-Code zur Abfrage von JSON-Daten von einer API-Adresse mit der Methode GET
// Required variables string cookie=NULL, headers="", apikey="your api key", value1="value 1", value2="value 2"; char post[],result[]; int res; string URL = "https://www.example.com/API?apikey="+apikey+"&data1=value1&data2="+value2; // Rest API address ResetLastError(); // Reset ast error // HTTP request via MQL Webrequest, GET method with apikey, value1, and value2 and 2000 millisecond timeout res=WebRequest("GET", URL, cookie, NULL, 2000, post, 0, result, headers); if(res==-1) // WebRequest error handling { int error = GetLastError(); if(error==4060) Print("Webrequest Error ",error); else if(error==5203) Print("HTTP request failed!"); else Print("Unknow HTTP request error("+string(error)+")! "); LastHTTPError=error; } else if (res==200) // The HTTP 200 status response code indicates that the request has succeeded { Print("HTTP request successful!"); // Use CharArrayToString to convert HTTP result array to a string string HTTP_Result = CharArrayToString(result, 0, 0, CP_UTF8); Print(HTTP_Result); }
Dieser Code sendet eine GET-Anfrage an die angegebene API-URL und demonstriert die Einfachheit der Integration von API-Aufrufen in MQL4.
Fallstudie: Erfolgreicher MQL4 Expert Advisor mit API-Datenzugang
Verwendung der Ziwox Forex Data API zur Erstellung eines automatischen Handelssystems unter Verwendung von Fundamentaldaten und Echtzeit-KI-Prognosedaten
In diesem Artikel erfahren Sie, wie Sie die Ziwox Forex Data API nutzen können, um fundamentale und Echtzeitdaten-basierte Tools in MetaQuotes Language (MQL) zu erstellen. Es gibt viele Informationen über ihre API, aber wir haben uns für die KI-Prognose für unser Projekt entschieden.
Das KI-Prognosesystem auf dem Ziwox-Terminal basiert nach eigenen Angaben auf der Aggregation von Daten wie Nachrichten, Wirtschaftskalenderdaten, Zinssätzen und deren Änderungen, Geld- und Wirtschaftspolitik der Zentralbanken, Marktstimmung, Stärke der Devisenwährungen, COT-Daten und den Daten von Einzelhändlern. Infolgedessen wird der gesamte Markt analysiert, sodass diese Vorhersagen als wertvolle Daten genutzt werden können.
Wir werden den Prozess des Abrufs von API-Daten, des Speicherns von JSON-Daten in einer Datei, des Parsens von JSON-Antworten und der Verwendung dieser Informationen zur Erstellung eines automatisierten Expert Advisors (EA) erläutern.
Unser Plan ist es, einen Expert Advisor zu erstellen, eine einfache MA-Strategie als unser technisches Signal zu verwenden und zu handeln, wenn die KI-Prognose in unsere Richtung als KI-Filter geht.
Tun wir unser Bestes.
Schritt 1: Anmeldung und Generierung eines API-Schlüssels
Um die Ziwox Forex Data API zu nutzen, folgen Sie bitte diesen Schritten:
1. Registrieren Sie sich HIER auf dem Ziwox-Terminal.
2. Füllen Sie das Formular mit Ihren Daten aus, lesen Sie die Allgemeinen Geschäftsbedingungen und akzeptieren Sie diese, klicken Sie auf „I'm not a robot“ und dann auf „Create a new account“.
3. Eine Bestätigungs-E-Mail wird an Ihre Mailbox gesendet, überprüfen Sie Ihre E-Mail.
3. Melden Sie sich hier mit Ihrem Konto an, navigieren Sie zur Profilseite, dann hier weiter zu „API“ und generieren Sie Ihren API-Schlüssel, indem Sie auf die grüne Schaltfläche „Generate“ klicken.
4. Durch die Generierung eines API-Schlüssels erhalten Sie nun Zugang zu den Ziwox-API-Daten. Kopieren Sie den generierten API-Code, um ihn in unserem Projekt zu verwenden.
Schritt 2: Verstehen der API-Struktur
Die Struktur der API-Verknüpfung sieht folgendermaßen aus:
https://ziwox.com/terminal/services/API/V1/fulldata.php?expn=ziwoxuser&apikey={API_KEY}&apitype={REQUEST_TYPE}&pair={PAIR}
- {API_KEY}: Ihr eindeutiger API-Schlüssel aus dem letzten Schritt
- {REQUEST_TYPE}: Das Format der Antwort, entweder JSON oder Text.
- {PAIR}: Das gewünschte Devisenpaar in einem Standardformat, ohne Präfix oder Suffix, wie z.B. EURUSD, USDJPY, GBPUSD, XAUUSD, WTI...
Schritt 3: Testen Sie Ihre API-Struktur
Jetzt wollen wir die API-Linkstruktur überprüfen und ein Beispiel von Ziwox API anfordern. Verwenden Sie einfach den API-Link aus Schritt 2, ändern Sie die Parameter mit Ihren Parametern, öffnen Sie Ihren Browser, geben Sie den API-Link in die Adressleiste ein und drücken Sie die Eingabetaste.
Wenn Sie den API-Link korrekt bearbeiten, sieht die HTTP-Antwort folgendermaßen aus:
Bei einem falschen API-Schlüssel erhalten Sie eine Fehlerantwort wie diese:
{
"status": "error",
"desc": "invalid api key"
}
oder wenn Sie den Asset-Namen falsch eingeben, kann diese Antwort erscheinen:
{
"status": "error",
"desc": "invalid asset name!!"
}
Schritt 4: Implementierung einer Funktion für eine HTTP-Anforderung mit dem API
Wenn Sie in Schritt 3 erfolgreich waren, können wir nun eine Funktion zur Automatisierung dieses Teils implementieren. Prüfen Sie diesen Code:
datetime LastWebRequest = 0; // use this datetime var for limit failed request API bool GetAPI(string symbolname, string apikey, string filename) { Print("Get API Update"); bool NeedToUpdate = false; // Check if the API data file available if(FileGetInteger(filename,FILE_EXISTS,true)>=0) { // Check the latest update time from file modify date time if(TimeLocal()-(datetime)FileGetInteger(filename,FILE_MODIFY_DATE,true)>900) // update data every 15 min becasue of API call rate limitation NeedToUpdate = true; } else NeedToUpdate = true; if(NeedToUpdate && TimeLocal()-LastWebRequest>300) // retry failed API request every 5 min to avoid firewall IP block { string cookie=NULL,headers; char post[],result[]; int res; string URL = "https://www.ziwox.com/terminal/services/API/V1/fulldata.php?expn=ziwoxuser&apikey="+apikey+"&apitype=json&pair="+symbolname; ResetLastError(); int timeout=5000; res=WebRequest("GET", URL, cookie, NULL, timeout, post, 0, result, headers); if(res==-1) { LastWebRequest = TimeLocal(); int error = GetLastError(); if(error==4060) Print("API data Webrequest Error ",error, " Check your webrequest on Metatrader Expert option."); else if(error==5203) Print("HTTP request for "+symbolname+" Data failed!"); else Print("Unknow HTTP request error("+string(error)+")! "+symbolname+" Data"); return(false); } else if(res==200) { LastWebRequest = TimeLocal(); string HTTPString = CharArrayToString(result, 0, 0, CP_UTF8); Print("HTTP request for "+symbolname+" Data successful!"); Print(HTTPString); if (StringFind(HTTPString,"invalid api key",0)!=-1) { Alert("invalid api key"); return(false); } // Store the API data into a common folder file int filehandle=FileOpen(filename,FILE_READ|FILE_SHARE_READ|FILE_WRITE|FILE_SHARE_WRITE|FILE_BIN|FILE_COMMON); if(filehandle!=INVALID_HANDLE) { FileWriteArray(filehandle,result,0,ArraySize(result)); FileClose(filehandle); } } } return(true); }
Diese Funktion benötigt einen Authentifizierungs-API-Schlüssel (apikey), einen Asset-Namen (symbolname) und einen Dateinamen (filename) als Eingaben von Ihnen. Es bettet „apikey“ und „symbolname“ in die URL ein, um den Link für die API-Anforderung vorzubereiten.
Dann wird die Funktion Webrequest verwendet, um eine HTTP-Anfrage zu stellen, ähnlich wie im vorherigen Schritt, und schließlich wird eine Antwort vom Server abgerufen und die entsprechenden Informationen in eine Datei mit dem Namen „Dateiname“ gespeichert.
Wir rufen die API-Funktion wie folgt auf:
string APIfilename = symbolname+"_API_Data.json"; // API store file name string APIKey = "76thfd67a6f867df7"; // Our unic API Key, change it with your API Key string SymbolRequest = "EURUSD"; // Symbol request, without prefix or suffix string APIJSON[]; bool APIGET = GetAPI(SymbolRequest, APIKey, APIfilename);
Schritt 5: Parsen von JSON-Daten
Wie in Schritt 3 beschrieben, enthalten die von der API empfangenen Daten ein Array von Daten. Die vollständige Erklärung dieser Daten finden Sie in der nachstehenden Tabelle.
JSON Objektname | Datentyp | Beschreibung |
---|---|---|
Symbol | String | Den gleichen Asset/Symbolnamen zurückgeben |
Last Price | Zahl | Letzter Preis des Vermögenswerts |
digits | Zahl | Ziffern des Vermögenspreises |
Base | String | Basisname des Paares |
Quote | String | Kursname des Paares |
Base Fundamental Bias | String | Grundlegende Tendenz der Währung oder grundlegender Ausblick, z.B. „Bullish“ (auf-) oder „Bearish“ (abwärts). |
Base Fundamental Power | String | Basis der fundamentalen Bias-Kraft. Es könnte Week, Moderate oder Strong |
Quote Fundamental Bias | String | Fundamentale Neigung der Währungspreise oder der fundamentalen Ausblick. Es könnte Bullish (steigend) oder Bearish (fallend) sein. |
Quote Fundamental Power | String | Kurse der fundamentalen Bias-Kraft. Es könnte Week, Moderate oder Strong |
Fundamental Bias | String | Fundamentales Bias des Vermögenswerts oder langfristige fundamentale Aussichten von Vermögenswerten. Bullish oder Bearish |
Fundamental Power | String | Fundamentale Kraft des Vermögenswerts. Week, Moderate oder Strong |
Fundamental Driver | String | Wie bei dem fundamentalen Bias von Vermögenswerten handelt es sich um eine Zahl, 50=Neutral, größer als 50 ist Bullish und kleiner als 50 ist Bearish |
AI Bullish Forecast | Prozentsatz | Vorhersage des Aufwärtstrends von Vermögenswerten, je größer die Zahl, desto stärker. |
AI Bearish Forecast | Prozentsatz | Vorhersage des Abwärtstrends von Vermögenswerten, je größer die Zahl, desto stärker. |
Retail Long Ratio | Prozentsatz | Long-Prozentsatz für Einzelhändler |
Retail Long Lot | Zahl | Einzelhändler Long Lot (Auftragsvolumen) |
Retail Long Pos | Zahl | Anzahl der Einzelhändler mit Long-Positionen |
Retail Short Ratio | Prozentsatz | Short-Prozentsatz für Einzelhändler |
Retail Short Lot | Zahl | Einzelhändler Short Lot (Auftragsvolumen) |
Retail Short pos | Zahl | Anzahl der Einzelhändler mit Short-Positionen |
Base COT NET | Zahl | COT-Nettoposition der Basiswährung |
Base COT change | Zahl | COT-Nettopositionsänderungen (wöchentlich) der Basiswährung |
Quote COT NET | Zahl | COT-Nettoposition der Währung Quote |
Quote COT change | Zahl | COT-Nettopositionsänderungen (wöchentlich) der Kurswährung |
COT chng Ratio | Zahl | Netto-Positionsveränderungsquote große Spekulanten, positive Zahl = Long-Stimmung, negative Zahl = Short-Stimmung |
Risk Sentiment | String | Einschätzung des Marktrisikos, d.h. Risiko-EIN, Risiko-AUS oder MIX |
D1 Trend | String | Technische Daten, Täglicher Trend, Kauf- oder Verkaufstrend |
D1 RSI | Zahl | Indikatordaten, Täglicher RSI-Indikatorwert |
D1 Stoch | Zahl | Indikatordaten, Täglicher Stochastik-Indikatorwert |
cci | Zahlen | CCI-Indikatorwerte und |
cci-Signal | String | CCI-Indikator-Signal |
supports | Zahlen | Unterstützungsebenen des Vermögenswertes |
resistance | Zahlen | Widerstandsebenen des Vermögenswertes |
pivot | Zahlen | Dreh- und Angelpunkt/Ebenen des Vermögens |
VIX Value | Zahl | VIX, Volatilitätsindexwert |
VIX Direction | Zahl | Richtung der VIX-Stimmung, nach oben = Markt der Angst und des Risikos, nach unten = Markt der Gier |
VIX Buy driver | Zahl | Positive Zahl = gieriger Markt |
VIX Sell driver | Zahl | Negative Zahl = Angst und riskanter Markt |
Base Bond | Zahl | Wert der Anleiherendite der Basiswährung |
Base Bond chg | Zahl | Wertänderung der Anleiherendite der Basiswährung |
Quote Bond | Zahl | Wert der Anleiherendite der Kurswährung |
Quote Bond chg | Zahl | Wertänderung der Anleihenrendite der Kurswährung |
US10Y | Zahl | Wert der Rendite der 10-jährigen Anleihen der Vereinigten Staaten |
US10Y chg | Zahl | Wertänderung von H1 US10Y |
Yield Driver | Zahl | Positive Zahl, zugunsten der Basiswährung, negative Zahl zugunsten der Kurswährung |
Allow To Trade | bool | Ziwox Vorschlag, handeln oder nicht |
Stop Reason | String | Bei der Empfehlung, nicht zu handeln, dann können Sie den Grund dafür hier sehen. |
riskriversal | Zahl | Wert der Risikoumkehr für diese Anlage. Bestimmen Sie den PUT/CALL-Wert |
cesi | Zahl | CESI-Wert |
yielddiff | Zahl | Basiswährungsrenditewert - Kurswährungsrenditewert |
banksposition | Zahl | Positionsquote der Bankinstitute |
macrofundamental | Zahl | Makroökonomischer Wert, eine positive Zahl ist ein positiver Treiber, eine negative Zahl ist ein negativer Treiber für Vermögenswerte |
longtermsentiment | Zahl | Langfristige Stimmung des Vermögensinstruments, basierend auf Wirtschaft, Politik... |
seasonal | Prozentsatz | Die Möglichkeit eines Vermögenszuwachses oder -rückgangs im Hinblick auf die saisonalen Daten |
In dieser Fallstudie bzw. diesem Beispiel verwenden wir gerne die AI-Prognose von Bearish/Bullish (Verkauf/Kauf). Um diese Funktion zu entwerfen, lesen wir die in der Datei gespeicherten Daten (Schritt 4) mit Hilfe der JSON-Bibliothek und extrahieren die benötigten Daten.
Die Funktion würde folgendermaßen aussehen:
#include "JAson.mqh" // include the JSON librery in our project CJAVal JsonValue; void JsonDataParse(string filename, string &_APIJSON[]) { bool UpdateData = false; for (int arraIn=0; arraIn<ArraySize(APIJSON); arraIn++) APIJSON[arraIn]=""; if(FileGetInteger(filename,FILE_EXISTS,true)>=0) { int FileHandle =FileOpen(filename,FILE_READ|FILE_SHARE_READ|FILE_WRITE|FILE_SHARE_WRITE|FILE_BIN|FILE_COMMON); char jsonarray[]; FileReadArray(FileHandle,jsonarray); FileClose(FileHandle); JsonValue.Clear(); JsonValue.Deserialize(CharArrayToString(jsonarray, 0, 0, CP_UTF8)); _APIJSON[0] = JsonValue[0]["Symbol"].ToStr(); _APIJSON[1] = JsonValue[0]["Fundamental Bias"].ToStr(); _APIJSON[2] = JsonValue[0]["Fundamental Power"].ToStr(); _APIJSON[3] = JsonValue[0]["AI Bullish Forecast"].ToStr(); _APIJSON[4] = JsonValue[0]["AI Bearish Forecast"].ToStr(); _APIJSON[5] = JsonValue[0]["Retail Long Ratio"].ToStr(); _APIJSON[6] = JsonValue[0]["Retail Short Ratio"].ToStr(); _APIJSON[7] = JsonValue[0]["Retail Short Lot"].ToStr(); _APIJSON[8] = JsonValue[0]["Retail Short pos"].ToStr(); _APIJSON[9] = JsonValue[0]["Base COT NET"].ToStr(); _APIJSON[10] = JsonValue[0]["Base COT change"].ToStr(); _APIJSON[11] = JsonValue[0]["Quote COT NET"].ToStr(); _APIJSON[12] = JsonValue[0]["Quote COT change"].ToStr(); _APIJSON[13] = JsonValue[0]["COT chng Ratio"].ToStr(); _APIJSON[14] = JsonValue[0]["Risk Sentiment"].ToStr(); } }
Und wir rufen die JSON-Funktion so auf:
string APIfilename = symbolname+"_API_Data.json"; // API store file name string API_DATA[]; // define an array variable to store API details JsonDataParse( APIfilename,API_DATA);
Schritt 6: Erstellen eines StrategieSchritts eines einfachen gleitenden Durchschnitts-Kreuzen
Mit den extrahierten Daten, die in der Variable „APIJSON“ gespeichert sind, können wir nun automatisierte Handelsstrategien erstellen und unsere Strategie mit einem KI-Prognosesystem kombinieren. Hier ist ein einfaches Beispiel für die Verwendung der Daten in einem EA:
Sie können jede beliebige Strategie wählen, aber in diesem Artikel versuchen wir, eine einfache Strategie zu wählen, denn unser Ziel ist es, Sie anzuleiten und Ihnen beizubringen, wie Sie ein solches Werkzeug in Ihren Projekten verwenden können, damit Sie es einen Schritt besser machen können.
Die Strategie des gleitenden Durchschnitts-Crossover ist eine beliebte Technik, die von Händlern verwendet wird, um potenzielle Kauf- und Verkaufssignale zu erkennen.
Diese Strategie verwendet zwei gleitende Durchschnitte. Eine kurzfristige und eine langfristige, um den Markttrend zu bestimmen.
Wenn der kurzfristige MA über dem langfristigen MA kreuzt, signalisiert er einen Kauf, und wenn er nach unten kreuzt, signalisiert er einen Verkauf.
Das sollten wir tun:
shortMA = iMA(Symbol(), 0, shortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0); longMA = iMA(Symbol(), 0, longMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0); // Check for crossover signals if ( int(APIJSON[3])>=60 ) // if bullish forecast is higher than 60% if (shortMA > longMA) // BUY trend { if (OrdersTotal() == 0) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy Order", 0, 0, Green); if (ticket < 0) Print("Error opening buy order: ", GetLastError()); } } if ( int(APIJSON[4])>=60 ) // if bearish forecast is higher than 60% if (shortMA < longMA) // Sell trend { if (OrdersTotal() == 0) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell Order", 0, 0, Red); if (ticket < 0) Print("Error opening sell order: ", GetLastError()); } }
Schritt 7: Verwendung von JSON-Daten für die Signalfilterung
Um die MA-Crossover-Strategie zu verbessern, verwenden wir die JSON-Daten und die AI-Prognosequote aus der Ziwox-API, um Signale zu filtern.
Wenn zum Beispiel das MA-Kreuz einen Kauftrend anzeigt und die KI-Prognose über 50 % liegt, was auf eine Aufwärtsbewegung hindeutet, ist es eine gute Idee, einen Kauf zu tätigen. Im Gegenteil, wenn die technische Analyse ( MA ) ein Verkaufssignal gibt, verkaufen wir nur, wenn die analytischen und prognostizierten Daten in die gleiche Richtung wie der Verkauf gehen. Auf diese Weise kann das Einstiegsrisiko verringert und die Gewinnquote erhöht werden.
Basierend auf der Anordnung der JSON-Daten in Schritt 4 befindet sich die KI-Prognose, der Prozentsatz für kaufen, im dritten Element unseres Arrays und die Abwärts-Prognose im vierten Element.
Der Code könnte so aussehen:
void OnTick() { if (!APIOK) return; double shortMA, longMA; long ticket = -1; if(IsNewCandle()) { shortMA = iMA(Symbol(), 0, shortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0); longMA = iMA(Symbol(), 0, longMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0); // Check for crossover signals if ( int(APIJSON[3])>=60 ) // if bullish forecast is higher than 60% if (shortMA > longMA) // BUY trend { if (OrdersTotal() == 0) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy Order", 0, 0, Green); if (ticket < 0) Print("Error opening buy order: ", GetLastError()); } } if ( int(APIJSON[4])>=60 ) // if bearish forecast is higher than 60% if (shortMA < longMA) // Sell trend { if (OrdersTotal() == 0) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell Order", 0, 0, Red); if (ticket < 0) Print("Error opening sell order: ", GetLastError()); } } } }
Schlussfolgerung
Die Integration von API-Daten in MQL4 ermöglicht es Händlern, anpassungsfähigere und datengesteuerte Expert Advisors zu erstellen. Durch die Nutzung von Echtzeitinformationen aus externen Quellen können Händler ihre Strategien verbessern und fundiertere Handelsentscheidungen unter dynamischen Marktbedingungen treffen. Sie können auf Daten zugreifen, die über die reinen Marktpreise hinausgehen. Dieser Ansatz ermöglicht es Ihnen, technische und fundamentale Analysen zu kombinieren und so die Wirksamkeit Ihrer Handelsstrategien zu erhöhen.
Der endgültige Code steht unten zum Download bereit.
Ich bin hier und bereit, jede Frage, Anregung oder Kritik zu beantworten.
Herzliche Grüße und guten Handel.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/14108





- 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.
Falls nötig, können Sie die JAson.mqh-Bibliothek verwenden, die im Originalcode unseres Begleiters zu finden ist.
Was für eine schreckliche Art und Weise für den Google Übersetzer zu arbeiten.
Ohne die JAson-Bibliothek wird er natürlich nicht funktionieren.
Die Bibliothek ist nicht in seinem Code, sie ist hier, und der Autor hat das angegeben.
Ja, ich verstehe das vollkommen. Außerdem sind wir verpflichtet, diesen Standard zu verwenden, da fast alle Finanzdatenanbieter diese Methode anwenden.
Hallo, hier ist es, also, worum ich gebeten habe, ist, dass ich es in der mql5-Community poste =
Version für MQL5 METATRADER 5 Ich habe Änderungen am Code vorgenommen, so dass er in Metatrader 5 funktionieren würde. Die Änderungen wurden auch in Bezug auf die Kodierung für bessere Bedingungen in der aktuellen kommerziellen Situation gemacht. Alle Änderungen dienten der Anpassung des Codes an Metatrader 5. Er ist funktionsfähig. Laden Sie einfach diese Datei herunter und führen Sie sie aus. Wenn nötig, die JAson.mqh Bibliothek, die im Originalcode unseres Begleiters zu finden ist. Mein Name ist Ney Borges. Ich komme aus Brasilien, Bundesstaat Goiás, Stadt Caldas Novas, mitten im Wald von Brasilien. Es war sehr schwierig, alleine zu lernen, ohne jemanden, der mir hilft, aber hier in der Gemeinschaft habe ich viel gelernt. Ich danke Ihnen.
Version für MQL5 METATRADER 5 Ich habe Änderungen am Code vorgenommen, so dass er in Metatrader 5 funktionieren würde. Die Änderungen wurden auch in Bezug auf die Kodierung für bessere Bedingungen in der aktuellen kommerziellen Situation gemacht. Alle Änderungen dienten der Anpassung des Codes an Metatrader 5. Er ist funktionsfähig. Laden Sie einfach diese Datei herunter und führen Sie sie aus. Wenn nötig, die JAson.mqh Bibliothek, die im Originalcode unseres Begleiters zu finden ist. Mein Name ist Ney Borges. Ich komme aus Brasilien, Bundesstaat Goiás, Stadt Caldas Novas, mitten im Wald von Brasilien. Es war sehr schwierig, alleine zu lernen, ohne jemanden, der mir hilft, aber hier in der Gemeinschaft habe ich viel gelernt. Ich danke Ihnen.
Brasilien - Goiás - Caldas Novas - Ney Borges
Fiz algumas correçoes ao codigo para funcionar no MQL5 gostaria que por gentilesa verificasse e retornar, obrigado - Sara Sabaghi
Fiz algumas correçoes ao codigo para funcionar no MQL5 gostaria que por gentilesa verificasse e retornar, obrigado - Sara Sabaghi
Hallo Kumpel
Vielen Dank für das Teilen deines Codes. Ja, ich habe ihn getestet. Es funktioniert gut
Umstellung auf Binärformat. Die Größe der gleichen Daten beträgt jetzt 1,2 Mb. Das Parsen in die erforderlichen Arrays von Strukturen dauert jetzt 5 Millisekunden.
Das ist ein bisschen zu viel für Sie. Hier dauert es 12 ms, aber die Daten sind 80 MB groß.
Das ist ein bisschen viel. Hier sind es 12 ms, aber die Daten sind 80 Mb.