Обсуждение статьи "Глубокая нейросеть со Stacked RBM. Самообучение, самоконтроль" - страница 9

 
Ilya Kosarev:
Если кто пробовал применять мой опыт, прошу дать обратную связь. Для меня это важно. Спасибо. 

такое количество экспериментов вызывает уважение. Но Вы скажите, вы хотите получить вечный двигатель? Зачем полировать эксперт 5-летними бэктестами?? Переучивайте при снижении качества предикта хоть каждую неделю. Зависит от таймфрейма на котором работаете. 

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

Отдельно хочу подчеркнуть - оптимизиция гиперпараметров модели также дает улучшении модели.

Вы какие предикторы применяете?

Удачи

 
Vladimir Perervenko:

такое количество экспериментов вызывает уважение. Но Вы скажите, вы хотите получить вечный двигатель? Зачем полировать эксперт 5-летними бэктестами?? Переучивайте при снижении качества предикта хоть каждую неделю. Зависит от таймфрейма на котором работаете. 

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

Отдельно хочу подчеркнуть - оптимизиция гиперпараметров модели также дает улучшении модели.

Вы какие предикторы применяете?

Удачи

Но Вы скажите, вы хотите получить вечный двигатель?

-нет, только способность выживания на быстро изменяющемся рынке.

Зачем полировать эксперт 5-летними бэктестами?

-Вы не поняли и я не пояснил. Я использую примерно от одного до 3 месяцев в днях историю в пересчете на бары для ТФ. Делаю длинный забег в пределах до 10 лет в истории до сегодня, контроль параметров качества и регулярное перестроение модели.

Переучивайте при снижении качества предикта хоть каждую неделю

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

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

-это работает, согласен

Отдельно хочу подчеркнуть - оптимизиция гиперпараметров модели также дает улучшении модели.

-дает, но мой опыт пока не может это подтвердить на длинной истории тестирования. Если грубо, то смотря, как попадет. То недообучение, то переобучение, то не попал никуда.

Вы какие предикторы применяете?

-Если вы спрашиваете про индикаторы, то для описанных примеров выше никакие, только параметры движения цены, ее числовые характеристики.

 

Ilya Kosarev:

Но Вы скажите, вы хотите получить вечный двигатель?

-нет, только способность выживания на быстро изменяющемся рынке.

Зачем полировать эксперт 5-летними бэктестами?

-Вы не поняли и я не пояснил. Я использую примерно от одного до 3 месяцев в днях историю в пересчете на бары для ТФ. Делаю длинный забег в пределах до 10 лет в истории до сегодня, контроль параметров качества и регулярное перестроение модели.

Переучивайте при снижении качества предикта хоть каждую неделю

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

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

-это работает, согласен

Отдельно хочу подчеркнуть - оптимизиция гиперпараметров модели также дает улучшении модели.

-дает, но мой опыт пока не может это подтвердить на длинной истории тестирования. Если грубо, то смотря, как попадет. То недообучение, то переобучение, то не попал никуда.

Вы какие предикторы применяете?

-Если вы спрашиваете про индикаторы, то для описанных примеров выше никакие, только параметры движения цены, ее числовые характеристики.

Здравствуйте, некоторое время назад заинтересовался данной тематикой. Сам много чего перепробовал.

У вас впечатляющие результаты, но не могли бы вы поделится тем, что вы имели ввиду под "параметрами движения цены" ? От объемов отказались?

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

Для метки всё тот же простой зигзаг используете?

Какая у вас точность предсказания?

Спасибо.

 
kostay_Scr:

@Ilya Kosarev

Здравствуйте, некоторое время назад заинтересовался данной тематикой. Сам много чего перепробовал.

У вас впечатляющие результаты, но не могли бы вы поделится тем, что вы имели ввиду под "параметрами движения цены" ? От объемов отказались?

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

Для метки всё тот же простой зигзаг используете?

Какая у вас точность предсказания?

Спасибо.

Добрый день. 

Не помню в каком контексте я использовал это выражение:"параметрами движения цены".

Объемы не использовал никогда. Хотя мысль такая есть. Руки не доходят.

Входы и выходы определяются сигналами выдаваемыми ансамблем предварительно обученных  нейросетей. Три состояния: Buy/Sell/Nothing/ 

Стопы чисто предохранитель. Закрытие позиций всегда по сигналам нейросетей.

Целевая - зигзаг.

Лучшее качество полученное мной при использовании ансамбля - F1 = ~0.84. Это не лучший показатель для оценки ТС. Нужно использовать среднее вознаграждение на бар за определенный период времени.  

Удачи

 
Vladimir Perervenko:

Добрый день. 

Не помню в каком контексте я использовал это выражение:"параметрами движения цены".

Объемы не использовал никогда. Хотя мысль такая есть. Руки не доходят.

Входы и выходы определяются сигналами выдаваемыми ансамблем предварительно обученных  нейросетей. Три состояния: Buy/Sell/Nothing/ 

Стопы чисто предохранитель. Закрытие позиций всегда по сигналам нейросетей.

Целевая - зигзаг.

Лучшее качество полученное мной при использовании ансамбля - F1 = ~0.84. Это не лучший показатель для оценки ТС. Нужно использовать среднее вознаграждение на бар за определенный период времени.  

Удачи

Спасибо за ответ.

Вы не помните, потому что вопрос был для Ilya Kosarev, это он упоминал. Но он пока не ответил.

Вот ещё какая мысль пришла в голову, вы упоминаете, что на большой длине истории тренировать мало толку, почему пришли к такому выводу, и как определяли оптимальную длину истории?

Ilya Kosarev
Ilya Kosarev
  • www.mql5.com
Профиль трейдера
 
kostay_Scr:

Спасибо за ответ.

Вы не помните, потому что вопрос был для Ilya Kosarev, это он упоминал. Но он пока не ответил.

Вот ещё какая мысль пришла в голову, вы упоминаете, что на большой длине истории тренировать мало толку, почему пришли к такому выводу, и как определяли оптимальную длину истории?

По длине истории для обучения. Все зависит от рабочего таймфрейма. У меня это 5-30 минут. Использую разделение на три поднабора (pretrain/train/test). На первом вычисляю все параметры препроцессинга, выбросы, нормализация, шумовые примеры и другие. На втором применяя эти параметры подготавливаю входные данные и обучаю модель(ли). На последнем проверка. Для М15 - длины 2000/1000/500. Это приблизительно в неделях 4/2/1. Сейчас я так и разделяю данные, строго с привязкой к datatime. 

Переобучаю в начале каждой недели(автоматом делает эксперт). Если среднее вознаграждение на бар за последние 2-3 дня меньше минимального, переобучаю немедленно.

Удачи

 
Vladimir Perervenko:

такое количество экспериментов вызывает уважение. Но Вы скажите, вы хотите получить вечный двигатель? Зачем полировать эксперт 5-летними бэктестами?? Переучивайте при снижении качества предикта хоть каждую неделю. Зависит от таймфрейма на котором работаете. 

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

Отдельно хочу подчеркнуть - оптимизиция гиперпараметров модели также дает улучшении модели.

Вы какие предикторы применяете?

Удачи

-Не помню в каком контексте я использовал это выражение:"параметрами движения цены".

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

-От объемов отказались?
Тиковые объемы не дают понимания, что происходит.
Объемы кластердельты хорошо пруфят, но не идеальны. На данный момент не использую, но переодически чекаю, сверяю результаты.

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

-Для метки всё тот же простой зигзаг используете?
Чаще всего, да. 

-Какая у вас точность предсказания?
Сложно сказать по параметру Acc.
Результат эксперта в виде pf на разных парах колеблится от 1.8 до 2.3
 
Vladimir Perervenko:

По длине истории для обучения. Все зависит от рабочего таймфрейма. У меня это 5-30 минут. Использую разделение на три поднабора (pretrain/train/test). На первом вычисляю все параметры препроцессинга, выбросы, нормализация, шумовые примеры и другие. На втором применяя эти параметры подготавливаю входные данные и обучаю модель(ли). На последнем проверка. Для М15 - длины 2000/1000/500. Это приблизительно в неделях 4/2/1. Сейчас я так и разделяю данные, строго с привязкой к datatime. 

Переобучаю в начале каждой недели(автоматом делает эксперт). Если среднее вознаграждение на бар за последние 2-3 дня меньше минимального, переобучаю немедленно.

Удачи

У вас в скриптах 2 ошибки, приводящие к сильно завышенным значениям К:

1. В разбивке данных prepareTrain метод stratified, что приводит к грубому заглядыванию в будущее. Нужно использовать order.

2. В дополнение к этому, ошибка в функции correct(корректировка по кривой баланса) - насколько я понял, текущее значение баланса корректируется по нему же, поэтому получается очень прямая кривая вверх и очень большое К.

Также хочу заметить что "базовая" точность по зигзагу около 70%, т.к. в этой метке большая часть информации это текущий тренд, а не будущее движение.

 
kostay_Scr:

У вас в скриптах 2 ошибки, приводящие к сильно завышенным значениям К:

1. В разбивке данных prepareTrain метод stratified, что приводит к грубому заглядыванию в будущее. Нужно использовать order.

2. В дополнение к этому, ошибка в функции correct(корректировка по кривой баланса) - насколько я понял, текущее значение баланса корректируется по нему же, поэтому получается очень прямая кривая вверх и очень большое К.

Также хочу заметить что "базовая" точность по зигзагу около 70%, т.к. в этой метке большая часть информации это текущий тренд, а не будущее движение.

1. Мы решаем задачу классификации не регрессии. Стратифицирование, балансировка и перемешивание очень даже показаны и делается только на train. Можно использовать и order, но не обязательно. Все зависит от модели которую Вы используете. В последних моих экспериментах я отказался от стратификации в пользу балансировки. Для регрессии это требование обязательно(наверное?). Я не занимаюсь регрессией, не буду спорить.

2. Так в чем ошибка? я не понял.

3. Про зигзаг вообще не понял о чем Вы. Поясните?

Давно это было, многое подзабыл. Освежу память и может чего добавлю.

Удачи

 
Vladimir Perervenko:

1. Мы решаем задачу классификации не регрессии. Стратифицирование, балансировка и перемешивание очень даже показаны и делается только на train. Можно использовать и order, но не обязательно. Все зависит от модели которую Вы используете. В последних моих экспериментах я отказался от стратификации в пользу балансировки. Для регрессии это требование обязательно(наверное?). Я не занимаюсь регрессией, не буду спорить.

2. Так в чем ошибка? я не понял.

3. Про зигзаг вообще не понял о чем Вы. Поясните?

Давно это было, многое подзабыл. Освежу память и может чего добавлю.

Удачи

Вот код(в эту функцию все дсотупные данные передаются):

prepareTrain <- function(x , y, 
                                                         rati, mod = "stratified", 
                                                         balance = F, 
                                                         norm, meth)
        {
          t <- rminer::holdout(y = y, ratio = rati,
                                                   mode = mod)
...

Разбивка на проверочный и тренировочные наборы - разбивается не по порядку времени, а всё в одну кучу - получается линейная интерполяция между точками, и очень большое значение К. Сеть заучивает примеры - соседние по времени значения из проверочного набора очень похожи, в среднем получается, например, ТТТТПТТТТП - где Т это тренировочый пример, а П проверочный. Известное дело, временные данные из-за высокой автокорреляции нужно разбивать по времени, также нельзя делать Cross Validation, по крайней мере со случайной выборкой примеров из всего набора, можно выбирать разные части, с сохранением временного порядка(например первые 20%, след. 10% для проверки, потом первые 30%, след. 10 для проверки и т.д.).

По функции correct:

correct <- function(sig){
          sig <- Hmisc::Lag(sig) %>% na.omit
          bal <- cumsum(sig * (price[ ,6] %>% tail(.,length(sig))))
          ma <- pracma::movavg(bal, 16, "t")
          roc <- TTR::momentum(ma, 3)%>% na.omit
          dbal <- (bal - ma) %>% tail(., length(roc))
          dbr <- (roc + dbal) %>% as.matrix()
          sig.cor <- sign(dbr)
          sig.cor <- Hmisc::Lag(sig.cor) %>% na.omit  #<-- fix, иначе по балансу на 1 бар в будущее(sig.cor) корректируется сигнал(sig), например сигнал на 9 баре, умножается на CO на 10 баре, потом этот баланс используется для корректировки этого же сигнала с 9 бара, однако баланс то с 10
          S <- sig.cor * tail(sig, length(sig.cor))
          bal <- cumsum(S * (price[ ,6]%>% tail(.,length(S))))
          K <- tail(bal, 1)/length(bal) * 10 ^ Dig
          Kmax <- max(bal)/which.max(bal) * 10 ^ Dig
          dd <- fTrading::maxDrawDown(bal)
          corr <<- list(sig.c = sig.cor, sig.res = S, bal = bal, Kmax = Kmax, K = K, dd = dd)
          return(corr)
        }

Про зиг заг - зиг заг во многом определяется уже известными данными т.е. текущим трендом, поэтому на нём точность сильно выше 50% при равном соотношении примеров разных классов. Например знак зиг зага перед самым пиком(сменой направления) - это просто индикатор прошедшего тренда.

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