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

 
Maxim Dmitrievsky #:

у буста новая фишка появилась, можно дропать плохие признаки. Еще не успел заюзать

https://catboost.ai/en/docs/concepts/python-reference_catboost_select_features

сомниваюсь что это что то даст

 
mytarmailS #:

сомниваюсь что это что то даст

В комплексе с другими методами может что-то и даст 
 
Maxim Dmitrievsky #:
В комплексе с другими методами может что-то и даст 
Ну как? 
 
mytarmailS #:
Ну как? 
Не делал ещё. У меня сложная логика, надо понять куда встроить 
 

такие признаки получил. Коррелируют, потому что база - приращения близких порядков


пример формулы: price - МА(n) * std(n) * coef, где MA и std - скользящее среднее и стандартное отклонение произвольного порядка и выравнивающий коэффициент, чем больше - тем стационарнее ряд. В данном случае он равен 50000

почему-то мое МО показывает стабильность лучше, чем просто на приращениях

c coef 20

получилось чем-то похоже на fractional difference, но считает мгновенно

может кто-то придумает другие варианты

 
Maxim Dmitrievsky #:

такие признаки получил. Коррелируют, потому что база - приращения близких порядков

А что это за кривульки вообще?

Maxim Dmitrievsky #:

может кто-то придумает другие варианты

Ну вот, символьная регресия в помощь

 
mytarmailS #:

А что это за кривульки вообще?

Ну вот, символьная регресия в помощь

Формула написана
Предложи вариант как приблизить котировки к стационарному ряду при помощи ср
 
Maxim Dmitrievsky #:
Формула написана
Предложи вариант как приблизить котировки к стационарному ряду при помощи ср

щас что то накидаю, покажу на более простом примере без СР

 
mytarmailS #:

щас что то накидаю, покажу на более простом примере без СР

Здесь одним вариантом не обойтись, нужно конструировать признаки и проверять, обучаться на них 

Но признаки не тупые, а хоть как-то осмысленные, иначе перебирать можно вечно
 
Maxim Dmitrievsky #:

С СР нужно больше времени на код и планирование поетому для простоты ,  быстроты и наглядности сделал проще..

Вместо того чтобы создавать  формулу врчную я создаю "результат формулы"  - кривульку , а потом использую ее так таргет для модели


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

Тоесть получаем ряд который должел коррелировать с ценой но "зажат" в рамках стацыонарных значений. Если надо именно настоящую стацыонарность по Дики фуллеру итп, то просто меняем фитнес функцыю на то что надо



создаем данные и тренируем модель генетикой

par(mar=c(2,2,2,2))
# для простоты Создаю цену 
P <- cumsum(rnorm(300))
plot(P,t="l")

hankel <- function(x,n) embed(x, n)[ ,n:1]
# Создаю данные для обучения Х ,скользящее окно виде матрицы
X <- t(apply(hankel(P,11),1,function(x) cumsum(diff(x))))
P <- tail(P,nrow(X))

# Делаю разметку индексов для трейн и тест и валидации
tr <- 1:100
ts <- 1:200
al <- 1:nrow(X)

library(randomForest)
# Создаю фитнес сункцию , подбираем генетикой для фореста такой таргет чтобы 
# на выходе был максимально коррелированый с ценой ряд
fit <- function(Y){
set.seed(123)
rf <- predict(  randomForest(Y~.,X[tr,],ntree=100) ,   X[ts,])
return( cor(rf, P[ts]) )}

library(GA)
GA <- ga(type = "real-valued", 
         fitness =  fit,
         lower = rep(-1,100), 
         upper = rep(1,100), 
         popSize = 100,
         maxiter = 100,
         run = 40)
plot(GA)
GA_Y <- tail(GA@solution,1)[1,]

проверяем модель

# Получаем нашу модель которая делает то что нужно
set.seed(123)
rf <- predict(  randomForest(GA_Y~.,X[tr,],ntree=100) ,   X[al,])

layout(1:2)
plot(P,t="l",main="original price") ; abline(v=c(100,200),lty=2,col=c(3,4))
plot(rf,t="l",main="model out") ; abline(v=c(100,200),lty=2,col=c(3,4))
abline(h=0,col=3,lty=3)

layout(1:2)
plot(P,t="l",main="original price") ; abline(v=c(100,200),lty=2,col=c(3,4))
plot(cumsum(rf),t="l",main="model out cumsum") ; abline(v=c(100,200),lty=2,col=c(3,4))

Вертикальные линии это разделение трейн , тест , валидация


Как видим на картинке модель научилась на вход брать цену, а на выходе стацыонарный ряд который коррелирует с ценой

Для лучшей наглядности можно сделать кумулятивную сумму из выхода модели


как то так ))) И не надо ничего выдумывать, все можно делать на автомате

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