Обсуждение статьи "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?"

 

Опубликована статья Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?:

Так уж сложилось, что сейчас мало кто из разработчиков помнит как написать простую DLL библиотеку и в чем особенности связывания разнородных систем. Я постараюсь за 10 минут на примерах продемонстрировать весь процесс создания простых DLL библиотек и раскрою некоторые технические детали нашей реализации связывания. Покажу пошаговый процесс создания DLL библиотеки в Visual Studio с примерами передачи разных типов переменных (числа, массивы, строки и т.д.) и защиту клиентского терминала от падений в пользовательских DLL.

Автор: Renat Fatkhullin

 

Очень интересная статья. Для полноты счатья не хватает:

1. Где берем котировки?, Можно ли их брать из hst - файлов?

2. Как состыковать эту библиотеку с той, которая получается в МАтЛабе 2009а или 2009в? Там ведь тоже имеется С и С++?

Огромная просьба. 

 
  1. Котировки берем в самом терминале - они теперь и детальные и глубокие (10 лет и больше).

    Напрямую лазать в бинарные файлы хранилищ терминала ни в коем случае нельзя - это приведет только в серьезным конфликтам доступа к данным. Даже если тесты показали "у меня все получилось, проблем нет", все равно наступит момент одновременного обращения к этим данным терминала и внешней программы и в результате кто-то обязательно обломается. На это люди неоднократно натыкались.

  2. Состыковывать библиотеки в MQL5 стало гораздо легче за счет прозрачной поддержки stdcall / cdecl соглашений о вызовах DLL.

    Если кто-то напишет хорошую и детальную статью про связку MetaTrader 4/5 и Матлаб через DLL, то заработает от 200 и выше долларов.

    На сайте MQL4.community уже есть статьи про связку Маткад - МетаТрейдер 4:

Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4
  • www.mql5.com
Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4: особенности автоматических торговых стратегий
 
Ренат, как насчет скорости вызовов dll-ки?
Мне позарез нужно связать два терминала, так чтобы они в реал-тайм транслировали свои котировки в Excel.
В МТ4 подобное можно было бы реализовать через DDE. В МТ5 похоже, через DLL единственный выход.
Но если каждый пришедший тик будет передаваться в DLL... по-моему это будет что-то невообразимо тормознутое. Я конечно не пробовал пока реализовывать... но честно, говоря и пробовать не хочется. Это ж жуть что получится.
Короче, верните DDE, пожалста, в МТ5. Он хоть и анахронизм, но иногда бывает нужен.

P.S. А за статью спасибо, очень своевременно. Мне сейчас как раз такого материала не хватало.
 
Спасибочки !!!
 
benik:
Ренат, как насчет скорости вызовов dll-ки?

Проверить скорость вызова очень просто. Например, грубо подсчитать можно так:

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

У меня на Quad Q9400 @2.66Ghz получилось 57 000 вызовов в секунду. Тот же самый код дает в MetaTrader 4 около 20 000 000 вызовов в секунду, так как там нет контроля и обвязки.

Мы обязательно попробуем уменьшить потери на вызовах DLL в MetaTrader 5.

 
Renat писал(а)  :

получилось 57 000 вызовов в секунду

А, ну если там порядка 50 000 вызовов в сек., думаю что тогда можно и через DLL котировки транслировать. Потерь не будет.

Спасибо, что привели код. 

 
В следующем билде скорость вызова DLL поднимем, будет как в MQL4 - 20 000 000 "пустых" вызовов в секунду.
 

Если экспорт котировок возможен только через dll, то получается нужно на каждый экспортируемый инструмент вешать скрипт? А если их много? 50 например?

Понимаю, что можно в одном скрипте передавать котировки для многих инструментов, но это же не будет полноценной заменой DDE, где тики не теряются. 

 

Дело в том, что перед нами нет задачи "предоставить интерфейс выдачи котировок".

У нас задача в создании полноценной и самодостаточной среды для разработки аналитических систем. Такой среды, чтобы даже сторонние программы применять не было бы особой нужды.

 
В любом случае Mql5 радует. Спасибо