Блог им. MrFly

Я работал во множестве терминалах, но моя «любовь на всегда» — это Wealth-Lab!
И я знаю — многие любят «велс» также сильно, как и я, однако у него была одна сложно-решаемая проблема — это данные российского рынка! Постоянно приходилось загружать их можно сказать вручную — а о том, чтобы работать с ним как с Xtick(терминал технического анализа) не было и речи, хотя WealthLab настолько гибкий, что можно было бы сделать просмотровый терминал покруче Xtick и многих других.
Например — вы хотели бы получать сигналы в телеграм или просто скальпировать, глядя на кастомные/уникальные индикаторы — это можно сделать в WealthLab и я говорю не о последней версии веса, а о старой доброй версии 6.9 — которая распространена «по интернетам»!
Есть несколько быстрых(для подключения) и удобных поставщиков тиковых данных — но самым удобным и простым для доступа оказался фид из терминала MetaTrader 5 (в моем случае от Финама). Он подключается за 1 минуту и сразу готов к работе!
Если мы хотим, чтобы тики поступали к нам в терминал реально быстро — можно воспользоваться таким вариантом, как ZeroMQ. Это технология сокетов, которая работает быстрее, чем вы успеваете моргнуть. Если простым языком — то как только приходит тик в Metatrader — ZeroMQ моментально отправит эти данные на «клиент- подписчик», который мы развернем прямо внутри стратегии WealthLab на этом же компьютере ( чтобы показать, что сервер можно создать практически где угодно, лишь бы был доступ к C# – в боевом режиме, конечно лучше streamingDataProvider).
А теперь начинается мастер-класс для тех, кто хочет избежать «шишек» при получении тиковых данных в C# (и кое что интересное в конце).

1. Если у вас нет Metatrader 5 заходим в личный кабинет Финама «заказываем» новый терминал — вот как это быстро сделать.
2. Естественно Metatrader 5 «из коробки» не умеет работать с ZeroMQ, но на гитхабе есть товарищи, которые «подружили» эти два превосходных инструмента, теперь осталось разобраться с версиями. Поэтому мы:
* Заходим на страницу издателя на github
* Качаем архив libzmq 4.3.4
* Открываем архив и видим, что там 100500 файлов, но не пугаемся
* Копируем 2 файла
* libzmq-v140-mt-4_3_4.dll (Сама библиотека) и
* libsodium.dll (Библиотека шифрования, без неё первая не запустится) — эти файлы точно нам подойдут. Я рекомендую обе dll разблокировать сразу, чтобы не сталкиваться с ошибками лишний раз.

* Кидаем оба файла в папку "MQL5\Libraries". Чтобы открыть папку «MQL5» можно просто в меню metatrader5 нажать на кнопку «Файл»=>"Открыть каталог данных"

1. Теперь, когда у нас есть сам инструмент — начнем с ним работать. Чтобы MQL-код мог общаться с DLL, нужен файл-обертка с расширением mqh, а также советник который мы кинем на любой график и тики автоматически полетят и мы сможем их поймать с помощью клиента-подписчика на C#. Файлы должны лежать в разных папках — так, что есть нюансы — показываю как и что делать:

Для этого файла создаем отдельную папку «zmq» — - должно получиться так: «C:\Program Files\FINAM MetaTrader5\MQL5\Include\Zmq\Zmq.mqh»
Положить его нужно в папку: «C:\Program Files\FINAM MetaTrader5\MQL5\Experts\ZmqSender.mq5»
Далее заходим в эту папку двойным щелчком — открываем этот файл в редакторе и нажимаем F7 — чтобы скомпилировать этот советник, чтобы его стало видно в папке Metatrader 5.

* Галочка "Разрешить импорт DLL": Без неё MT5 даже не чихнет в сторону ZeroMQ. Она должна стоять и в настройках советника, и в Сервис -> Настройки -> Советники.

* Окно Брандмауэра Windows. Как только код дойдет до команды socket.Bind, Windows испугается: «Какая-то программа открывает порт 5556!».

* Действие: Поставьте галочки и для «Частных», и для «Общественных» сетей. Нажмите «Разрешить».
* Если окна не было: Значит, DLL даже не загрузилась (см. Шаг 1).
* Если в журнале MT5 появилось >>> HFT DEBUGGER STARTED — поздравляю, половина пути пройдена. Ваш MT5 теперь вещает как радиостанция.

Wealth-Lab 6 — это надежная но старая программа, она не понимает современные библиотеки .NET Core — поэтому нужно внимательно подходить к выбору версии ZeroMQ для работы с .Net.
Если вы пойдете на страницу NuGet и качаете самую свежую версию NetMQ (например, 4.0.2.2), пытаетесь добавить её в WL6 и получаете:
ERROR: Не удалось загрузить файл или сборку System.Memory...
Суть проблемы:
Новые версии NetMQ оптимизированы для современных процессоров и требуют библиотеки System.Memory, System.Buffers и т.д. В старом .NET Framework 4.5, на котором работает WL6, их нет.
Самое лучшее решение — это скачать старую версию NetMQ 4.0.0.1 — она идеальна для Wealth-Lab 6.9.
Она уже достаточно современная, чтобы работать быстро, но еще не требует кучи зависимостей.
Вам нужны два файла с NuGet (распаковываем как ZIP):
1. NetMQ.dll (версия 4.0.0.1)
2. AsyncIO.dll (версия 0.1.26.0) — Обязательно! NetMQ без неё не живет.
Вы скачали правильные DLL, положили их в папку Wealth-Lab(обычно «C:\Program Files\MS123\Wealth-Lab Developer 6»), пытаетесь добавить Reference… и видите ошибку: «Could not add this Reference… ». Windows ставит на скачанные из интернета DLL «Черную метку» (Zone Identifier). Wealth-Lab видит эту метку и отказывается трогать файл палкой. Как и с прошлыми Dll нужно просто их разблокировать!
Ритуал очищения :
1. Идем в папку с файлами.
2. Правой кнопкой на NetMQ.dll -> Свойства.
3. Внизу ставим галочку «Разблокировать» (Unblock) -> ОК.
4. Повторяем то же самое для AsyncIO.dll.
5. И снова добавляем Reference в WL6 — теперь работает!

Мы начинаем писать саму стратегию в Wealth-Lab, в которой и будет находится наш сервер-слушатель. Но нужно знать нюансы, чтобы не повесить «велс» на вечность.
Каждый раз, когда стратегия пересчитывается, она запускается заново. Если не сделать защиту, вы запустите 10, 20, 100 потоков, которые будут драться за один порт.
Мы используем static переменные. Они живут в памяти, даже когда стратегия перезапускается.
Вот тут код Стратегии, который нужно запустить в WealthLab.
Скопируйте это в редактор стратегий. Не забудьте добавить Reference на NetMQ.dll!

Мы собрали все компоненты. Пора нажать красную кнопку.
Шаг 1. Запуск Сервера (MT5)
1. Открываем график (например, RIZ5, M1).
2. Кидаем на него советника ZmqSender.
3. Смотрим:
Шаг 2. Запуск Клиента (WL6)
1. Открываем стратегию.

2. Вставляем код и файла стратегии.
3. Добавляем референсы


3. Нажимаем F5 (Run Strategy).
4. Смотрим:
Шаг 3. Финал
Сворачиваем все окна. Смотрим на Рабочий Стол.
Там должен появиться файл MT5_WLD_DEBUG.csv.
Откройте его (желательно через Notepad++, чтобы видеть обновления в реальном времени).
Вы должны увидеть вот это:

Если цифры обновляются — поздравляю!
Вы только что создали очень быстрый-мост между двумя несовместимыми платформами. Вы обошли систему безопасности Windows, победили ад DLL-зависимостей и заставили .NET 4.5 общаться с нативным C++ через ZeroMQ.
Теперь задержка передачи данных составляет всег несколько миллисекунд- это было интересное приключение, но что дальше? 🚀
Если вы приложите достаточно настойчивости можете дойти и до Streaming провайдера и например торговать полу-автоматически совершенно бесплатно!
Либо использовать WealthLab, как продвинутый Xtick в котором за минуту можно «накидать» собственный индекс из акций Сбербанка, Газпрома и Лукойла и смотреть на него как на «поводырь», а также моментально протестировать любую свою идею и на нейронных сетях, тоже!
Вот такую красоту можно получить (если сделать свой провайдер)- тики приходят очень быстро:

В TsLab фид стоит 60000 руб. в год — но не всем нужно именно алгоритмически торговать свои идеи, поэтому забирайте для полуавтоматической торговли и тестов!
Друзья, ставьте как можно больше плюсиков и добавляйтесь в группу в vk: vk.com/trading5! Пишите мне в телеграм: @NikolayFly!
Чем больше плюсов — тем чаще я буду писать!
Спасибо за внимание + картинка для правильного вайба!

Практическое использование всего этого как???
Когда комисс биржи стал конский.
Выигрываю миллисекунды.
Ну ладно зачем?
Есть такая категория людей, которая хочет торговать полу-автоматически. Им достаточно провайдера данных, чтобы получать алерты и торговать с телефона, например! Я думаю многим скальперам будет полезно иметь такой гибкий инструмент! Конечно, я не буду расписывать полностью, как создать провайдер. А также — этот способ подходит не только для велса но и для других весьма платных программ!
Отличная статья!
Да, WelathLab 6.9 была простой и удивительно хорошей программой. Знаю, что многие до сих пор ею пользуются.
Спасибо, Николай!
а с другой стороны, можно просто все накодить через MQL5 и не париться