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

 
Maxim Dmitrievsky:

https://www.mql5.com/ru/code/127

только там в коде ошибка какая-то по-моему, индикатор неправильно нормируется

Всё правильно, просто нормируется не в [0;1] а в другой интервал.


Для простоты можешь оставить туже фукцию CalcRegression что у тебя есть (только учти что в ней b уже возвращается с противоположным знаком*, т.е. второй раз знак менять тебе не нужно). Опытным путём найди на какое значение нужно домножить результат чтоб он попал в интервал [-0.5;0.5]. И потом прибавь +0.5 чтоб серединка сдвинулась с 0 на 0.5


*но это не точно. вопрос относительности. эта формула даст b с правильным знаком если самые старые по времени цены будут иметь наибольший индекс в массиве.

 
Dr. Trader:

Всё правильно, просто нормируется не в [0;1] а в другой интервал.


Для простоты можешь оставить туже фукцию CalcRegression что у тебя есть (только учти что в ней b уже возвращается с противоположным знаком, т.е. второй раз знак менять тебе не нужно). Опытным путём найди на какое значение нужно домножить результат чтоб он попал в интервал [-0.5;0.5]. И потом прибавь +0.5 чтоб серединка сдвинулась с 0 на 0.5


для разных временных масштабов придется разные макс и мин, не оч удобно, по массиву индикатора нормировать на большом участке истории самое оно, мне кажется
 
Dr. Trader:

*но это не точно. вопрос относительности. эта формула даст b с правильным знаком если самые старые по времени цены будут иметь наибольший индекс в массиве.


просто добавлю в индикатор еще один нормированный буфер по существующему буферу :)
 

С наклоном регрессии тоже интересно может получиться. Бэктест и форвард. Короче выглядит так, что с этой логикой можно работать и экспериментировать с разными предикторами.


Файлы:
 
Maxim Dmitrievsky:

С наклоном регрессии тоже интересно может получиться. Бэктест и форвард. Короче выглядит так, что с этой логикой можно работать и экспериментировать с разными предикторами.


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

Я бы это изменил - 

1) double a3 = regr[0]; - нулевой индекс это самые старые по времени данные. Самый последний (новый) бар тут будет 49 (так как взято 50), лучше его. Но последний может быть перерисовывается, тогда лучше 48. Нужно ещё проверить перерисовывается ли индикатор.
Тоже самое и с rsi, ты убрал из трёх ту что была новее. Есть смысл попробовать убрать ту что была с нулевым индексом, как самую устаревшую.

2) в третьей версии советника от Юрия функция RNN содержит четыре параметра, можно с ней взять сразу и 3 рси и тренд. Вообще функцию можно дополнять новыми параметрами, как в статье Юрия написано, но каждый +1 параметр удвоит число коэффициентов.

3) не люблю стопы и тейки, их оптимальные значения постоянно меняются на новых барах. Точнее даже нету оптимальных значений, есть просто некие "удобные" для советника значения на конкретно взятом временном интервале. Плюс брокеры могут свечки рисовать до стопов. Я бы попробовал на каждом новом баре делать прогноз и просто держать сделку в этом направлении до следующего бара и прогноза, а там переворачиваться если надо.

4)

   int handle=iRSI(_Symbol,0,9,PRICE_OPEN);
   double rsi[30];
   CopyBuffer(handle,0,0,28,rsi);

Хэндл нужно инициализировать в OnInit, а не каждый раз при создании советника. А ещё массив на 30 элементов а копируются всего 28. Т.е. к индексам 28 и 29 обращаться нельзя (никто и не обращается, но мало-ли захочется), они не заполнены.

 
Dr. Trader:


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

Я бы это изменил - 

1) double a3 = regr[0]; - нулевой индекс это самые старые по времени данные. Самый последний (новый) бар тут будет 49 (так как взято 50), лучше его. Но последний может быть перерисовывается, тогда лучше 48. Нужно ещё проверить перерисовывается ли индикатор.
Тоже самое и с rsi, ты убрал из трёх ту что была новее. Есть смысл попробовать убрать ту что была с нулевым индексом, как самую устаревшую.

2) в третьей версии советника от Юрия функция RNN содержит четыре параметра, можно с ней взять сразу и 3 рси и тренд. Вообще функцию можно дополнять новыми параметрами, как в статье Юрия написано, но каждый +1 параметр удвоит число коэффициентов.

3) не люблю стопы и тейки, их оптимальные значения постоянно меняются на новых барах. Точнее даже нету оптимальных значений, есть просто некие "удобные" для советника значения на конкретно взятом временном интервале. Плюс брокеры могут свечки рисовать до стопов. Я бы попробовал на каждом новом баре делать прогноз и просто держать сделку в этом направлении до следующего бара и прогноза, а там переворачиваться если надо.

4)

Хэндл нужно инициализировать в OnInit, а не каждый раз при создании советника. А ещё массив на 30 элементов а копируются всего 28. Т.е. к индексам 28 и 29 обращаться нельзя (никто и не обращается, но мало-ли захочется), они не заполнены.


Хмм, да? я думал нулевой при копи буфер возвращает самое первое значение. надо проверить... 

https://www.mql5.com/ru/docs/series/copybuffer

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

насчет хэндла да, для регрессии я вынес в инит, для рси просто забыл сделать

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

А RNN3 почему-то намного меньше сигналов дает, не разбирался еще почему так

Еще не совсем понятно, лучше-ли для функции нормировки брать сразу массив в 5000 баров а не в 50, что бы она с самого начала нашла более правильные макс и мин, а не обновляла их с течением времени, потому что получится, что в начале участка тестирования будут подаваться не совсем корректно нормированные значения на вход, а потом все точнее и точнее

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

И еще хочу сравнить позже эту RNN с обычным MLP, но там получится не совсем корректное сравнение, потому что млп придется на выход что-то подавать. Еще как вариант, сделать комитет из 3 RNN и подать их результаты в RNN :D, ну или в какую-нибудь сверточную НС. Оптимизироваться даже через клауд будет оч. долго. А лучше подать 3 RNN в MLP а ему на выход дать приращение цен, тем самым мы избавимся от переобучения, в теории. Т.Е. RNN будет играть роль автоэнкодера http://cyberleninka.ru/article/n/avtoenkoder-podhod-k-ponizheniyu-razmernosti-vektornogo-prostranstva-s-kontroliruemoy-poterey-informatsii


 
Maxim Dmitrievsky:




Найти котировки, к которым можно было бы применить ARIMA дело практически невозможное. Но на этом лекция кончилась.

А GARCH? Штука гораздо перспективнее и очень широко применяемая именно на ТФ менее суток, даже для высоко частотной торговли.

 
СанСаныч Фоменко:


Найти котировки, к которым можно было бы применить ARIMA дело практически невозможное. Но на этом лекция кончилась.

А GARCH? Штука гораздо перспективнее и очень широко применяемая именно на ТФ менее суток, даже для высоко частотной торговли.


ну а как насчет вычитания трендов и затем применения к ним авторегрессии, и потом запихивания в НС значений, вместе с учетом наклона регрессии? я блин только начал ознакамливаться с этими весчами, еще даже не эксперементировал. И про гарч только слышал :)

И как вам мысль использовать RNN типа как автоэнкодер для MLP?

Насколько я понял, рекуррентная сеть это и есть автоэнкодер, по типу такого, с набором логических правил:


 
Maxim Dmitrievsky:

ну а как насчет вычитания трендов и затем применения к ним авторегрессии, и потом запихивания в НС значений, вместе с учетом наклона регрессии? я блин только начал ознакамливаться с этими весчами, еще даже не эксперементировал

лучше сразу экспериментируй!

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

 
СанСаныч Фоменко:


Найти котировки, к которым можно было бы применить ARIMA дело практически невозможное. Но на этом лекция кончилась.

А GARCH? Штука гораздо перспективнее и очень широко применяемая именно на ТФ менее суток, даже для высоко частотной торговли.

Тоже посмотрел. Имхо, это не наша предметная область.
Причина обращения: