Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 680

 

В тему о том как перенести нейронку из 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 (это начало расчёта ошибок для бэкпропа, для простого предсказания не нужно)


Вот такой код можно использовать в советнике - 

   double sigmoid(double sum)
     {
      if(sum<-15.0)
         return (0.0);
      else if(sum>15.0)
         return (1.0);
      else
         return (1.0 / (1.0 + exp(-sum)));
     }

//nnet_hidden - число нейронов в скрытом слое
//выход один
//nnet_weights - массив с весами нейронки взятыми из R после обучения nnet модели

int weights_it=0;
double hiddenLayer[];
ArrayResize(hiddenLayer,nnet_hidden);
for(int i=0; i<nnet_hidden; i++)
 {
  hiddenLayer[i]=nnet_weights[weights_it++];
  for(int j=1; j<=nnet_bars; j++)
    {
     hiddenLayer[i]+=openPrices[j]*nnet_weights[weights_it++];
    }
  hiddenLayer[i]=sigmoid(hiddenLayer[i]);
 }
double prediction=nnet_weights[weights_it++];
for(int i=0; i<nnet_hidden; i++)
 {
  prediction+=hiddenLayer[i]*nnet_weights[weights_it++];
 }
if(!linout)
 {
  prediction = sigmoid(prediction);
 }

этот код подойдёт только при параметре модели skip = FALSE
Если он не такой, или используется софтмакс - ищите отличия в функции fpass()


веса (массив nnet_weights) нужно скопировать из самого R после обучения

library(nnet)
trainedModel <- nnet(y = 1:10, x = matrix(runif(20),ncol=2), size=10)
nnet_weights <- trainedModel$wts
cat("double nnet_weights[] = {", paste(format(weights,digits=16,scientific=T), collapse=","), "};", file="D:/weights.txt") #сохранить веса в файлик чтоб оттуда скопипастить в советник
 
О! Это уже что-то. Чуть доработать и можно использовать. Спасибо!
 

Еще небольшая ознакомительная статейка по reinforcement, пока суть да дело

было бы интересно организовать небольшой тимворк и мозговой штурм на mql и делиться опытом, тема очень интересная а другие подходы уже все обсосаны

https://proglib.io/p/trade-learning/

Трейдинг и машинное обучение с подкреплением
Трейдинг и машинное обучение с подкреплением
  • 2018.02.15
  • matyushkin
  • proglib.io
В статье рассмотрено, как машинное обучение с подкреплением может применяться для трейдинга финансовых рынков и криптовалютных бирж. Академическое сообщество Deep Learning в основном находится в стороне от финансовых рынков. В силу ли того, что у финансовой индустрии не лучшая репутация, что решаемые проблемы не кажутся слишком интересными для...
 

На мой взгляд обучение с подкреплением обычно даёт модель с очень большим оверфитом, а кроссвалидация в этом случае не спасёт. Внутри самой модели должны быть какие-то особые механизмы против офервита.

Для тех кто ещё не познакомился с этой темой, вкратце: вместо обычной оценки модели (точность, r2, logloss, итд) - создаётся особая фитнесс функция с собственной логикой оценки модели. Такая фитнесс функция может например считать профит модели при торговле, или sharperatio. А параметры модели подбираются генетическим алгоритмом.

Любопытно что оптимизатор в мт4 и мт5 тоже работает по принципу обучения с подкреплением - советник на каждом баре (или даже тике) получает текущие значения цены и индикаторов, принимает какие-то решения, по ним совершается торговля, а итоговая оценка советника считается как результат торговли. Параметры советника подбираются генетикой для повышения оценки. 
Судя по свободно доступным советникам для мт5 наглядно видно что такой способ обучения пораждает очень много сливаторов. Но иногда получаются и хорошие советники тоже.

 
Dr. Trader:

На мой взгляд обучение с подкреплением обычно даёт модель с очень большим оверфитом, а кроссвалидация в этом случае не спасёт. Внутри самой модели должны быть какие-то особые механизмы против офервита.

Для тех кто ещё не познакомился с этой темой, вкратце: вместо обычной оценки модели (точность, r2, logloss, итд) - создаётся особая фитнесс функция с собственной логикой оценки модели. Такая фитнесс функция может например считать профит модели при торговле, или sharperatio. А параметры модели подбираются генетическим алгоритмом.

Любопытно что оптимизатор в мт4 и мт5 тоже работает по принципу обучения с подкреплением - советник на каждом баре (или даже тике) получает текущие значения цены и индикаторов, принимает какие-то решения, по ним совершается торговля, а итоговая оценка советника считается как результат торговли. Параметры советника подбираются генетикой для повышения оценки. 
Судя по свободно доступным советникам для мт5 наглядно видно что такой способ обучения пораждает очень много сливаторов. Но иногда получаются и хорошие советники тоже.

Хорошая аналогия с оптимизтором, как раз предыдущий мой бот был об этом, но он слишком прост

но вообще это не так, RL если не противопоставляется генетике, то подчеркиваются его преимущества, например возможность работы на нестационарных процессах. В частности, можно использовать не жадные фитнесс ф-ии, благодаря которым модель постоянно дообучается в процессе работы и делает случайные шаги. А в качестве оптимизатора используется обвес из НС (не генетика)

Там все несколько сложнее, но я еще не дочитал книженцию.

Т.е. ваше утверждение про генетику, оптимизатор и RL неверно

 

*минутка эмоций, философии, и всего такого*

Представьте ясный солнечный день. Вы сидите на травке рядом с прудом, дует тёплый весенний ветерок оставляя рябь на воде, где-то недалеко слышны звуки уток. Неглубоко под водой плавают рыбы иногда касаясь поверхность плавниками и разводя круги по воде. Соседка рядом черпает воду, а её внук бросает камни в воду гоняя лягушек из стороны в сторону. На другой стороне пруда какой-то мужик моет машину.

Цена - это как волны на воде от всей этой суматохи но ещё и во время бури. Мы можем проследить за волнами и попытаться угадать когда вода начнёт подыматься или понижаться в конкретной точке, но если не будем следить за окружающей средой - в большинстве случаев будем ошибаться.

Будущее значение цены зависит не от прошлых её значений, а от глобальных мировых процессов которые и вызывали прошлые изменения цены, и будут вызывать новые изменения.
Нужно следить не только за волнами на воде, но и ветром, траекторией рыб, ведром соседки, итд, тогда природа волн на воде будет понятна и предсказуема.

Соответственно если у вас есть информация о всех глобальных процессах влияющих на цену - можете по ним научиться предсказывать, и с этим справится любая простая модель из прошлого века.
Проблема в том что обычно есть только график цены, а этого мало.

 

Здесь как соединить RL и NN

 

и видосик, есть 2-я часть еще

все, больше не спамлю, кому интересно почитают


 
С нейросетями в МТ все просто. Есть библиотека от Майкрософт CNTK. Она реализованна для Питона, C# и C++. Весь анализ и обучение сети делается на Питоне, а на C++ пишится DLL которая загружает обученную сеть и ведет по ней расчеты. На мой взгляд это самый оптимальный вариант. Второй вариант, подключение Питон к МТ. Я написал для этого простую библиоткеу. Библиотека. Подключаем и можем использовать все что доступно в Питоне. А доступно очень много всего. Я думаю, не начать ли мне писать о машинном обучении в своем блоге.
 
Grigoriy Chaunin:
С нейросетями в МТ все просто. Есть библиотека от Майкрософт CNTK. Она реализованна для Питона, C# и C++. Весь анализ и обучение сети делается на Питоне, а на C++ пишится DLL которая загружает обученную сеть и ведет по ней расчеты. На мой взгляд это самый оптимальный вариант. Второй вариант, подключение Питон к МТ. Я написал для этого простую библиоткеу. Библиотека. Подключаем и можем использовать все что доступно в Питоне. А доступно очень много всего. Я думаю, не начать ли мне писать о машинном обучении в своем блоге.

по стратегиям было бы интересно почитать и по личным мыслям\опыту.. лично мне

потому что в основном здесь пишут всякий хлам про перебор куч библиотек и на чем лучше писать\не писать.. эпидемия просто, и все в молоко

хотя основная мысль была уже давно озвучена fxsaber - при таком подходе с тем же успехом тему можно было бы просто закрыть, потому что он изначально ошибочный

Причина обращения: