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

 
Vizard_:
Не спеши. Независимо от метода кластеризации. Сделай один проход. Обреж несколько наблюдений. Повтори. Сравни полученые

результаты. Выработай методу дальших действий. А то накуяришь"граалей", а потом будешь удивляться почему не работает)))


я думал делать полный перебор, те если изначально было 500 то в конце может получиться так что хорошая модель будет учитывать только 5

и только их я и оставлю ..

 
Dr.Trader:

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

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

Но к тому подходу что я объяснил он не имеет никакого отношения...

Подход позволяет через кластеризацыю  вытянуть те несколько процентов полезных данных которые не могут вытянуть обычные МО

вы можете спокойно взять свои предикторы в том виде в котором вы подаете в свою сеть, кластеризировать их (каждый) и пропустить через алгоритм что я описал

 
Dr.Trader:

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

 

Ну тут еще зависит на сколько сильно вы хотите обучить модель , если обучить слабо, не делать много кластеров, то фигуры в голове у модели будут довольно сглажены и тот недостаток что вы говорите теоретически должен пропасть...

Вот как модель видит  ряды цен из 50 значений, которые упакованы в 49 кластеров

й 

код..

price <- cumsum(rnorm(30000))+1000
plot(price,t="l")

# делаем скользящее окно (50 знач) через матрицу хенкеля
hankel <- function(data, r=50) {
  do.call(cbind,
          lapply(0:(r-1),function(i) { data[(i+1):(length(data)-(r-1-i))]}))}
price <- hankel(price)

# скалирую, центрирую, в общем нормализирую каждую строчку в матрице
price <- t(apply(price,1,function(x){scale(x,center = T,scale = T)}))

# запускаем пакет с кластеризацыей, в дан. случ с кохоненом
# хорошый мануал  
#https://cran.r-project.org/web/packages/SOMbrero/vignettes/doc-numericSOM.html
install.packages("SOMbrero")
library(SOMbrero)

# тренируем модель, с матрицей 7х7 те 49 кластеров
model <- trainSOM(price, dimension=c(7,7), verbose=T)
plot(model,what="prototypes",type="lines",print.title=T)


 

 
mytarmailS:

 

Ну тут еще зависит на сколько сильно вы хотите обучить модель , если обучить слабо, не делать много кластеров, то фигуры в голове у модели будут довольно сглажены и тот недостаток что вы говорите теоретически должен пропасть...

Вот как модель видит  ряды цен из 50 значений, которые упакованы в 49 кластеров

 

код..

price <- cumsum(rnorm(30000))+1000
plot(price,t="l")

# делаем скользящее окно (50 знач) через матрицу хенкеля
hankel <- function(data, r=50) {
  do.call(cbind,
          lapply(0:(r-1),function(i) { data[(i+1):(length(data)-(r-1-i))]}))}
price <- hankel(price)

# скалирую, центрирую, в общем нормализирую каждую строчку в матрице
price <- t(apply(price,1,function(x){scale(x,center = T,scale = T)}))

# запускаем пакет с кластеризацыей, в дан. случ с кохоненом
# хорошый мануал  
#https://cran.r-project.org/web/packages/SOMbrero/vignettes/doc-numericSOM.html
install.packages("SOMbrero")
library(SOMbrero)

# тренируем модель, с матрицей 7х7 те 49 кластеров
model <- trainSOM(price, dimension=c(7,7), verbose=T)
plot(model,what="prototypes",type="lines",print.title=T)


 

Во. Я также давно делал. Кохонен интересная штука. Но помните, что называеть его алгоритмом кластеризации не верно. Это алгоритм свертки. А кластеризацию потом делают на полученном двумерном пространстве...
 
Alexey Burnakov:
Во. Я также давно делал. Кохонен интересная штука. Но помните, что называеть его алгоритмом кластеризации не верно. Это алгоритм свертки. А кластеризацию потом делают на полученном двумерном пространстве...

спасибо ! не знал.

но использовать выход из model как кластера можно же? или нет?

head(model$clustering , 100)
  [1]  7  7  7  7  7  7  7  7  6  6  6  5  5  4  4  3  3  2  2  1  1  1  1  1  8 15 15 22 22 29 36
[32] 43 43 43 43 43 43 43 44 44 45 45 45 46 46 46 46 47 47 47 47 48 48 48 49 42 35 35 28 28 21 21
[63] 21 21 21 21 21 21 21 21 21 14 14 14  7  7  7  7  7  7  7  6  5  4  3  3  2  1  1  1  1  1  1
[94]  8  8 15 22 22 29 36
 
mytarmailS:

спасибо ! не знал.

но использовать выход из model как кластера можно же? или нет?

head(model$clustering , 100)
  [1]  7  7  7  7  7  7  7  7  6  6  6  5  5  4  4  3  3  2  2  1  1  1  1  1  8 15 15 22 22 29 36
[32] 43 43 43 43 43 43 43 44 44 45 45 45 46 46 46 46 47 47 47 47 48 48 48 49 42 35 35 28 28 21 21
[63] 21 21 21 21 21 21 21 21 21 14 14 14  7  7  7  7  7  7  7  6  5  4  3  3  2  1  1  1  1  1  1
[94]  8  8 15 22 22 29 36

Да конечно можно... Там по сути же аггрегация похожих векторов в этих ячейках.

 

Просто дело может быть таким (я сам на работе делал и знаю, что говорю). У меня n миллионов записей. Вектор входов длиной пару сотен. Я хочу его кластеризовать, но заранее не знаю сколько там кластеров. Такой массив данных не всякий алгоритм сможет обработать на обычном компе. Поэтому, я сначала свертываю пространство входов и делаю сетку, например, 50*50. Получается 2500 типичных представителей популяции... На таком массиве мой компьютер тянет agnes (иерархичекую кластеризацию). Там строится матрица близостей всех ко всем...

 

И получается, что я эти 2500 кластеризую, скажем на 10 кластеров и метрика аггрегации получается хорошая. 

 
Alexey Burnakov:

Да конечно можно... Там по сути же аггрегация похожих векторов в этих ячейках.

 Просто дело может быть таким (я сам на работе делал и знаю, что говорю). У меня n миллионов записей. Вектор входов длиной пару сотен. Я хочу его кластеризовать, но заранее не знаю сколько там кластеров. Такой массив данных не всякий алгоритм сможет обработать на обычном компе. Поэтому, я сначала свертываю пространство входов и делаю сетку, например, 50*50. Получается 2500 типичных представителей популяции... На таком массиве мой компьютер тянет agnes (иерархичекую кластеризацию). Там строится матрица близостей всех ко всем...

 И получается, что я эти 2500 кластеризую, скажем на 10 кластеров и метрика аггрегации получается хорошая. 

 в мануале https://cran.r-project.org/web/packages/SOMbrero/vignettes/doc-numericSOM.html

в разделе 

Building super classes from the resulting SOM

 как раз то о чем вы говорите

 

Для тех кто хочет знать что такое рынок на самом деле..

смотреть от старых видео к новым....

https://www.youtube.com/channel/UCsdK6s9i_I0NEMvis6wXhnQ/featured 

  вроди не сложно, а запрограмировать  ?  для меня пока точно не возможно...

 

предлагаю пообсуждать как можно кодировать такие подходы для МО или просто закодировать 

 

Для информации по языку R и новому MetaTrader 5 build 1467:

  • Вышла обновленная версия статистических библиотек, аналогичных R:

    Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее

  • Расчеты в MQL5 от 3 до 7 раз быстрее, чем в R (даже с учетом того, что там фунции реализованы на C++)
  • У некоторых функций R есть ошибки из-за старых методов оптимизаций/упрощений, что дает ошибочные результаты
  • Добавлена бета-версия графических библиотек, аналогичных R, что дает возможность визуализировать данные как в R.
  • Добавлена удобная функция ArrayPrint, которая распечатывает как обычные массивы, так и структуры аналогично R


Обновиться до 1467 можно с сервера MetaQuotes-Demo.

В ближайших версиях будет добавлена масса новых математических и статистических функций, аналогичных R. Это позволит больше расчетов и визуализаций вести прямо в MetaTrader 5.
 
просто интересно - а вы тут в качестве предикторов берете только значения цен и разных индикаторов от цен? а объемы реальные и индикаторы от объемов кто-нибудь использует?
Причина обращения: