3Qu
3Qu личный блог
18 января 2021, 22:58

Использование Машинного Обучения в торговых системах. Реализация.

В топике Использование Машинного Обучения в торговых системах. Простейшее применение описаны принципы построение логики ТС с применением Машинного Обучения (МО). Вкратце опишем пути реализации.
Это уже посложней — нам понадобятся знания  Lua, С++ и Python.
Я предпочитаю ничего не делать сам, особенно, если для написания программы требуется изучение и реализация сложных алгоритмов. Зачем это делать, если можно использовать уже готовое. В современном программировании это один из основных принципов объектно-ориентированного программирования — берешь готовый объект и используешь. Если есть уже готовые библиотеки с нужными программами, то их и используем — сокращает время реализации, не надо беспокоиться об отладке, и много других плюсов. Извините, ленив и нелюбопытен — есть масса других интересных вещей, на которые можно потратить свое время.
Для начала пишем на C++ простенькую DLL для связи с Lua — шаблон проекта такой DLL вы можете найти в моих топиках. Нужный Вам код вам придется писать самим.
Далее, подключаем нашу DLL (скажем, LogicDLL.dll) к программе Lua с помощью require(«LogicDLL»).  В функции Lua OnInit() запускаем Python и, если нужно, его функцию DLL загружающую в Python вашу Python программу и данные, необходимые для ее работы — всяческие константы, матрицы МО, необходимые для работы ваших методов и прочее.
Теперь нам осталось только периодически вызывать из Lua функцию С++, которая, в свою очередь, будет вызывать и передавать в метод МО Python необходимые для МО данные и возвращать в Lua результат вычислений.
Немного о Python. Активация и вызов функций Python осуществлятся из С/С++ через Python C-API. Все это расписано в документации Python - Справочное руководство по Python / C API и Расширение и встраивание интерпретатора Python в котором приводятся конкретные примеры использования Python в программах С/С++.
Да, немного сложновато, но, если вы знакомы с С/С++, на  освоение этого уйдет несколько дней, но взамен вы получите доступ ко многим библиотекам Python (и не только МО, но и многим другим, реализация которых в Lua или С++ нам и не снилась.).
Теперь, чтобы было чуть понятней, немного о том, как я делаю стратегии и ТС.
Вначале я пишу стратегию на Python и отлаживаю ее на исторических данных. В Python очень удобно и быстро строить и перестраивать графики, гистограммы, таблицы, проводить анализ данных — в общем, любой каприз за ваши деньги.
После полной отладки стратегии, если в этом есть смысл, стратегия переводится на рабочий язык ТС. В случае с Quik мы имеем рабочие языки Lua и DLL написанную на C++. В моем случае, основной код стратегии расположен в DLL, Lua в основном предназначена для трансляции данных терминала в DLL и выполнения запросов из DLL к функциям Lua программы.
В ходе переноса стратегии на язык ТС, то, что несложно реализовать на Lua или С++ переписывается на рабочие языки ТС, а то что сделать сложно остается в Python и вызывается из него функциями DLL.
Многие воротят нос от Python, говоря о его низком быстродействии. Этого я вообще не понимаю. Если вы успеваете в Quik щелкать мышкой купи/продай, то Python это тем более успеет. Кроме того, Python, в нашем случае, используется как язык сценариев и его доля времени в исполнении программы очень невелика — основную долю времени занимает обработка данных библиотеками Python, а они очень быстрые и, как правило,  представляют собой скомпилированные С++ программы.
4 Комментария
  • _sg_
    19 января 2021, 12:25
    Вы какой с++ компилятор используете и в какой среде ?
    У меня C++ 17 в Visual Studio не взлетел.
  • Влад(и)Мир
    21 января 2021, 21:00
    VS 2019 (как и предыдущие версии) имеет настройки, позволяющие отключить ненужное на этапе загрузки.
  • Влад(и)Мир
    21 января 2021, 21:13

    Снова общие слова, и ни строки кода.

    Пример статьи здорового человека:

    smart-lab.ru/blog/624695.php


    И нафига так усложнять?

    github.com/bastibe/lunatic-python

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн