Блог им. 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 и не париться
мой эксель красивее :)
Спасибо за плюсик и за поддержку!
правая кнопка мыши- открыть в новой вкладке. Кхе-мофей он такой :)
Но в чем преимущество именно этой связки?
В первую очередь — это очень простой способ и быстро-реализуемый!
Во-вторых я сравнивал варианты скорости получения алертов от таких связок как :
tradingView+webhook,
BackTrader+ один из коннекторов Игоря Чечета,
OsEngin + Алор
И данный способ на мой взгляд самый быстрый по скорости получения такого алерта(не уступает OsEngin), а также по трудозатратам на освоение технологии, особенно если есть streamingProvider!
Я знаю, что вы используете BackTrader — напишите пожалуйста — сколько примерно у него задержка миллисекунд, хотя бы примерно. По-моему Игорь говорил, что на отправку заявки уходит до 2 секунд! И есть ли разница работать с Windows или без нее с точки зрения скорости!
Мне и многим другим будет это интересно!
Спасибо за комментарий!
Там тоже такую идею можно сделать
Если уточните о каком scalp идет речь — я мог бы ответить более точно.
Конечно Wealth-ом мир не ограничился — если постараться можно подключить любое C# терминал и NinjaTrader и Multicharts и TsLab.
Рад с Вами пообщаться и жду ответа!
Буду рад просто общаться!
К стыду своему должен признать, что я давно ковыряюсь пытаясь выстроить какую-то рабочую связку, и пока как-то посматриваю на все варианты, т.е. амиброкер, сам метатредер, осэнжин и велс. Амиброкер подкупает своей огромной скоростью для работы на больших списках акций. У метатрейдера хороша встройка в инфраструктуру брокеров и уже есть встроеный язык, т.е. как-бы завершенная концепция, но есть какие-то трудноформулируемые моменты, почему он не очень нравится, т.е. пока больше его рассматриваю как источник данных. Осэнжин очень большой. Не могли-бы вы рассказать о вашем опыте автоматических связок, если он есть, и опыт других тоже интересует, друзья, поделитесь опытом, какие связки используете?.. Связки, для полного автомата.
Да — связка MT5 + AmiBroker черезZeroMQ — это наверное лучшее техническое решение в данном случае.
Нужно будет воспользоваться AmiBroker Development Kit (ADK), который обновлялся последний раз в 2010г, но он должен подойти.
Скорость и надежность будут на высоте — но сложность из-за того, что нужно писать плагин на C++.
Нужно взять пример «Sample Plugin» из ADK и дорабатывать его. Встроить в пример libzmq. Нужно добавить в нашу DLL глобальную переменную для контекста ZMQ и экспортируйте функцию GetLatestQuote() в AFL.
Либо можно поискать .NET for AmiBroker SDK. Тогда, Вы пишете плагин на C#, используя библиотеку NetMQ — как у меня в примере!
Но нужно ли вам именно это — я так понял, что AmiBroker хорош именно своим супер-быстрым тестированием, но необязательно через него торговать, возможно даже прям очень сильно эффекта не будет.
Я думаю, что можно сделать связку с NinjaTrader, например — его используют для скальпинга. Не думаю что он с точки зрения исполнения намного медленнее!
Я имею в виду — возможно проще оттестированные стратегии в AmiBroker взять точно рабочие стратегии переписать логику на любой терминал!)
Надеюсь, что помог!