Diskussion zum Artikel "Datenaustausch zwischen Terminals via Internet mit Hilfe von WinInet.dll"

 

Neuer Artikel Datenaustausch zwischen Terminals via Internet mit Hilfe von WinInet.dll :

Dieser Beitrag beschreibt die Prinzipien der Arbeit mit dem Internet mittels Verwendung von HTTP-Anfragen sowie den Datenaustausch zwischen Terminals mit Hilfe eines Zwischenservers. Eine MqlNet Library-Klasse wird vorgestellt, die die Arbeit mit Internet-Ressourcen in der MQL5-Umgebung erlaubt. Kontrolle der Preise verschiedener Makler, Austausch von Nachrichten mit anderen Händler ohne Verlassen des Terminals, Suche nach Informationen im Internet – das sind nur einige Beispiele, die in diesem Beitrag behandelt werden.

In diesem Beitrag lernen Sie:

  • grundlegende Internet-Technologien zu nutzen;
  • Daten zwischen Terminals via dem Server auszutauschen;
  • eine allgemeine Library-Klasse zur Arbeit mit dem Internet in der MQL5-Umgebung anzulegen.

Die MQL5 CodeBasis enthält ein Beispiel script, das mit der wininet.dll Library funktioniert und zeigt ein Beispiel der Serverseiten-Anfrage. Doch wir gehen hier viel weiter und veranlassen den Server uns nicht nur die Seite zu geben, sondern auch diese Daten zu senden und sie für weitere Übertragungen an andere anfragende Terminals zu speichern.

Hinweis: Wir empfehlen allen, die keinen Zugang zu einem PHP-konfigurierten Server haben, sich das Denwer Kit herunterzuladen, und dies als Arbeitsplattform zu verwenden Des Weiteren empfehlen wir den Apache Server und PHP bei Ihrem lokalen Host für Tests zu verwenden.

Um eine Anfrage an den Server zu senden, brauchen wir die 7 Hauptfunktionen der Library.

InternetAttemptConnect  Versucht eine Internetverbindung zu finden und diese aufzubauen
InternetOpen
Initialisiert die Struktur zur Arbeit mit den WinInet Library-Funktionen. Diese Funktion muss vor der Aktivierung aller anderen Funktionen der Library aktiviert sein.
InternetConnect Öffnet die, durch die HTTP URL oder FTP-Adresse bezeichnete, Ressource. Liefert den Deskriptor an eine offene Verbindung
HttpOpenRequest Erzeugt einen Deskriptor für HTTP-Anfragen zum Einrichten einer Verbindung
HttpSendRequest Sendet mit Hilfe des erzeugten Deskriptors eine Anfrage
InternetReadFile Liest Daten, die nach der Verarbeitung der Anfrage, vom Server empfangen werden
InternetCloseHandle Setzt den übertragenen Deskriptor frei

Autor: o_O

 

Kraftvoll! Sehr nützlicher Artikel. Für Anfänger ist es schwierig, im Internet nach all diesen Informationen zu suchen. Und hier ist alles in einem Artikel gesammelt.

Überhaupt ist die Arbeit mit dem Internet eines der interessantesten Themen. Erstellen Sie eine vollautomatische Seite (besser mehrere Seiten oder Rubriken auf mehreren Seiten) für dieses Terminal. Anzeige der aktuellen Marktsituation auf der Seite. Anzeige von Marktanalysen und Handelssignalen auf der Seite. "Abfangen" von Handelssignalen durch andere Terminals. Senden von Signalen und Nachrichten an interessierte Nutzer. Hinzufügen/Entfernen von "interessierten" Nutzern zur Liste (Datenbank) für ihre weitere Betreuung durch den Terminaldienst. Sammeln und Analysieren von Informationen von anderen Websites, Erstellen und Veröffentlichen von Berichten...

Für Anfänger ist es auch wichtig, eine Reihe von einfachen Beispielen für die Anwendung dieser Technologie zu haben.

 
Rinng писал(а) :

"Abfangen" von Handelssignalen durch andere Terminals.

Was ist mit Abfangen gemeint? Meinen Sie damit, ein Signal von der Website zu nehmen und es im Terminal auszuführen?

Senden von Signalen und Nachrichten an interessierte Nutzer. Hinzufügen/Entfernen von "interessierten" Nutzern zur Liste (Datenbank) für ihre weitere Betreuung durch den Terminaldienst.

Hier gibt es zwei Möglichkeiten - entweder einen gewöhnlichen Kopierer von Geschäften zu machen. nur Informationsaustausch mit einem Zwischenserver.
Oder die Berechnung einer versteckten Funktion auf dem Server, und dem Benutzer das Ergebnis dieser Funktion für seinen Experten zu geben, um eine Entscheidung zu treffen.

 
sergeev:

Was meinen Sie mit Abfangen? Meinen Sie, ein Signal von der Website zu nehmen und es im Terminal auszuführen?

Hier gibt es zwei Möglichkeiten - entweder einen gewöhnlichen Kopierer von Trades zu machen, aber nur Informationen mit einem Zwischenserver auszutauschen.
Oder die Berechnung einer versteckten Funktion auf dem Server, und der Benutzer erhält das Ergebnis dieser Funktion, damit sein Expert Advisor eine Entscheidung treffen kann.

1) "Abfangen" - genaues Empfangen von Signalen von diesem Zwischenserver (Website) und Ausführen im Terminal des Benutzers.

2) Zugang zu den Informationen des Servers (Marktsignale, persönliche Nachrichten, Marktanalysen) durch persönlichen Zugang, entsprechend der Benutzerdatenbank. Verwaltung der Benutzerdatenbank über das Master-Terminal und/oder über ein Server-Skript (z.B. - Skript für die Bezahlung des Zugangs zu den Informationen über Webmani).

 

Rinng:

2) Zugang zu Serverinformationen (Marktsignale, persönliche Nachrichten, Marktanalysen) durch persönlichen Zugang, je nach Benutzerdatenbank. Verwaltung der Benutzerdatenbank durch das führende Terminal und/oder durch ein Serverskript (z.B. - Zahlungsskript für den Zugang zu Informationen über Webmani).

Wenn Sie den Empfang von Informationen über den Zustand von "etwas" im Terminal tun, ich denke, das ist ein interessanter Punkt.

Wie Sie schreiben - Nachrichten von dem Dienst, mit dem der Benutzer verbunden ist.... Aber zu diesem Zweck sollte der Experte in der Lage sein, sie zu lesen und auszugeben. daher ist es eine Art von individueller Entwicklung für einen Dienst.

Wenn Sie eine Variante oder Ideen für ein verallgemeinertes Protokoll haben, das auf einem beliebigen Quellserver installiert werden kann und mit dem man sich leicht in einem Terminal verbinden kann, können wir darüber diskutieren. Ich persönlich interessiere mich für das Thema der Globalisierung von Verbindungen in Terminals.

 

Ich interessiere mich für die Veröffentlichung von Informationen aus dem Expert Advisor auf mehreren Websites und den Zugang zu den veröffentlichten Informationen privat, durch Passwort von anderen Terminals. Und auch die Verwaltung der Benutzerdatenbank vom EA aus.

Was die Globalisierung der Verbindungen zwischen den Terminals betrifft, so denke ich, dass wir ohne einen "Remote"-Server nicht auskommen. Im Allgemeinen sollte es so aussehen:

Zu den Aufgaben des Master-Terminals gehört die Bereitstellung aller notwendigen Informationen und die Verwaltung des Remote-Servers.

Zu den Aufgaben des Remote-Servers gehören die Identifizierung der Slave-Terminals, die Verwaltung der Benutzerdatenbank (Slave-Terminals), der Empfang und das Senden der erforderlichen Informationen an die Terminals, die Gestaltung und Veröffentlichung der Website(s).

Die Aufgabe eines Slave-Terminals besteht darin, die für ihn bestimmten Informationen zu empfangen und zu verarbeiten und eine Antwort an den Server zu senden.

In einer einfachen Form kann der Server auf PHP 5.0 aufgebaut sein.

Der Datenaustausch kann über das FTP-Protokoll erfolgen, indem Dateien ausgetauscht werden.

Im Allgemeinen sollte es drei Programme geben: Server, Terminal-Admin-Server, Terminal-Client.

 

Für diese Schaltung habe ich zwei Ansätze gewählt.

1. Das Master-Terminal ist der Initiator.
In diesem Fall legt es die benötigten Informationen selbst auf dem Server ab, und die Slaves übernehmen sie einfach von dort und verarbeiten sie gemäß dem Algorithmus. Dies unterscheidet sich nicht von der üblichen Verarbeitung von Informationen, außer der Tatsache, dass ihre Quelle das Master-Terminal unter unserer Kontrolle ist.

Anwendung: Transaktionskopierer und Systeme, bei denen der Master nicht auf den Zustand der Slaves reagieren muss.

2. Slave-Terminal-Initiator.
In diesem Fall agiert der Master nur als eine entfernte Maschine, die mehr weiß als der Master. Das heißt, er enthält zum Beispiel Bedingungen für den Markteintritt durch Signale oder versteckte Berechnungsformeln, die vom Slave angefordert werden.
Anwendung: Berechnung von Indikatoren. Abrufen von Handelssignalen.

Die Funktionen des Servers bestehen in diesem Fall eigentlich nur in der Differenzierung der Zugriffsrechte, d.h. der Prüfung, ob der Slave das Recht hat, eine Anfrage anzunehmen oder zu lassen (übrigens ähnlich wie beim Master). Die Datenbank der Terminals kann in MySQL oder in einer normalen csv-Datei gespeichert werden.

Alles wird über Anfragen (POST / GET) realisiert, da FTP in diesem Fall Schwierigkeiten auf Seiten des Servers verursacht.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

Metaarbitrage.mq5 funktioniert nicht. Es wird in die Protokolle geschrieben:

Wie kann man das beheben?

sergeev:

Alles wird durch Anfragen (POST / GET) implementiert, da FTP in diesem Fall Schwierigkeiten auf Seiten des Servers verursacht.
.

Einverstanden. Ich schlage ein Bündel von php und MySql vor. Mit MySql wird es einfach sein, ein Bewertungssystem zu organisieren, Daten zu speichern, Auswahlen zu treffen.

 
Graff:

Metaarbitrage.mq5 funktioniert nicht. In den Protokollen heißt es:

Wie kann man das beheben?

hmm. gerade überprüft - bei meinem Test stürzt der Fehler bei der Funktion HttpOpenRequestW mit der Zeile Access violation read to 0x003F0070 in'kernel32.dll' ab.

Es scheint mir, dass sich seit der Veröffentlichung des Artikels etwas an den DLL-Aufrufen geändert hat

Einverstanden. Ich schlage ein Bündel aus php und MySql vor. Mit MySql wird es einfach sein, ein Bewertungssystem zu organisieren, Daten zu speichern, Auswahlen zu treffen.

Das ist klar. MySql ist immer besser als nur Dateien zu verwalten.
 
sergeev:

hmm. Ich habe es gerade überprüft - bei meinem Test stürzt der Fehler bei der Funktion HttpOpenRequestW mit der Zeile Access violation read to 0x003F0070 in'kernel32.dll' ab.

Es scheint mir, dass sich etwas an den DLL-Aufrufen geändert hat, nachdem der Artikel veröffentlicht wurde.

Das ist klar. MySql ist immer besser, als nur Dateien zu verwalten.

Die Fehlernummern sind anders.

Ich bin bereit, in meiner Freizeit bei der serverseitigen Entwicklung und bei pcp-Skripten zu helfen.

 
Graff:

Die Fehlernummern sind unterschiedlich.

Ich habe es an servicedesk geschickt, die sollen es auch überprüfen, ich denke der Fehler ist tiefer, oder es hat sich wirklich etwas geändert.

Ich bin bereit, in meiner Freizeit mit serverseitiger Entwicklung und pcp-Skripten zu helfen.

Was ist die Idee, oder besser gesagt, was sollte die Ausgabe sein?
Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.