Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 680
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В тему о том как перенести нейронку из R в mql:
Я делал такое с пакетом nnet. Нужно посмотреть исходники https://cran.r-project.org/web/packages/nnet/index.html (Package source: nnet_7.3-12.tar.gz). Там в архиве папка src / nnet.c
Нужна функция fpass, первых несколько строк до thisError = 0.0 (это начало расчёта ошибок для бэкпропа, для простого предсказания не нужно)
Вот такой код можно использовать в советнике -
этот код подойдёт только при параметре модели skip = FALSE
Если он не такой, или используется софтмакс - ищите отличия в функции fpass()
веса (массив nnet_weights) нужно скопировать из самого R после обучения
Еще небольшая ознакомительная статейка по reinforcement, пока суть да дело
было бы интересно организовать небольшой тимворк и мозговой штурм на mql и делиться опытом, тема очень интересная а другие подходы уже все обсосаны
https://proglib.io/p/trade-learning/
На мой взгляд обучение с подкреплением обычно даёт модель с очень большим оверфитом, а кроссвалидация в этом случае не спасёт. Внутри самой модели должны быть какие-то особые механизмы против офервита.
Для тех кто ещё не познакомился с этой темой, вкратце: вместо обычной оценки модели (точность, r2, logloss, итд) - создаётся особая фитнесс функция с собственной логикой оценки модели. Такая фитнесс функция может например считать профит модели при торговле, или sharperatio. А параметры модели подбираются генетическим алгоритмом.
Любопытно что оптимизатор в мт4 и мт5 тоже работает по принципу обучения с подкреплением - советник на каждом баре (или даже тике) получает текущие значения цены и индикаторов, принимает какие-то решения, по ним совершается торговля, а итоговая оценка советника считается как результат торговли. Параметры советника подбираются генетикой для повышения оценки.
Судя по свободно доступным советникам для мт5 наглядно видно что такой способ обучения пораждает очень много сливаторов. Но иногда получаются и хорошие советники тоже.
На мой взгляд обучение с подкреплением обычно даёт модель с очень большим оверфитом, а кроссвалидация в этом случае не спасёт. Внутри самой модели должны быть какие-то особые механизмы против офервита.
Для тех кто ещё не познакомился с этой темой, вкратце: вместо обычной оценки модели (точность, r2, logloss, итд) - создаётся особая фитнесс функция с собственной логикой оценки модели. Такая фитнесс функция может например считать профит модели при торговле, или sharperatio. А параметры модели подбираются генетическим алгоритмом.
Любопытно что оптимизатор в мт4 и мт5 тоже работает по принципу обучения с подкреплением - советник на каждом баре (или даже тике) получает текущие значения цены и индикаторов, принимает какие-то решения, по ним совершается торговля, а итоговая оценка советника считается как результат торговли. Параметры советника подбираются генетикой для повышения оценки.
Судя по свободно доступным советникам для мт5 наглядно видно что такой способ обучения пораждает очень много сливаторов. Но иногда получаются и хорошие советники тоже.
Хорошая аналогия с оптимизтором, как раз предыдущий мой бот был об этом, но он слишком прост
но вообще это не так, RL если не противопоставляется генетике, то подчеркиваются его преимущества, например возможность работы на нестационарных процессах. В частности, можно использовать не жадные фитнесс ф-ии, благодаря которым модель постоянно дообучается в процессе работы и делает случайные шаги. А в качестве оптимизатора используется обвес из НС (не генетика)
Там все несколько сложнее, но я еще не дочитал книженцию.
Т.е. ваше утверждение про генетику, оптимизатор и RL неверно
*минутка эмоций, философии, и всего такого*
Представьте ясный солнечный день. Вы сидите на травке рядом с прудом, дует тёплый весенний ветерок оставляя рябь на воде, где-то недалеко слышны звуки уток. Неглубоко под водой плавают рыбы иногда касаясь поверхность плавниками и разводя круги по воде. Соседка рядом черпает воду, а её внук бросает камни в воду гоняя лягушек из стороны в сторону. На другой стороне пруда какой-то мужик моет машину.
Цена - это как волны на воде от всей этой суматохи но ещё и во время бури. Мы можем проследить за волнами и попытаться угадать когда вода начнёт подыматься или понижаться в конкретной точке, но если не будем следить за окружающей средой - в большинстве случаев будем ошибаться.
Будущее значение цены зависит не от прошлых её значений, а от глобальных мировых процессов которые и вызывали прошлые изменения цены, и будут вызывать новые изменения.
Нужно следить не только за волнами на воде, но и ветром, траекторией рыб, ведром соседки, итд, тогда природа волн на воде будет понятна и предсказуема.
Соответственно если у вас есть информация о всех глобальных процессах влияющих на цену - можете по ним научиться предсказывать, и с этим справится любая простая модель из прошлого века.
Проблема в том что обычно есть только график цены, а этого мало.
Здесь как соединить RL и NN
и видосик, есть 2-я часть еще
все, больше не спамлю, кому интересно почитают
С нейросетями в МТ все просто. Есть библиотека от Майкрософт CNTK. Она реализованна для Питона, C# и C++. Весь анализ и обучение сети делается на Питоне, а на C++ пишится DLL которая загружает обученную сеть и ведет по ней расчеты. На мой взгляд это самый оптимальный вариант. Второй вариант, подключение Питон к МТ. Я написал для этого простую библиоткеу. Библиотека. Подключаем и можем использовать все что доступно в Питоне. А доступно очень много всего. Я думаю, не начать ли мне писать о машинном обучении в своем блоге.
по стратегиям было бы интересно почитать и по личным мыслям\опыту.. лично мне
потому что в основном здесь пишут всякий хлам про перебор куч библиотек и на чем лучше писать\не писать.. эпидемия просто, и все в молоко
хотя основная мысль была уже давно озвучена fxsaber - при таком подходе с тем же успехом тему можно было бы просто закрыть, потому что он изначально ошибочный