Wie man Netzwerkzugriff verwendet
Der Zugriff auf das Internet ist ein häufiger Anwendungsfall für Plugins, cBots und Indikatoren. Früher mussten Algos spezielle Berechtigungen anfordern, um netzwerkbezogene Operationen durchzuführen, was bei Benutzern Bedenken hervorrufen konnte, insbesondere wenn diese Algos ohne Quellcode verteilt wurden. Glücklicherweise erlaubt cTrader jetzt allen Algos den Zugriff auf Webressourcen, ohne dass erhöhte Zugriffsrechte erforderlich sind.
In diesem Artikel und dem dazugehörigen Video zeigen wir, wie man Nachrichten von einer kostenlosen API abruft, die JSON für die Serialisierung und Deserialisierung verwendet.
Einen API-Endpunkt nutzen
In unserem Beispiel werden wir unseren cBot verwenden, um Nachrichteninformationen aus einer externen Quelle zu lesen und sie im Protokoll auszugeben. Zu diesem Zweck werden wir eine kostenlose API verwenden, die von NewsData angeboten wird.
Um zu sehen, wie die API in einem Browser aussieht, können wir einfach auf diesen Link zugreifen.
https://newsdata.io/api/1/news?apikey=pub_32606381862bbdf07962c72ae7bc6135d6332&&language=en
Wie wir sehen können, stellt der Endpunkt eine Sequenz von Schlüssel-Wert-Paaren bereit, die wir einfach mit einem cBot nutzen können. Wir beginnen damit, die Namespaces hinzuzufügen, die mehrere Klassen und Methoden zum Deserialisieren und Lesen von JSON-formatierten Daten enthalten.
1 2 3 4 5 6 7 8 9 10 11 12 | |
Wir können dann einen einfachen HttpClient() deklarieren, der auf das Internet zugreift.
1 | |
Danach können wir Daten in der OnStart()-Methode lesen.
1 2 3 4 | |
Die Anfrage gibt eine Rohantwort im JSON-Format zurück. Wir können sehen, wie sie aussieht, indem wir eine MessageBox verwenden.
1 2 3 | |
JSON-Daten deserialisieren
Um unsere JSON-Daten zu deserialisieren, werden wir die JsonSerialiser-Klasse verwenden. Bevor wir dies tun können, müssen wir jedoch die für die Deserialisierung erforderlichen Klassen definieren.
NewsItem– diese Klasse repräsentiert einen einzelnen Nachrichtenartikel.News– diese Klasse enthält eine Sammlung vonNewsItem-Objekten.
1 2 3 4 5 6 7 8 9 | |
Wenn Sie vermeiden möchten, diesen Boilerplate-Code zu schreiben, können Sie auch einen Online-Konverter von JSON in C# verwenden.
Mit dem Konverter haben wir unsere Klassen wie folgt definiert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
Wir können jetzt unseren Deserialisierungscode schreiben.
1 | |
Zusätzlich können wir den folgenden Code hinzufügen, um Nachrichtentitel im Protokoll auszugeben.
1 2 3 4 5 6 7 | |
Wenn wir unseren cBot erstellen und ausführen, werden wir sehen, dass eine Ausnahme im Protokoll erscheint. Wenn wir jedoch die Zugriffsrechte des cBots auf AccessRights.FullAccess ändern, werden wir sehen, dass unser cBot wie beabsichtigt funktioniert.
Auf das Internet ohne erhöhte Zugriffsrechte zugreifen
Um eine Situation zu vermeiden, in der unser cBot erhöhte Zugriffsrechte anfordern muss, können wir unsere OnStart()-Methode wie folgt ändern.
1 2 3 4 | |
Wenn wir die Zugriffsrechte auf AccessRights.None setzen und unseren cBot neu erstellen, sollten wir sehen, dass die Nachrichtentitel ohne Probleme im Protokoll ausgegeben werden. Mit etwas mehr Aufwand kann unser cBot in einen schicken Nachrichtenleser verwandelt werden, der direkt in jedem cTrader-Chart verfügbar ist!