Блог им. MrFly

Тиковые данные в WealthLab со скоростью света! Только тут

Тиковые данные в WealthLab со скоростью света! Только тут Тиковые данные в WealthLab со скоростью света! Только тут

Я работал во множестве терминалах, но моя «любовь на всегда» — это Wealth-Lab!

И  я знаю — многие любят «велс» также сильно, как и я, однако у него была одна сложно-решаемая проблема — это данные российского рынка! Постоянно приходилось загружать их можно сказать вручную — а о том, чтобы работать с ним как с Xtick(терминал технического анализа) не было и речи, хотя WealthLab настолько гибкий, что можно было бы сделать просмотровый терминал покруче Xtick и многих других.

Например — вы хотели бы получать сигналы в телеграм или просто скальпировать, глядя на кастомные/уникальные индикаторы — это можно сделать в WealthLab и я говорю не о последней версии веса, а о старой доброй версии 6.9 — которая распространена «по интернетам»!

Есть несколько быстрых(для подключения) и удобных поставщиков тиковых данных — но самым удобным и простым для доступа оказался фид из терминала MetaTrader 5 (в моем случае от Финама). Он подключается за 1 минуту и сразу готов к работе!

Если мы хотим, чтобы тики поступали к нам в терминал реально быстро — можно воспользоваться таким вариантом, как ZeroMQ. Это технология сокетов, которая работает быстрее, чем вы успеваете моргнуть. Если простым языком — то как только приходит тик в Metatrader — ZeroMQ моментально отправит эти данные на «клиент- подписчик», который мы развернем прямо внутри стратегии WealthLab на этом же компьютере ( чтобы показать, что сервер можно создать практически где угодно, лишь бы был доступ к C# – в боевом режиме, конечно лучше streamingDataProvider).

А теперь начинается мастер-класс для тех, кто хочет избежать «шишек» при получении тиковых данных в C# (и кое что интересное в конце).

Тиковые данные в WealthLab со скоростью света! Только тут

1. Если у вас нет Metatrader 5 заходим в личный кабинет Финама «заказываем» новый терминал — вот как это быстро сделать.            

2. Естественно Metatrader 5 «из коробки» не умеет работать с ZeroMQ, но на гитхабе есть товарищи, которые «подружили» эти два превосходных инструмента, теперь осталось разобраться с версиями. Поэтому мы:            

            * Заходим на страницу издателя на github

             * Качаем архив libzmq 4.3.4

             * Открываем архив и видим, что там 100500 файлов, но не пугаемся

             * Копируем 2 файла

                     * libzmq-v140-mt-4_3_4.dll (Сама библиотека) и

                     * libsodium.dll (Библиотека шифрования, без неё первая не запустится) — эти файлы точно нам подойдут. Я рекомендую обе dll разблокировать сразу, чтобы не сталкиваться с ошибками лишний раз.

Тиковые данные в WealthLab со скоростью света! Только тут

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

Тиковые данные в WealthLab со скоростью света! Только тут

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

Вот файл с расширением mqh:

Тиковые данные в WealthLab со скоростью света! Только тут

Для этого файла создаем отдельную папку «zmq» — - должно получиться так: «C:\Program Files\FINAM MetaTrader5\MQL5\Include\Zmq\Zmq.mqh»

Файл советника- берем вот тут

Положить его нужно в папку: «C:\Program Files\FINAM MetaTrader5\MQL5\Experts\ZmqSender.mq5»

Далее заходим в эту папку двойным щелчком — открываем этот файл в редакторе и нажимаем F7 — чтобы скомпилировать этот советник, чтобы его стало видно в папке Metatrader 5.

Тиковые данные в WealthLab со скоростью света! Только тут

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

Тиковые данные в WealthLab со скоростью света! Только тут

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

Тиковые данные в WealthLab со скоростью света! Только тут

          * Действие: Поставьте галочки и для «Частных», и для «Общественных» сетей. Нажмите «Разрешить».

         * Если окна не было: Значит, DLL даже не загрузилась (см. Шаг 1).

         * Если в журнале MT5 появилось >>> HFT DEBUGGER STARTED — поздравляю, половина пути пройдена. Ваш MT5 теперь вещает как радиостанция.

Тиковые данные в WealthLab со скоростью света! Только тут

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 — теперь работает!

Тиковые данные в WealthLab со скоростью света! Только тут

Мы начинаем писать саму стратегию в Wealth-Lab, в которой и будет находится наш сервер-слушатель. Но нужно знать нюансы, чтобы не повесить «велс» на вечность.

Каждый раз, когда стратегия пересчитывается, она запускается заново. Если не сделать защиту, вы запустите 10, 20, 100 потоков, которые будут драться за один порт.

Мы используем static переменные. Они живут в памяти, даже когда стратегия перезапускается.

Вот тут код Стратегии, который нужно запустить в WealthLab.

Скопируйте это в редактор стратегий. Не забудьте добавить Reference на NetMQ.dll!

Тиковые данные в WealthLab со скоростью света! Только тут

Мы собрали все компоненты. Пора нажать красную кнопку.

Шаг 1. Запуск Сервера (MT5)

               1. Открываем график (например, RIZ5, M1).

               2. Кидаем на него советника ZmqSender.

               3. Смотрим:

  • В углу графика надпись: ZMQ Streamer Active.
  • Внизу во вкладке «Эксперты»: Sent tick #1, Sent tick #10…
  • Если сообщений нет: Рынок закрыт? (Выходные). Или вы забыли нажать «Разрешить импорт DLL».

Шаг 2. Запуск Клиента (WL6)

             1. Открываем стратегию.

Тиковые данные в WealthLab со скоростью света! Только тут

             2. Вставляем код и файла стратегии.            

             3. Добавляем референсы

Тиковые данные в WealthLab со скоростью света! Только тутТиковые данные в WealthLab со скоростью света! Только тут

              3. Нажимаем F5 (Run Strategy).            

              4. Смотрим:

  • Окно Debug: Initializing ZeroMQ Listener... -> Background task is active.
  • На графике: Зеленая надпись ZMQ STATUS: LISTENING (OK)

Шаг 3. Финал

Сворачиваем все окна. Смотрим на Рабочий Стол.

Там должен появиться файл MT5_WLD_DEBUG.csv.

Откройте его (желательно через Notepad++, чтобы видеть обновления в реальном времени).

Вы должны увидеть вот это:

Тиковые данные в WealthLab со скоростью света! Только тут

Если цифры обновляются — поздравляю!

Вы только что создали очень быстрый-мост между двумя несовместимыми платформами. Вы обошли систему безопасности Windows, победили ад DLL-зависимостей и заставили .NET 4.5 общаться с нативным C++ через ZeroMQ.

Теперь задержка передачи данных составляет всег несколько миллисекунд- это было интересное приключение, но что дальше? 🚀

Если вы приложите достаточно настойчивости можете дойти и до Streaming провайдера и например торговать полу-автоматически совершенно бесплатно!

Либо использовать WealthLab, как продвинутый Xtick в котором за минуту можно «накидать» собственный индекс из акций Сбербанка, Газпрома и Лукойла и смотреть на него как на «поводырь», а также моментально протестировать любую свою идею и на нейронных сетях, тоже!

Вот такую красоту можно получить (если сделать свой провайдер)- тики приходят очень быстро:

Тиковые данные в WealthLab со скоростью света! Только тут

В TsLab фид стоит 60000 руб. в год — но не всем нужно именно алгоритмически торговать свои идеи, поэтому забирайте для полуавтоматической торговли и тестов!

Друзья, ставьте как можно больше плюсиков и добавляйтесь в группу в vk:  vk.com/trading5! Пишите мне в телеграм: @NikolayFly!

Чем больше плюсов — тем чаще я буду писать!

Спасибо за внимание + картинка для правильного вайба!

Тиковые данные в WealthLab со скоростью света! Только тут
4.9К | ★17
22 комментария
Хорошо, это все прекрасно)))

Практическое использование всего этого как???
Когда комисс биржи стал конский.
Выигрываю миллисекунды.
Ну ладно зачем?
avatar
Байкал, спасибо за комментарий!
Есть такая категория людей, которая хочет торговать полу-автоматически. Им достаточно провайдера данных, чтобы получать алерты и торговать с телефона, например! Я думаю многим скальперам будет полезно иметь такой гибкий инструмент! Конечно, я не буду расписывать полностью, как создать провайдер. А также — этот способ подходит не только для велса но и для других весьма платных программ!
avatar
Николай Флёров, понял)
avatar
Полезнейшая статья! Удивительно как много ты раздаёшь всем ценной информации! Большинство людей этого не заслуживают.
avatar
Blade, привет! Спасибо за добром слове! Я надеюсь, что если хотя бы человек 10 сделают себе стриминговый коннектор к велсу, или к другим программам — это будет полезно для их развития и прибыли!
avatar

Отличная статья!

Да, WelathLab 6.9 была простой и удивительно хорошей программой. Знаю, что многие до сих пор ею пользуются.

Спасибо, Николай!

avatar
IgorMushtriev, спасибо за приятные слова! Я постарался написать статью максимально подробно, чтобы интересующийся человек — мог бы не только повторить, но и создать на основе этого что-то более мощное и возможно получить себе дополнительный аналог tsLab — без расходов!
avatar

а с другой стороны, можно просто все накодить через MQL5 и не париться

avatar
Kuzma Shevelev, спасибо за комментарий! Без сомнений — но я когда пользуюсь metatrader 5 — мне хочется просто написать какой-то отдельный софт, который будет мне показывать performance, как в WealthLab — интуитивно понятный, удобный и приятный для глаз. Или визуализаторы, чтобы посмотреть удобно эквити с просадкой — и тут нужно принять решение — либо доделывать «удобности» вокруг Metatrader 5, либо просто сделать фид в WeakthLab и ничего больше не доделывать!))
avatar
Николай Флёров, 
Или визуализаторы, чтобы посмотреть удобно эквити с просадкой
для этого есть эксель ;)
Дмитрий Овчинников, спасибо за комментарий! Тут можно вспомнить и некоторые пакеты на python с разными визуализаторами/дэшбордами. Но все же Wealth рисует графики красиво:

avatar
Николай Флёров, 
мой эксель красивее :)

screenshot
Дмитрий Овчинников, красивый график)), жаль увеличить нельзя). Реальная эквити-красивее всего!
Спасибо за плюсик и за поддержку!
avatar
Николай Флёров, 
жаль увеличить нельзя)

правая кнопка мыши- открыть в новой вкладке. Кхе-мофей он такой :)
Очень круто и полезно!
Но в чем преимущество именно этой связки?
avatar
Михаил Шардин, здравствуйте! Очень рад вашему комментарию — спасибо за такую оценку моей работы!
В первую очередь — это очень простой способ и быстро-реализуемый!
Во-вторых я сравнивал варианты скорости получения алертов от таких связок как :
tradingView+webhook,
BackTrader+ один из коннекторов Игоря Чечета,
OsEngin + Алор
И данный способ на мой взгляд самый быстрый по скорости получения такого алерта(не уступает OsEngin), а также по трудозатратам на освоение технологии, особенно если есть streamingProvider!
Я знаю, что вы используете BackTrader — напишите пожалуйста — сколько примерно у него задержка миллисекунд, хотя бы примерно. По-моему Игорь говорил, что на отправку заявки уходит до 2 секунд! И есть ли разница работать с Windows или без нее с точки зрения скорости!
Мне и многим другим будет это интересно!
Спасибо за комментарий!
avatar
И чем отличается от scalp например?
Там тоже такую идею можно сделать
avatar
Михаил Шардин, тут я не совсем понял про какой scalp вы говорите, может про Cscalp? Если так — он. конечно бесплатный и наверняка быстрый раз — это скальперский привод. Но нельзя сравнивать Wealth-Lab, где можно написать практически любой индикатор, свой индекс, получать данные из интернета(запросы, твиттер, соцсети), также получать сигналы именно от протестированной «боевой» стратегии, можно подключить python и соответственно ml и прочее. Ну и с помощью данного способа можно подключить и просто приложение на python — в принципе, из статьи можно взять информацию только с сторону Metatrader 5 и саму идею zmq.
Если уточните о каком scalp идет речь — я мог бы ответить более точно.
Конечно Wealth-ом мир не ограничился — если постараться можно подключить любое C# терминал и NinjaTrader и Multicharts и TsLab.
Рад с Вами пообщаться и жду ответа!
avatar
Денeг не дам.
avatar
Schwonder, =) я рад, что Вы полностью самодостаточны!
Буду рад просто общаться!
avatar
Николай, огромное Вам спасибо! Это-же надо наковырять такую связку. Может быть, сразу мимоходом спрошу, у вас или у кого-то из коллег  есть способ похожего экспорта из метатрейдера в амиброкер? Предупреждая вопрос людей — зачем, если в квике есть штатный экспорт — для экспорта американских и международных акций.

К стыду своему должен признать, что я давно ковыряюсь пытаясь выстроить какую-то рабочую связку, и пока как-то посматриваю на все варианты, т.е. амиброкер, сам метатредер, осэнжин и велс. Амиброкер подкупает своей огромной скоростью для работы на больших списках акций. У метатрейдера хороша встройка в инфраструктуру брокеров и уже есть встроеный язык, т.е. как-бы завершенная концепция, но есть какие-то трудноформулируемые моменты, почему он не очень нравится, т.е. пока больше его рассматриваю как источник данных. Осэнжин очень большой. Не могли-бы вы рассказать о вашем опыте автоматических связок, если он есть, и опыт других тоже интересует, друзья, поделитесь опытом, какие связки используете?.. Связки, для полного автомата.
avatar
Shmelik, спасибо за комментарий!
Да — связка 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 взять точно рабочие стратегии переписать логику на любой терминал!)
Надеюсь, что помог!
avatar

Читайте на SMART-LAB:
Фото
С Новым годом от кманды SFI
Дорогие друзья! Поздравляем вас с наступающим Новым годом! Прошедшие 12 месяцев стали для SFI по-настоящему важными и во многом поворотными....
Фото
Мой Рюкзак #60: Это был тяжелый год, но допущена всего 1 ошибка
Традиционный итоговый пост Рюкзака — 31 декабря для этого подходит как нельзя кстати.  Сделок сегодня, естественно не совершал. В публичном...
Фото
Департамент по работе с эмитентами поздравляет вас с наступающим Новым годом 🎄
Спасибо за вдохновение и поддержку в уходящем году. Без вас не случились бы новые проекты, продукты, сервисы, вебинары. Регулярно анализируя...

теги блога Николай Флёров

....все тэги



UPDONW
Новый дизайн