Discussione su "Come scrivere una DLL per MQL5 e scambiare dati in 10 minuti".

 

Articolo pubblicato Come scrivere una DLL per MQL5 in 10 minuti e scambiare dati?:

Si dà il caso che pochi sviluppatori oggi ricordino come scrivere una semplice DLL, e quali sono le peculiarità del collegamento di sistemi eterogenei. In 10 minuti, cercherò di dimostrare l'intero processo di creazione di semplici DLL e di discutere alcuni dettagli tecnici della nostra implementazione del binding. Mostrerò il processo passo dopo passo della creazione di DLL in Visual Studio con esempi di passaggio di diversi tipi di variabili (numeri, array, stringhe, ecc.) e di protezione del terminale client dai crash nelle DLL personalizzate.

Autore: Renat Fatkhullin

 

Un articolo molto interessante. Manca per ragioni di completezza:

1. Dove prendiamo le citazioni, possono essere prese da file hst?

2. Come rendere questa libreria compatibile con quella del MateLab 2009a o 2009b? Hanno anche C e C++ lì, vero?

Una richiesta molto grande.

 
  1. Le citazioni sono prese dal terminale - ora sono sia dettagliate che profonde (10 anni e più).

    In nessun caso dovremmo guardare direttamente nei file binari dei magazzini terminali - causerebbe solo gravi conflitti di accesso ai dati. Anche se i test hanno mostrato "ha funzionato, nessun problema", arriverà comunque un momento di accesso simultaneo a questi dati del terminale e del programma esterno, e qualcuno andrà in crash come risultato. La gente ci si è imbattuta molte volte.

  2. Il docking delle librerie in MQL5 è ora molto più facile, grazie al supporto trasparente per le convenzioni stdcall / cdecl sulle chiamate DLL.

    Se qualcuno scrive un articolo buono e dettagliato sul collegamento di MetaTrader 4/5 e Matlab via DLL, guadagnerà 200 dollari o più.

    La comunità MQL4.community ha già articoli su Matcad - MetaTrader 4 bundle:

Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4
  • www.mql5.com
Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4: особенности автоматических торговых стратегий
 
Renat, e la velocità delle chiamate dll?
Ho bisogno di collegare due terminali in modo che traducano le loro quotazioni in Excel in tempo reale.
In MT4 potrebbe essere fatto con DDE. In MT5 sembra che attraverso la DLL sia l'unica via d'uscita.
Ma se ogni tick in arrivo sarà passato alla DLL... Penso che sarà qualcosa di inimmaginabilmente lento. Naturalmente non ho ancora provato ad implementarlo... ma onestamente non voglio provarlo. Sarà un incubo.
In breve, riportiamo il DDE a MT5. È un anacronismo, ma a volte può servire.

P.S. Grazie per questo articolo, è molto attuale. Mi mancava proprio un materiale del genere.
 
Grazie!!!
 
benik:
Renat, e la velocità di chiamata della DLL?

È molto facile controllare la velocità di chiamata. Per esempio, un calcolo approssimativo può essere fatto così:

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

Ho ottenuto 57.000 chiamate al secondo su un Quad Q9400 @2.66Ghz. Lo stesso codice dà circa 20.000.000 di chiamate al secondo in MetaTrader 4, dato che lì non c'è controllo e piping.

Cercheremo sicuramente di ridurre la perdita sulle chiamate DLL in MetaTrader 5.

 
Renat писал(а) :

57.000 chiamate al secondo

Ah, beh, se ci sono circa 50.000 chiamate al secondo, penso che sia possibile trasmettere anche le citazioni attraverso la DLL. Non ci saranno perdite.

Grazie per il codice.

 
Nella prossima build, la velocità di chiamata DLL sarà aumentata a 20 000 000 chiamate "vuote" al secondo, come in MQL4.
 

Se è possibile esportare le quotazioni solo tramite dll, allora significa che uno script deve essere messo su ogni strumento da esportare? E se ce ne sono molti? Per esempio, 50?

Capisco che è possibile passare le quotazioni per molti strumenti in uno script, ma non sarà un sostituto completo del DDE, dove i tick non vengono persi.

 

Il punto è che non abbiamo il compito di "fornire un'interfaccia di quotazione".

Il nostro obiettivo è quello di creare un ambiente completo e autosufficiente per lo sviluppo di sistemi analitici. Un tale ambiente in modo che anche i programmi di terzi non hanno bisogno di essere utilizzati.

 
In ogni caso, Mql5 è una gioia. Grazie