Discussion sur "Comment écrire une DLL pour MQL5 et échanger des données en 10 minutes".

 

Article publié Comment écrire une DLL pour MQL5 en 10 minutes et échanger des données ?:

Il se trouve que peu de développeurs se souviennent aujourd'hui de la façon d'écrire une simple DLL, et des particularités de la liaison de systèmes hétérogènes. En 10 minutes, je vais essayer de démontrer l'ensemble du processus de création de DLLs simples et discuter de certains détails techniques de notre implémentation de liaison. Je montrerai le processus de création de DLL dans Visual Studio, étape par étape, avec des exemples de passage de différents types de variables (nombres, tableaux, chaînes de caractères, etc.) et de protection du terminal client contre les plantages dans les DLL personnalisées.

Auteur : Renat Fatkhullin

 

Un article très intéressant. Il est absent pour des raisons d'exhaustivité :

1. D'où viennent les devis, peuvent-ils être pris dans des fichiers hst ?

2. Comment rendre cette bibliothèque compatible avec celle du MateLab 2009a ou 2009b ? Ils ont aussi le C et le C++ là-bas, n'est-ce pas ?

Une très grosse demande.

 
  1. Les citations sont tirées du terminal - elles sont maintenant à la fois détaillées et profondes (10 ans et plus).

    En aucun cas nous ne devons regarder directement dans les fichiers binaires des stockages terminaux - cela ne ferait que provoquer de graves conflits d'accès aux données. Même si les tests ont montré "ça a marché, pas de problèmes", il y aura toujours un moment d'accès simultané à ces données du terminal et du programme externe, et quelqu'un se plantera en conséquence. Les gens sont tombés dessus de nombreuses fois.

  2. L'ancrage des bibliothèques dans MQL5 est maintenant beaucoup plus facile, grâce à la prise en charge transparente des conventions stdcall / cdecl sur les appels de DLL.

    Si quelqu'un écrit un bon article détaillé sur la liaison entre MetaTrader 4/5 et Matlab via DLL, il gagnera 200 $ ou plus.

    La communauté MQL4.community a déjà des articles sur l'offre groupée Matcad - MetaTrader 4 :

Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4
  • www.mql5.com
Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4: особенности автоматических торговых стратегий
 
Renat, qu'en est-il de la vitesse des appels de la dll ?
Je dois relier deux terminaux pour qu'ils traduisent leurs devis en Excel en temps réel.
Dans MT4, cela peut être fait avec DDE. Dans MT5, il semble que le recours à la DLL soit la seule solution.
Mais si chaque tick entrant est transmis à la DLL... Je pense que ce sera quelque chose d'inimaginablement lent. Bien sûr, je n'ai pas encore essayé de l'appliquer... mais honnêtement, je n'ai pas envie d'essayer. Ça va être un cauchemar.
En bref, rendons DDE à MT5. C'est un anachronisme, mais parfois vous pouvez en avoir besoin.

P.S. Merci pour cet article, il tombe à point nommé. Il me manquait justement un tel matériel.
 
Merci ! !!
 
benik:
Renat, qu'en est-il de la vitesse d'appel de la dll ?

Il est très facile de vérifier la vitesse d'appel. Par exemple, un calcul approximatif peut être effectué comme suit :

_DLLAPI int __stdcall fnCalcSpeed(int var1,int var2,int var3)
  {
   return(0);
  }


#import "MQL5DLLSamples.dll"
int  fnCalcSpeed(int var1,int var2,int var3);
#import

   int calls=0;
   int ticks=GetTickCount();
   
   while(GetTickCount()-ticks<1000)
     {
      for(int i=0;i<1000;i++)
         fnCalcSpeed(1,2,3);
      calls++;
     }
   Print(calls * 1000, "вызовов в секунду");

J'ai obtenu 57 000 appels par seconde sur un Quad Q9400 @2.66Ghz. Le même code donne environ 20 000 000 d'appels par seconde dans MetaTrader 4, car il n'y a pas de contrôle et de tuyauterie dans ce cas.

Nous allons certainement essayer de réduire la perte sur les appels DLL dans MetaTrader 5.

 
Renat писал(а) :

57 000 appels par seconde

Ah, eh bien, s'il y a environ 50 000 appels par seconde, je pense qu'il est possible de diffuser des citations à travers la DLL également. Il n'y aura pas de pertes.

Merci pour le code.

 
Dans la prochaine version, la vitesse d'appel des DLL sera augmentée à 20 000 000 d'appels "vides" par seconde, comme dans MQL4.
 

S'il est possible d'exporter des cotations uniquement par le biais de la dll, cela signifie qu'un script doit être placé sur chaque instrument à exporter ? Et s'ils sont nombreux ? Par exemple, 50 ?

Je comprends qu'il est possible de passer des cotations pour de nombreux instruments dans un script, mais ce ne sera pas un substitut à part entière de DDE, où les ticks ne sont pas perdus.

 

Le fait est que nous ne sommes pas chargés de "fournir une interface de devis".

Notre objectif est de créer un environnement complet et autosuffisant pour le développement de systèmes analytiques. Un environnement tel que même les programmes tiers n'ont pas besoin d'être utilisés.

 
En tout cas, Mql5 est une joie. Merci