Обсуждение статьи "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?"
Очень интересная статья. Для полноты счатья не хватает:
1. Где берем котировки?, Можно ли их брать из hst - файлов?
2. Как состыковать эту библиотеку с той, которая получается в МАтЛабе 2009а или 2009в? Там ведь тоже имеется С и С++?
Огромная просьба.
- Котировки берем в самом терминале - они теперь и детальные и глубокие (10 лет и больше).
Напрямую лазать в бинарные файлы хранилищ терминала ни в коем случае нельзя - это приведет только в серьезным конфликтам доступа к данным. Даже если тесты показали "у меня все получилось, проблем нет", все равно наступит момент одновременного обращения к этим данным терминала и внешней программы и в результате кто-то обязательно обломается. На это люди неоднократно натыкались. - Состыковывать библиотеки в MQL5 стало гораздо легче за счет прозрачной поддержки stdcall / cdecl соглашений о вызовах DLL.
Если кто-то напишет хорошую и детальную статью про связку MetaTrader 4/5 и Матлаб через DLL, то заработает от 200 и выше долларов.
На сайте MQL4.community уже есть статьи про связку Маткад - МетаТрейдер 4:
- www.mql5.com
Мне позарез нужно связать два терминала, так чтобы они в реал-тайм транслировали свои котировки в Excel.
В МТ4 подобное можно было бы реализовать через DDE. В МТ5 похоже, через DLL единственный выход.
Но если каждый пришедший тик будет передаваться в DLL... по-моему это будет что-то невообразимо тормознутое. Я конечно не пробовал пока реализовывать... но честно, говоря и пробовать не хочется. Это ж жуть что получится.
Короче, верните DDE, пожалста, в МТ5. Он хоть и анахронизм, но иногда бывает нужен.
P.S. А за статью спасибо, очень своевременно. Мне сейчас как раз такого материала не хватало.
Ренат, как насчет скорости вызовов 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.
Если экспорт котировок возможен только через dll, то получается нужно на каждый экспортируемый инструмент вешать скрипт? А если их много? 50 например?
Понимаю, что можно в одном скрипте передавать котировки для многих инструментов, но это же не будет полноценной заменой DDE, где тики не теряются.
Дело в том, что перед нами нет задачи "предоставить интерфейс выдачи котировок".
У нас задача в создании полноценной и самодостаточной среды для разработки аналитических систем. Такой среды, чтобы даже сторонние программы применять не было бы особой нужды.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?:
Автор: Renat Fatkhullin