Discussion de l'article "Utilisation de WinInet.dll pour l’échange de données entre terminaux via Internet"

 

Un nouvel article Utilisation de WinInet.dll pour l’échange de données entre terminaux via Internet a été publié :

Cet article décrit les principes du travail avec Internet via l'utilisation de requêtes HTTP, et l'échange de données entre terminaux, en utilisant un serveur intermédiaire. Une classe de bibliothèque MqlNet est présentée pour travailler avec des ressources Internet dans l'environnement MQL5. Suivre les prix de différents courtiers, échanger des messages avec d'autres traders sans quitter le terminal, rechercher des informations sur Internet - ce ne sont là que quelques exemples, passés en revue dans cet article.

Pour envoyer une requête et recevoir une page en réponse à cette requête, nous aurons besoin des trois fonctions restantesHttpOpenRequest, HttpSendRequest и InternetReadFile. L'essentiel de la réception de la page en réponse à une demande consiste essentiellement à enregistrer son contenu dans un fichier local.


Pour faciliter le travail avec les demandes et les contenus, nous allons créer deux fonctions universelles.

Auteur : ---

 

Puissant ! Article très utile. Il est difficile pour les débutants de rechercher toutes ces informations sur Internet. Et ici, tout est rassemblé dans un seul article.

En général, travailler avec Internet est l'un des sujets les plus intéressants. Créer un site entièrement automatique (mais mieux plusieurs sites ou des rubriques sur plusieurs sites) pour ce terminal. Afficher la situation actuelle du marché sur le site. Affichage de l'analyse du marché et des signaux de négociation sur le site. "Interception des signaux de négociation par d'autres terminaux. Envoi de signaux et de messages aux utilisateurs intéressés. Ajout/suppression d'utilisateurs "intéressés" à la liste (base de données) en vue de leur prise en charge ultérieure par le service du terminal. Collecte et analyse d'informations provenant d'autres sites, création et publication de rapports...

Pour les débutants, il est également important de disposer d'un grand nombre d'exemples simples et variés utilisant cette technologie.

 
Rinng писал(а) :

"Interception des signaux de trading par d'autres terminaux.

Qu'entendez-vous par "interception" ? Voulez-vous dire que vous prenez un signal sur le site et que vous l'exécutez dans le terminal ?

Envoi de signaux et de messages aux utilisateurs intéressés. Ajouter/supprimer les utilisateurs "intéressés" de la liste (base de données) pour que le service du terminal puisse les servir ultérieurement.

Il y a deux options ici - soit faire un copieur ordinaire de transactions. seulement l'échange d'informations avec un serveur intermédiaire.
Soit effectuer le calcul d'une fonction cachée sur le serveur, et donner à l'utilisateur le résultat de cette fonction pour que son expert prenne une décision.

 
sergeev:

Qu'entendez-vous par interception ? Voulez-vous dire que vous prenez un signal du site et que vous l'exécutez dans le terminal ?

Il y a deux options ici - soit faire un copieur ordinaire des transactions, mais seulement échanger des informations avec un serveur intermédiaire.
Soit faire le calcul d'une fonction cachée sur le serveur, et l'utilisateur reçoit le résultat de cette fonction pour que son Expert Advisor puisse prendre une décision.

1) "Interception" - recevoir exactement les signaux de ce serveur intermédiaire (site) et les exécuter sur le terminal de l'utilisateur.

2) Accès aux informations du serveur (signaux de marché, messages personnels, analyses de marché) par accès personnel, selon la base de données de l'utilisateur. Gestion de la base de données de l'utilisateur via le terminal principal et/ou via un script du serveur (par exemple, un script pour le paiement de l'accès à l'information via Webmani).

 

Rinng:

2) Accès aux informations du serveur (signaux de marché, messages personnels, analyses de marché) par accès personnel, en fonction de la base de données de l'utilisateur. La gestion de la base de données des utilisateurs est assurée par le terminal principal et/ou par un script du serveur (par exemple, un script de paiement pour l'accès à l'information via Webmani).

Si vous faites la réception d'informations sur l'état de "quelque chose" dans le terminal, je pense que c'est un point intéressant.

Comme vous l'écrivez - les messages du service auquel l'utilisateur est connecté.... Il s'agit donc d'une sorte de développement individuel pour un service donné.

Si vous avez une variante ou des idées d'un protocole généralisé qui peut être installé sur n'importe quel serveur source et qui sera facile à connecter dans un terminal, nous pouvons en discuter. Je suis personnellement intéressé par le sujet de la globalisation des connexions dans les terminaux.

 

Je suis intéressé par la publication d'informations provenant de l'Expert Advisor sur plusieurs sites et l'accès aux informations publiées en privé, par mot de passe, à partir d'autres terminaux. Et aussi la gestion de la base de données des utilisateurs à partir de l'EA.

Pour ce qui est de la globalisation des liens entre les terminaux, je pense qu'on ne peut pas se passer d'un serveur "distant". En général, cela devrait ressembler à ceci :

Les tâches du terminal maître comprennent la préparation de toutes les informations nécessaires et l'administration du serveur distant.

Les tâches du serveur distant comprennent l'identification des terminaux esclaves, la gestion de la base de données des utilisateurs (terminaux esclaves), la réception et l'envoi des informations nécessaires aux terminaux, la conception et la publication du (des) site(s).

La tâche d'un terminal esclave est de recevoir et de traiter les informations qui lui sont destinées et d'envoyer une réponse au serveur.

Dans une forme simple, le serveur peut être conçu sur PHP 5.0.

L'échange de données peut se faire via le protocole FTP, en échangeant des fichiers.

En général, il devrait y avoir trois programmes : serveur, terminal-admin-serveur, terminal-client.

 

Pour ce circuit, j'ai mis en œuvre deux approches.

1. Le terminal maître est l'initiateur.
Dans ce cas, il place l'information requise sur le serveur lui-même, et les esclaves ne font que la prendre et la traiter selon l'algorithme. Ce n'est pas différent du traitement habituel de l'information, sauf que sa source est le terminal maître que nous contrôlons.

Application : copieurs de transactions et systèmes qui ne nécessitent pas que le maître réagisse aux états des esclaves.

2. Initiateur du terminal esclave.
Dans ce cas, le maître agit uniquement comme une machine distante qui en sait plus que lui. C'est-à-dire, par exemple, qu'il contient les conditions d'entrée sur le marché par des signaux ou des formules de calcul cachées, qui sont demandées par l'esclave.
Application : calcul d'indicateurs. Obtention de signaux de négociation.

Dans ce cas, les fonctions du serveur consistent uniquement à différencier les droits d'accès, c'est-à-dire à vérifier si l'esclave a le droit de prendre ou de laisser une demande (de la même manière pour le maître). La base de données des terminaux peut être stockée dans MySQL ou dans un fichier csv ordinaire.

Tout est réalisé par le biais de requêtes (POST / GET) car le FTP impose dans ce cas des difficultés à la partie serveur.

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

Metaarbitrage.mq5 ne fonctionne pas. Il s'écrit dans les logs :

Comment résoudre le problème ?

sergeev:

Tout est mis en œuvre par le biais de requêtes (POST / GET) car le FTP dans ce cas impose des difficultés sur la partie serveur.
.

D'accord. Je suggère un bundle de php et MySql. Avec MySql, il sera facile d'organiser un système d'évaluation, de stocker des données, de faire des sélections.

 
Graff:

Metaarbitrage.mq5 ne fonctionne pas. Dans les logs, il est indiqué :

Comment résoudre le problème ?

Je viens de vérifier - dans mon test, l'erreur se produit lors de l'exécution de la fonction HttpOpenRequestW avec la ligne Access violation read to 0x003F0070 in'kernel32.dll'.

Il me semble que quelque chose a changé dans les appels de DLL après la publication de l'article.

Je suis d'accord. Je suggère un bundle de php et MySql. Avec MySql, il sera facile d'organiser un système d'évaluation, de stocker des données, de faire des sélections.

Bien entendu, MySql est toujours préférable à un simple système de classement. MySql est toujours mieux que de simplement maintenir des fichiers.
 
sergeev:

Je viens de vérifier - sur mon test, l'erreur se produit sur la fonction HttpOpenRequestW avec la ligne Access violation read to 0x003F0070 in'kernel32.dll'.

Il me semble que quelque chose a changé dans les appels de DLL après la publication de l'article.

Bien entendu. MySql est toujours mieux que de simplement maintenir des fichiers.

Les numéros d'erreur sont différents.

Je suis prêt à aider au développement côté serveur et aux scripts pcp pendant mon temps libre.

 
Graff:

Les numéros d'erreur sont différents.

Je l'ai envoyé à servicedesk. qu'ils le vérifient aussi, je pense que l'erreur est plus profonde, ou que quelque chose a vraiment changé.

Je suis prêt à aider avec le développement côté serveur et les scripts pcp dans mon temps libre.

Quelle est l'idée, ou plutôt, quel devrait être le résultat ?
Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.