такие признаки получил. Коррелируют, потому что база - приращения близких порядков
пример формулы: price - МА(n) * std(n) * coef, где MA и std - скользящее среднее и стандартное отклонение произвольного порядка и выравнивающий коэффициент, чем больше - тем стационарнее ряд. В данном случае он равен 50000
почему-то мое МО показывает стабильность лучше, чем просто на приращениях
c coef 20
получилось чем-то похоже на fractional difference, но считает мгновенно
С СР нужно больше времени на код и планирование поетому для простоты , быстроты и наглядности сделал проще..
Вместо того чтобы создавать формулу врчную я создаю "результат формулы" - кривульку , а потом использую ее так таргет для модели
Я создаю фитнес функцию которая максимизирует корреляцию между ценой и выходом модели, но у выхода модели есть ограничение : она может быть только в рамках от -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))
Вертикальные линии это разделение трейн , тест , валидация
Как видим на картинке модель научилась на вход брать цену, а на выходе стацыонарный ряд который коррелирует с ценой
Для лучшей наглядности можно сделать кумулятивную сумму из выхода модели
как то так ))) И не надо ничего выдумывать, все можно делать на автомате
С СР нужно больше времени на код и планирование поетому для простоты , быстроты и наглядности сделал проще..
Вместо того чтобы создавать формулу врчную я создаю "результат формулы" - кривульку , а потом использую ее так таргет для модели
Я создаю фитнес функцию которая максимизирует корреляцию между ценой и выходом модели, но у выхода модели есть ограничение : она может быть только в рамках от -1 до 1.
Тоесть получаем ряд который должел коррелировать с ценой но "зажат" в рамках стацыонарных значений. Если надо именно настоящую стацыонарность по Дики фуллеру итп, то просто меняем фитнес функцыю на то что надо
создаем данные и тренируем модель генетикой
проверяем модель
Вертикальные линии это разделение трейн , тест , валидация
Как видим на картинке модель научилась на вход брать цену, а на выходе стацыонарный ряд который коррелирует с ценой
Для лучшей наглядности можно сделать кумулятивную сумму из выхода модели
как то так ))) И не надо ничего выдумывать, все можно делать на автомате
Любопытно, постараюсь осмыслить попозже, сегодня у нас кровавая мэри, сложно думать
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
В комплексе с другими методами может что-то и даст
Ну как?
такие признаки получил. Коррелируют, потому что база - приращения близких порядков
пример формулы: price - МА(n) * std(n) * coef, где MA и std - скользящее среднее и стандартное отклонение произвольного порядка и выравнивающий коэффициент, чем больше - тем стационарнее ряд. В данном случае он равен 50000
почему-то мое МО показывает стабильность лучше, чем просто на приращениях
c coef 20
получилось чем-то похоже на fractional difference, но считает мгновенно
может кто-то придумает другие варианты
такие признаки получил. Коррелируют, потому что база - приращения близких порядков
А что это за кривульки вообще?
Maxim Dmitrievsky #:
может кто-то придумает другие варианты
Ну вот, символьная регресия в помощь
А что это за кривульки вообще?
Ну вот, символьная регресия в помощь
Формула написана
щас что то накидаю, покажу на более простом примере без СР
щас что то накидаю, покажу на более простом примере без СР
С СР нужно больше времени на код и планирование поетому для простоты , быстроты и наглядности сделал проще..
Вместо того чтобы создавать формулу врчную я создаю "результат формулы" - кривульку , а потом использую ее так таргет для модели
Я создаю фитнес функцию которая максимизирует корреляцию между ценой и выходом модели, но у выхода модели есть ограничение : она может быть только в рамках от -1 до 1.
Тоесть получаем ряд который должел коррелировать с ценой но "зажат" в рамках стацыонарных значений. Если надо именно настоящую стацыонарность по Дики фуллеру итп, то просто меняем фитнес функцыю на то что надо
создаем данные и тренируем модель генетикой
проверяем модель
Вертикальные линии это разделение трейн , тест , валидация
Как видим на картинке модель научилась на вход брать цену, а на выходе стацыонарный ряд который коррелирует с ценой
Для лучшей наглядности можно сделать кумулятивную сумму из выхода модели
как то так ))) И не надо ничего выдумывать, все можно делать на автомате
С СР нужно больше времени на код и планирование поетому для простоты , быстроты и наглядности сделал проще..
Вместо того чтобы создавать формулу врчную я создаю "результат формулы" - кривульку , а потом использую ее так таргет для модели
Я создаю фитнес функцию которая максимизирует корреляцию между ценой и выходом модели, но у выхода модели есть ограничение : она может быть только в рамках от -1 до 1.
Тоесть получаем ряд который должел коррелировать с ценой но "зажат" в рамках стацыонарных значений. Если надо именно настоящую стацыонарность по Дики фуллеру итп, то просто меняем фитнес функцыю на то что надо
создаем данные и тренируем модель генетикой
проверяем модель
Вертикальные линии это разделение трейн , тест , валидация
Как видим на картинке модель научилась на вход брать цену, а на выходе стацыонарный ряд который коррелирует с ценой
Для лучшей наглядности можно сделать кумулятивную сумму из выхода модели
как то так ))) И не надо ничего выдумывать, все можно делать на автомате
Любопытно, постараюсь осмыслить попозже, сегодня у нас кровавая мэри, сложно думать
интересно сколько строк это займет на питоне...
на мкл наверное тысячи)))