Diskussion über "Wie man eine DLL für MQL5 schreibt und Daten in 10 Minuten austauscht".

 

Veröffentlichter Artikel Wie schreibt man eine DLL für MQL5 in 10 Minuten und tauscht Daten aus?:

Tatsächlich wissen nur noch wenige Entwickler, wie man eine einfache DLL schreibt und welche Besonderheiten bei der Verknüpfung heterogener Systeme zu beachten sind. In 10 Minuten werde ich versuchen, den gesamten Prozess der Erstellung einfacher DLLs zu demonstrieren und einige technische Details unserer Bindungsimplementierung zu diskutieren. Ich werde den schrittweisen Prozess der DLL-Erstellung in Visual Studio mit Beispielen für die Übergabe verschiedener Variablentypen (Zahlen, Arrays, Strings usw.) und den Schutz des Client-Terminals vor Abstürzen in benutzerdefinierten DLLs zeigen.

Autor: Renat Fatkhullin

 

Ein sehr interessanter Artikel. Er fehlt nur der Vollständigkeit halber:

1. Woher bekommen wir die Zitate, können sie aus hst-Dateien übernommen werden?

2. Wie kann man diese Bibliothek mit der Bibliothek in MateLab 2009a oder 2009b kompatibel machen? Es gibt dort auch C und C++, nicht wahr?

Eine sehr große Bitte.

 
  1. Die Zitate stammen aus dem Terminal - sie sind jetzt sowohl detailliert als auch tiefgehend (10 Jahre und mehr).

    Auf keinen Fall sollten wir direkt in die Binärdateien der Terminalspeicher schauen - das führt nur zu schwerwiegenden Konflikten beim Datenzugriff. Auch wenn die Tests gezeigt haben, dass es funktioniert hat, gibt es einen Moment des gleichzeitigen Zugriffs auf diese Daten von Terminal und externem Programm, und jemand wird als Folge davon abstürzen. Die Menschen sind schon oft darüber gestolpert.

  2. Das Andocken von Bibliotheken in MQL5 ist jetzt viel einfacher, dank der transparenten Unterstützung für stdcall / cdecl Konventionen bei DLL-Aufrufen.

    Wenn jemand einen guten und detaillierten Artikel über die Verknüpfung von MetaTrader 4/5 und Matlab via DLL schreibt, wird er $200 oder mehr verdienen.

    Die MQL4.community hat bereits Artikel über Matcad - MetaTrader 4 Bundle:

Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4
  • www.mql5.com
Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4: особенности автоматических торговых стратегий
 
Renat, wie sieht es mit der Geschwindigkeit der DLL-Aufrufe aus?
Ich muss zwei Terminals miteinander verbinden, damit sie ihre Angebote in Echtzeit in Excel übersetzen.
In MT4 könnte man das mit DDE machen. In MT5 scheint es, dass durch DLL ist der einzige Weg aus.
Aber wenn jeder eingehende Tick an die DLL weitergeleitet wird... Ich denke, es wird etwas unvorstellbar Langsames sein. Natürlich habe ich noch nicht versucht, es zu implementieren... aber ehrlich gesagt, möchte ich es nicht ausprobieren. Es wird ein Alptraum sein.
Kurz gesagt, lassen Sie uns DDE zu MT5 zurückbringen. Es ist ein Anachronismus, aber manchmal kann man es brauchen.

P.S. Vielen Dank für diesen Artikel, er kommt genau zum richtigen Zeitpunkt. Ich habe genau so ein Material vermisst.
 
Vielen Dank !!!
 
benik:
Renat, wie sieht es mit der Aufrufgeschwindigkeit der DLL aus?

Es ist sehr einfach, die Anrufgeschwindigkeit zu überprüfen. Eine grobe Berechnung kann zum Beispiel wie folgt durchgeführt werden:

_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, "вызовов в секунду");

Ich habe 57.000 Anrufe pro Sekunde auf einem Quad Q9400 @2.66Ghz. Derselbe Code führt im MetaTrader 4 zu etwa 20.000.000 Aufrufen pro Sekunde, da es dort keine Kontrolle und kein Piping gibt.

Wir werden auf jeden Fall versuchen, die Verluste bei DLL-Aufrufen in MetaTrader 5 zu reduzieren.

 
Renat писал(а) :

57.000 Anrufe pro Sekunde

Ah, nun, wenn es etwa 50.000 Anrufe pro Sekunde gibt, denke ich, dass es auch möglich ist, Zitate über die DLL zu übertragen. Es wird keine Verluste geben.

Vielen Dank für den Code.

 
Im nächsten Build wird die Geschwindigkeit der DLL-Aufrufe auf 20 000 000 "leere" Aufrufe pro Sekunde erhöht, wie in MQL4.
 

Wenn es möglich ist, Kurse nur über eine DLL zu exportieren, bedeutet dies, dass für jedes zu exportierende Instrument ein Skript erstellt werden muss. Was ist, wenn es viele davon gibt? Zum Beispiel, 50?

Ich verstehe, dass es möglich ist, Kurse für viele Instrumente in einem Skript zu übergeben, aber es wird kein vollwertiger Ersatz für DDE sein, bei dem die Ticks nicht verloren gehen.

 

Der Punkt ist, dass es nicht unsere Aufgabe ist, eine "Angebotsschnittstelle" bereitzustellen.

Unser Ziel ist es, eine vollständige und autarke Umgebung für die Entwicklung analytischer Systeme zu schaffen. Eine solche Umgebung, so dass auch Programme von Drittanbietern nicht verwendet werden müssen.

 
Auf jeden Fall ist Mql5 eine Freude. Danke