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

 
Alexey Burnakov:

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

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

А чтобы этого избежать придется проредить наблюдения так, чтобы лаг максимального заглядываете в прошлое был меньше или равен шагк прореживания наблюдений. А это приведет к чему? К стократным сокращениям размера выборки для обучения. 

Здесь нужен компромисс. Глубина заглядывания против количества примеров в выборке.

Согласен что проблема, несколько недель уже седею над ней...

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

И про прорежевание поясните пож. тоже что то не вловил сути.. 

 
mytarmailS:

Согласен что проблема, несколько недель уже седею над ней...

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

И про прорежевание поясните пож. тоже что то не вловил сути.. 

Ок. На вашем же примере.

Для двух соседних баров во времени ты нарисуншь почти на 100% одинаковые гистограммы прошлых цен. То есть, два обучающих примера будут очень похожи только потому что они рядом во времени. Это противоречит основному свойству статистических процессов, где наблюдения независимы. Машина не будет учить хронологически инвартантные паттерны, а выучит повторяющиеся (почти одни и те же). Представь, что ты в опросе общественного мнения опросил Васю 200 раз и пытаешься распространить найденное знание на 1000 разных людей.
 
Alexey Burnakov:
Ок. На вашем же примере.

Для двух соседних баров во времени ты нарисуншь почти на 100% одинаковые гистограммы прошлых цен. То есть, два обучающих примера будут очень похожи только потому что они рядом во времени. Это противоречит основному свойству статистических процессов, где наблюдения независимы. Машина не будет учить хронологически инвартантные паттерны, а выучит повторяющиеся (почти одни и те же). Представь, что ты в опросе общественного мнения опросил Васю 200 раз и пытаешься распространить найденное знание на 1000 разных людей.

Оо!! другое дело, теперь все предельно понятно стало :)

 

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

2) Можно  максимально увеличить  breaks  , это тоже уберет немного сглаживание

 

PRICE <- cumsum(rnorm(300))+1000
layout(1:2)
plot(PRICE,t="l",ylab = "цена" , xlab = "индексы",lwd=2)
Max <- max(PRICE)
Min <- min(PRICE)
range.vector <- seq(Min, Max, length.out=200)
H <- hist(PRICE, breaks = range.vector)
          

          

 
mytarmailS:

Оо!! другое дело, теперь все предельно понятно стало :)

 

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

2) Можно  максимально увеличить  breaks  , это тоже уберет немного сглаживание

 

          

Я делаю так. Псевдокод:

Example1 = p[0]
step = 720
random = [0;50]
Example 2 = p[step+random]

where max lag to past = 720

То есть нарезаю так, чтобы наблюдения гарантированно не шли вперехлест.

Такой же принцип нужен для избегания зависимости целевки по заглядывания в будущее.
 

Первое, что нужно определить: какой горизонт прогноза Вам нужен. От этого будет зависить глубина истории, которую нужно исследовать.

Посмотрите на графики тренда с глубиной истории в 3000, 1000, 300 и 150 баров (AUDUSD/H1). 

> library("PolyTrend", lib.loc="K:/RRO/R-3.3.1/library")
> trend3000 <- PolyTrend(price[ ,4], alpha = 0.05)
> require(magrittr)
Loading required package: magrittr
> trend1000 <- PolyTrend(price[ ,4] %>% tail(., 1000), alpha = 0.05)
> trend300 <- PolyTrend(price[ ,4] %>% tail(., 300), alpha = 0.05)
> trend150 <- PolyTrend(price[ ,4] %>% tail(., 150), alpha = 0.05)
> plot(trend3000, t="l")
> plot(trend1000, t="l")
> plot(trend300, t="l")
> plot(trend150, t="l")

 


Картинки вставил в обратном порядке.

Причем для 3000 баров направление "Вверх"

Trend type: 3 (cubic)
Slope: 0.0000
Direction: 1 (positive)
Significance: 1 (statistically significant)
Polynomial degree: 3 (cubic)

Для коротких

# trend1000
PolyTrend classification:

Trend type: 2 (quadratic)
Slope: -0.0000
Direction: -1 (negative)
Significance: 1 (statistically significant)
Polynomial degree: 2 (quadratic)
# trend300
PolyTrend classification:

Trend type: 2 (quadratic)
Slope: 0.0000
Direction: 1 (positive)
Significance: 1 (statistically significant)
Polynomial degree: 2 (quadratic)
#trend150
PolyTrend classification:

Trend type: 3 (cubic)
Slope: -0.0000
Direction: -1 (negative)
Significance: 1 (statistically significant)
Polynomial degree: 3 (cubic)

Если меня интересует горизонт прогноза в 24 бара (один день) мне незачем смотреть на 3000 баров назад. Вполне достаточно 300 баров.

Удачи 






 

Мне представляется сомнительной идея предсказания на 24 шага вперед.

И в классификации и в регрессии всегда надо предсказывать ровно на ОДИН шаг вперед, но, например, по Н1, Н4 и D1. При торговле по Н1 мы получим для Н1 предсказания на 4 и 24 шага вперед.

В идеале ТФ необходимо делать искусственно из базового котира. В моем примере, загружаем Н1, а остальные не берем из терминала, а делаем сами.  При таком подходе получим не D1, привязанного к 00:00, а строго 24 часа вперед от текущего часа

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

Мне представляется сомнительной идея предсказания на 24 шага вперед.

И в классификации и в регрессии всегда надо предсказывать ровно на ОДИН шаг вперед, но, например, по Н1, Н4 и D1. При торговле по Н1 мы получим для Н1 предсказания на 4 и 24 шага вперед.

В идеале ТФ необходимо делать искусственно из базового котира. В моем примере, загружаем Н1, а остальные не берем из терминала, а делаем сами.  При таком подходе получим не D1, привязанного к 00:00, а строго 24 часа вперед от текущего часа

Зависит прогноз чего мы делаем. Например прогноз тренда на 24 часа вполне устраивает( кривая очень гладкая). Т.е. когда нужно видеть ФОРМУ кривой без особых требований к точности. 

Иначе Ваш пример  абсолютно верен (как принцип). И вариант скользящего окна (24 часа) тоже очень рабочий. Многое зависит от деталей.

Удачи  

 

Вопросик.. 

Я делал распределение по цене, те обычный вектор, и получался типа профиль рынка, а можно ли построить настоящий профиль объема те связать цену с объемом в распределении?

 
mytarmailS:

Вопросик.. 

Я делал распределение по цене, те обычный вектор, и получался типа профиль рынка, а можно ли построить настоящий профиль объема те связать цену с объемом в распределении?

Есть индикаторы которые берут цену и объём и строят некий общий график. И для него уже можно считать распределение. Например Chaikin Oscillator, или ещё несколько в папке Indicator/Volumes. Но на форексе будут тиковые объёмы а не реальные, они хоть и коррелируют но это всё равно плохо, лучше смотреть настоящие объёмы на бирже.

 
Dr.Trader:

Есть индикаторы которые берут цену и объём и строят некий общий график. И для него уже можно считать распределение. Например Chaikin Oscillator, или ещё несколько в папке Indicator/Volumes. Но на форексе будут тиковые объёмы а не реальные, они хоть и коррелируют но это всё равно плохо, лучше смотреть настоящие объёмы на бирже.

Я не торгую форекс, я даже не знаком с метатрейдер :)

Я хотел бы поексперементировать с профилем в разных его видах именно в Р-ке, просто не понятно как строить распределение по двум векторам

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

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