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

 
Yousufkhodja Sultonov:

As mães são desenhadas pela natureza para enganá-lo - aqueles que não entendem as leis do mercado. E todos caíram nessa. Surpreendentemente, é um facto. Olhe ao seu redor e você perceberá que MA é uma propriedade de todas as séries numéricas, independentemente de serem de mercado ou aleatórias. Acordem os comerciantes, não se deixem enganar.

Eu chamar-lhe-ia paranóia).

Os MAs são o filtro mais comum que não é culpado de nada. Qualquer método de acasalamento é bom onde e para onde é aplicável.

 
Maxim Dmitrievsky:

Então, qual é a verdadeira questão sobre encontrar características?

só há preço no nosso caso. Qualquer transformação de preços é uma regularidade a priori, sob a forma de algum tipo de "memória" do processo (indicadores construídos ao longo de n períodos). Isto é, se não soubermos as regularidades, só podemos introduzir o preço do input, incrementos com períodos diferentes para contabilizar os processos de memória.

o que pode ser além de aumentos de preço? ou não, o que você está escolhendo lá tão escrupulosamente, existe algum? :)

Há um processo de atvoregressão com ordem, você pode fazer o mesmo através da NS. Isso parece-me ser a única coisa que pode ser ensinada. Quero dizer, pegar em modelos econométricos e estendê-los.

IMHO... é por isso que eu nem sequer tento apanhar batatas fritas :) e os nervos estão bem (mas não realmente)

em outras palavras, o que podemos encontrar no preço: tendência, sazonalidade, ciclicidade, ruído

Você mesmo postou um exemplo há algumas páginas com um neurônio que aprende a reconhecer uma espiral. As duas características padrão requerem 3 camadas ocultas de neurônica. E se você adicionar mais características, uma camada é suficiente.
Então aqui também, você pode alimentar um neurônio com cem incrementos passados e processar tudo isso em uma dúzia de camadas escondidas, ou você pode obter algumas boas características caseiras que uma única camada de grade dos anos 90 pode lidar.

 

Encontrei outro pacote interessante para peneirar os preditores. Chama-se FSelector. Oferece cerca de uma dúzia de métodos para peneirar os preditores, incluindo a entropia.

Recebi o arquivo com os preditores e o alvo dohttps://www.mql5.com/ru/forum/86386/page6#comment_2534058.


library(FSelector)
library(corrplot)

load("ALL_cod.RData")
trainTable <- Rat_DF1

PREDICTOR_COLUMNS_SEQ <- 1:27
TARGET_COLUMN_ID     <- 28

targetFormula <- as.simple.formula(colnames(trainTable)[PREDICTOR_COLUMNS_SEQ], colnames(trainTable)[TARGET_COLUMN_ID])

impMatrix <- matrix(NA, nrow = 0, ncol = length(PREDICTOR_COLUMNS_SEQ))

impMatrix <- rbind(impMatrix, colnames(trainTable)[PREDICTOR_COLUMNS_SEQ] %in% cfs(targetFormula, trainTable))
rownames(impMatrix)[nrow(impMatrix)] <- "cfs"
impMatrix <- rbind(impMatrix, chi.squared(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "chi.squared"
impMatrix <- rbind(impMatrix, colnames(trainTable)[PREDICTOR_COLUMNS_SEQ] %in% consistency(targetFormula, trainTable))
rownames(impMatrix)[nrow(impMatrix)] <- "consistency"
if(class(trainTable[,TARGET_COLUMN_ID]) != "factor"){
  impMatrix <- rbind(impMatrix, linear.correlation(targetFormula, trainTable)[[1]])
  rownames(impMatrix)[nrow(impMatrix)] <- "linear.correlation"
  impMatrix <- rbind(impMatrix, rank.correlation(targetFormula, trainTable)[[1]])
  rownames(impMatrix)[nrow(impMatrix)] <- "rank.correlation"
}
impMatrix <- rbind(impMatrix, information.gain(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "information.gain"
impMatrix <- rbind(impMatrix, gain.ratio(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "gain.ratio"
impMatrix <- rbind(impMatrix, symmetrical.uncertainty(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "symmetrical.uncertainty"
impMatrix <- rbind(impMatrix, oneR(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "oneR"
impMatrix <- rbind(impMatrix, random.forest.importance(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "random.forest.importance"
impMatrix <- rbind(impMatrix, relief(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "relief"

impMatrix

for(i in 1:nrow(impMatrix)){
  if(length(unique(impMatrix[i,]))==1){
    impMatrix[i,] <- 0
  }else{
    impMatrix[i,] <- -1 + (impMatrix[i,]-min(impMatrix[i,]))/(max(impMatrix[i,])-min(impMatrix[i,]))*2
  }
}

while(nrow(impMatrix) < ncol(impMatrix)){
  impMatrix <- rbind(impMatrix, 0)
}
while(ncol(impMatrix) < nrow(impMatrix)){
  impMatrix <- cbind(impMatrix, 0)
}

impMatrix <- as.matrix(impMatrix)
colnames(impMatrix) <- colnames(trainTable)[PREDICTOR_COLUMNS_SEQ]

corrplot(impMatrix)

A avaliação do preditor por cada método que apresentei no gráfico no final.

Azul é bom, vermelho é ruim (para resultados de corrplot foram escalados para [-1:1], para avaliação exata veja resultados de cfs(targetFormula, trainTable), chi.squared(targetFormula, trainTable), etc.)
Você pode ver que X3, X4, X5, X19, X20 são bem avaliados por quase todos os métodos, você pode começar com eles, então tente adicionar/remover mais.

No entanto, os modelos em chocalho falharam no teste com estes 5 preditores no Rat_DF2, mais uma vez não aconteceu nenhum milagre. Ou seja, mesmo com os demais preditores, você tem que ajustar os parâmetros do modelo, fazer a validação cruzada, adicionar/remover os preditores você mesmo.

 
SanSanych Fomenko:

Poderia correr uma janela sobre o resultado da fusão e dar gráficos:

  • valores de entropia
  • resultados do adfTest
  • Resultados do ArchTest

Levou apenas um eurusd m1 por volta de Janeiro deste ano, e uma janela deslizante de 1 dia.

Pela lógica, se a entropia está crescendo, então você deve suspender a negociação, e continuar negociando com baixa entropia. Mas aqui temos uma tendência de baixa entropia por alguma razão, embora seja mais fácil de negociar em apartamento.

(erro de digitação corrigido no código anexo, baixe novamente se você já teve tempo de baixar o antigo)

Arquivos anexados:
 
Dr. Trader:

Há algumas páginas atrás você postou um exemplo com uma rede neural aprendendo a detectar uma espiral. As duas características padrão requerem 3 camadas ocultas de neurônica. E se você adicionar mais características, uma camada é suficiente.
Então aqui também, você pode alimentar um neurônio com cem incrementos passados e processar tudo isso em uma dúzia de camadas escondidas, ou obter algumas boas características caseiras que uma grade de uma camada dos anos 90 pode lidar.

Eu entendo isso, mas a espiral não muda com o tempo... pense só que falso problema você está resolvendo, quando a espiral no tempo é agora um quadrado e agora uma elipse.

e a validação cruzada não vai ajudar porque as transições de estado são aleatórias.

 
Dr. Trader:

Logicamente, se a entropia aumentar, deve-se parar de negociar, e continuar negociando quando a entropia estiver baixa. Mas aqui, quando a entropia é baixa, por alguma razão ela está em tendência, embora seja mais fácil de trocar em um apartamento, o que é incomum.


É por isso que eu digo para levarem o tempo que quiserem.

Em alta entropia obtemos a distribuição normal com a contra-tendência de negociação.

Em baixa entropia - distribuição de Pareto, tendência, "memória" - o que quer que lhe queira chamar.

Acontece que tens algumas coisas prontas em R, é mais fácil para ti. Eu, por outro lado, tenho muito trabalho a fazer agora para explicar a não centralidade, por isso desisti das discussões do fórum.

Eu mantenho a minha opinião - a contabilidade entropia é a chave para tudo.

 
Maxim Dmitrievsky:

e a validação cruzada não vai ajudar porque as transições de estado são aleatórias

Se as transições de estado forem aleatórias, então o processo é Markovian e todo este tópico do fórum pode ser removido por inutilidade :)

Mas eu, por exemplo, acredito que o processo é não-markoviano. Alexander parece concordar, ele é muito melhor em estatísticas do que eu, eu confiaria nele.

 
Dr. Trader:

Se as transições de estado são aleatórias, então o processo é Markovian e todo este tópico do fórum pode ser excluído por inutilidade :)

Mas eu, por exemplo, acredito que o processo é não-markoviano. Alexander parece concordar, ele conhece as estatísticas muito melhor do que eu, eu confiaria nele.

Eu já escrevi: aleatório a nível local, não se pode levá-los todos em conta sem mudar para grande atraso ou outra escala, e aí o processo torna-se previsível novamente. Uma MAS, a população geral é desconhecida e o número de transferências para outra escala é limitado. É por isso que o Alexander usa carraças. Assim é, mas mesmo assim nem sempre funcionará quando nos deparamos com a insuficiência da história devido à sua ausência, e como consequência, a ausência de uma ideia clara dos padrões da PA investigada.

Numa palavra, algumas transições a nível local não podem ser previstas de todo, é necessário ir para outro nível de representação

 
Dr. Trader:

Se as transições de estado são aleatórias, então o processo é Markovian, e todo este tópico do fórum pode ser excluído por inutilidade :)

Mas eu, por exemplo, acredito que o processo é não-markoviano. Alexander parece concordar, ele conhece as estatísticas muito melhor do que eu, eu confiaria nele.

Embora eu não use redes neurais, mas li o fio, porque Feynman estava convencido de que é possível prever o movimento futuro da partícula do estado A para o estado B (exatamente de estado para estado, e não apenas extrapolar para o infinito).

Para isso, ele usou como input os incrementos usuais entre os estados atual e anterior, e levou em conta uma série de parâmetros adicionais. Shelepin L.A. foi o primeiro a começar a usar a não-entropia e morreu por alguma razão... não acabou com o trabalho. Portanto, cabe-nos a nós terminar este assunto.

 

Sim! Esqueci-me de dizer.

Os Estados são considerados um conjunto de dados que caracteriza uma partícula quase completamente. Ou seja, é um conjunto de dados, simplesmente coloque - volume de amostra, com suas características - curtose, assimetria, não-entropia, etc.

Ou seja, com confiança de R.Feynman é possível afirmar, que tendo definido corretamente o volume da amostra para o par concreto, tendo calculado sobre os valores médios históricos característicos destes coeficientes para esta amostra, é possível prever, que tendo atualmente um certo conjunto de parâmetros, em um certo intervalo de tempo, o sistema passará a um estado com seus parâmetros de estado estacionário.

Isto é o que eu espero deste fio. Se você precisar de ajuda para determinar o tamanho certo da amostra, por favor entre em contato comigo e eu tentarei ajudar.

Razão: