Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 196

 
Vizard_:
Demora o tempo que quiseres. Independentemente do método de agrupamento. Faz um passe. Trim algumas observações. Fá-lo outra vez. Compare os resultados.

resultados. Desenvolva um método para novas ações. Caso contrário, você vai fazer "grails" e depois se perguntar por que não funciona))))


Estava a pensar em fazer um total de 500, se inicialmente fossem 500, então no final pode acontecer que um bom modelo só responda por 5

e isso é tudo o que vou manter...

 
Dr. Trader:

Se você procurar por padrões como mytarmailS, deslizando por barra, cada padrão conterá informações sobre quanto de um intervalo os valores em cada barra podem ser. Quanto mais padrões - o intervalo menor será atribuído a cada bar.....................

A janela deslizante de alimentação de dados é apenas o meu estilo de alimentação de dados e nada mais, bom ou mau, não sei, acho que é o mesmo que o de todos os outros...

Mas não tem nada a ver com a abordagem que eu expliquei...

Esta abordagem permite agrupar e extrair aqueles poucos por cento de dados úteis que os MOs convencionais não conseguem...

você pode pegar com segurança seus preditores enquanto os alimenta em sua rede, agrupá-los (cada um) e executá-los através do algoritmo que descrevi

 
Dr. Trader:

Grosso modo, para que uma determinada janela com novos dados caia em qualquer padrão encontrado anteriormente, ela deve cair em tais restrições verídicas inerentes a cada padrão.

Depende do quanto você quer ensinar o modelo, se você quer ensiná-lo fracamente e não fazer muitos clusters então os números na cabeça do modelo serão suavizados e esse defeito que você diz que teoricamente deveria desaparecer...

Eis como o modelo vê uma série de preços de 50 valores embalados em 49 clusters

й

...código...

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:

Bem, depende de quanto você quer treinar o modelo, se você treinar fraco, não faça muitos clusters, então as formas na cabeça do modelo serão bastante suavizadas e o inconveniente que você diz que teoricamente deveria desaparecer...

Eis como o modelo vê uma série de preços de 50 valores que são embalados em 49 clusters

...código...

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)


Vo. Eu fiz a mesma coisa há muito tempo. O Kohonen é interessante. Mas lembre-se, chamar-lhe um algoritmo de clustering é errado. É um algoritmo de convolução. E o agrupamento é então feito no espaço bidimensional resultante...
 
Alexey Burnakov:
Vo. Eu também o fiz há muito tempo. Kohonen é uma coisa interessante. Mas lembre-se que chamar-lhe um algoritmo de clustering não é correcto. É um algoritmo de convolução. E o agrupamento é então feito no espaço bidimensional resultante...

Obrigado! Eu não sabia disso.

Mas é possível usar a saída do modelo como um cluster, não é?

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:

Obrigado! Eu não sabia disso.

Mas você pode usar a saída de um modelo como um cluster, não pode?

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

Sim, claro que pode... É essencialmente uma agregação de vectores semelhantes nestas células.

Pode ser que seja assim (eu próprio já o fiz no trabalho e sei o que estou a dizer). Eu tenho n milhão de entradas. O vector de entradas tem um par de centenas. Eu quero agrupá-lo, mas não sei de antemão quantos agrupamentos existem. Nenhum algoritmo pode processar tal conjunto de dados em um computador comum. Portanto, primeiro eu colapso o espaço de entrada e faço uma grade de, por exemplo, 50*50. O resultado é 2500 representantes típicos da população... Em tal array, meu computador puxa agnes (clustering hierárquico). Constrói uma matriz de proximidade de todos a todos...

E acontece que eu cluster estes 2500 em, digamos, 10 clusters e a métrica de agregação é boa.

 
Alexey Burnakov:

Sim, claro que pode... Há essencialmente uma agregação de vectores semelhantes nessas células.

Pode ser o caso (eu próprio o fiz no trabalho e sei o que estou a dizer). Eu tenho n milhão de entradas. O vector de entradas tem um par de centenas. Eu quero agrupá-lo, mas não sei de antemão quantos agrupamentos existem. Nenhum algoritmo pode processar tal conjunto de dados em um computador comum. Portanto, primeiro eu colapso o espaço de entrada e faço uma grade de, por exemplo, 50*50. O resultado é 2500 representantes típicos da população... Em tal array, meu computador puxa agnes (clustering hierárquico). Constrói uma matriz de proximidade de todos a todos...

E acontece que eu cluster estes 2500 em, digamos, 10 clusters e a métrica de agregação é boa.

no manualhttps://cran.r-project.org/web/packages/SOMbrero/vignettes/doc-numericSOM.html

em

Construindo super-classes a partir da SOM resultante

exactamente do que estás a falar.

 

Para aqueles que querem saber o que é realmente o mercado...

assistir desde vídeos antigos até vídeos novos....

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

não parece difícil, mas programá-lo? para mim ainda não é definitivamente possível...

Eu sugiro que discutamos como codificar tais abordagens para MoD ou apenas codificá-las

 

Para informações sobre a linguagem R e o novo MetaTrader 5 build 1467:

  • Uma versão atualizada das bibliotecas estatísticas, semelhante ao R, foi lançada:

    Distribuições estatísticas em MQL5 - tire o melhor de R e torne-o mais rápido

  • Os cálculos em MQL5 são de 3 a 7 vezes mais rápidos do que em R (mesmo tendo em conta que as funções lá estão implementadas em C++)
  • Algumas funções R têm erros devido a antigos métodos de otimização/simplificação, levando a resultados errôneos
  • Foi adicionada uma versão beta de bibliotecas gráficas semelhantes a R, o que permite visualizar os dados como em R.
  • Adicionada a conveniente função ArrayPrint, que imprime tanto matrizes padrão como estruturas como em R


Você pode atualizar para 1467 a partir do servidor MetaQuotes-Demo.

Muitas novas funções matemáticas e estatísticas semelhantes a R serão adicionadas nas próximas versões. Isto permitirá mais cálculos e visualizações diretamente no MetaTrader 5.
 
Só por curiosidade - você só toma os valores dos preços e indicadores diferentes dos preços como preditores aqui? e alguém usa volumes reais e indicadores de volumes?