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

 
Dr. Trader:
Continue não confiando na importância quando usá-lo para forex. A íris é um dado muito simples, existem padrões directos entre os dados disponíveis e as classes. RF basta encontrar um conjunto mínimo de preditores sobre os quais as classes de íris podem ser definidas e você está acabado.

O que pode a RF capturar dependências não lineares? Parece-me que não funciona para o mercado apenas porque os preditores são podres, se houvesse preditores normais funcionaria como com a íris com uma taxa de erro de 95%.

 

Com a íris é simples - se uma pétala é de tanto e tanto a tanto, então é de classe 1, e se é de tanto e tanto a tanto, então é de classe 2, etc. O que a RF faz é encontrar intervalos de valores de previsão que melhor correspondam aos valores-alvo.

Eu nem preciso de floresta para esta tarefa, uma árvore é suficiente para 90% de precisão:

 Rule number: 2 [Species=setosa cover=33 (31%) prob=1.00]
   Petal.Length< 2.6

 Rule number: 7 [Species=virginica cover=35 (33%) prob=0.00]
   Petal.Length>=2.6
   Petal.Length>=4.85

 Rule number: 6 [Species=versicolor cover=37 (35%) prob=0.00]
   Petal.Length>=2.6
   Petal.Length< 4.85

Ou seja, se uma determinada classe corresponde a um determinado intervalo de valores preditores ou suas combinações, e esses intervalos não se sobrepõem - então a árvore ou a floresta resolverá tudo 100%.

Dependências no Forex são muito mais complicadas, e uma floresta precisa de dezenas de preditores para descrever os valores-alvo. A floresta certamente encontrará tais intervalos de previsão e suas combinações que descrevem os valores-alvo, mas eles serão simplesmente combinações selecionadas, sem qualquer lógica ou análise. O que a floresta vai levar para decidir - ruído, ou um preditor realmente importante - é uma questão de sorte. A Forest para forex só funcionará corretamente se eliminar antecipadamente os preditores inapropriados e deixar apenas os necessários para a aprendizagem. O problema é que os preditores necessários têm de ser de alguma forma identificados ou encontrados, e a floresta não é uma ajuda para isso.

Ainda não fui capaz de fazer isso.

A maior parte do tempo levou para peneirar os preditores com valor próprio = 0 após cov() da tabela de treinamento (presumo que apenas preditores especialmente correlacionados são adequados). Depois de 24 horas, resumiu-se a treinar o modelo ForeCA em si, que não treinou por causa de um erro:

unit-variance: Mean relative difference: 3.520041 e-06
Error in check_whitened(out$score, FALSE) : Data must be whitened:
         Each variable must have variance 1.

O pacote é muito exigente em relação aos preditores, muitos tipos de restrições. Eu nem sei o que significa o último erro, vou investigar mais a fundo.

Acabarei isto mais tarde:
O Google diz que não é preciso apagar os preditores. Você pode transformá-los para que não estejam mais correlacionados, então a matriz de covariância terá a classificação completa, o que é necessário para ForeCA. Para o branqueamento, existem algumas funções no próprio pacote (não funcionou de imediato, é preciso descobri-las), mais a teoria nos links abaixo.
Para usar ForeCA corretamente, você precisa entender e aprender a fazer isso primeiro:
http://stats.stackexchange.com/questions/23420/is-whitening-always-good
http://courses.media.mit.edu/2010fall/mas622j/whiten.pdf

 
Dr. Trader:

1) A floresta forex só funcionará corretamente se você selecionar os preditores inadequados com antecedência e deixar apenas os necessários para o treinamento. O problema é que os preditores certos precisam ser identificados ou encontrados, e a floresta não é uma ajuda para isso.

2) O pacote é muito exigente para os preditores, há muitas limitações. Eu nem sei o que significa o último erro, vou investigar mais a fundo.

1) Eu sugeri o que eu acho uma boa idéia de como fazer tal seleção, mas ninguém está interessado, e eu mesmo não posso implementá-la.

2) Eu não posso fazer isso sozinho. 2) Você só pode reduzir a quantidade de dados, caso contrário você mesmo saberá).

 

Já coloquei este post mas ninguém reagiu, vou tentar novamente.

Eu já postei este post mas ninguém reagiu, vou tentar novamente. Existe uma noção na BP como o "dynamic time warping" (DTW), com sua ajuda você pode tornar o gráfico de preços mais legível e, portanto, mais reconhecível para o algoritmo

data_driven_time_warp <- function (y) {
  cbind(
    x = cumsum(c(0, abs(diff(y)))),
    y = y
  )
}

y <- cumsum(rnorm(200))+1000

i <- seq(1,length(y),by=10)
op <- par(mfrow=c(2,1), mar=c(.1,.1,.1,.1))
plot(y, type="l", axes = FALSE)
abline(v=i, col="grey")
lines(y, lwd=3)
box()
d <- data_driven_time_warp(y)
plot(d, type="l", axes=FALSE)
abline(v=d[i,1], col="grey")
lines(d, lwd=3)
box()
par(op)

e tudo parece estar bem, mas o triste é que como resultado desta transformação, obtemos duas coordenadas x e y tempo(sintético) e valores

d
                x        y
  [1,]   0.000000 1001.393
  [2,]   1.081118 1002.474
  [3,]   2.799970 1004.193
  [4,]   3.706653 1005.100
  [5,]   3.867351 1005.260
  [6,]   4.654784 1004.473
  [7,]   5.000202 1004.127
  [8,]   6.665623 1005.793
  [9,]   7.415255 1005.043
 [10,]   7.956572 1005.584
 [11,]   8.403185 1005.138
 [12,]   9.352230 1004.189
 [13,]   9.913620 1004.750
 [14,]  10.249985 1004.414

a questão é como devolver esta transformação a um vector para que não perca as suas propriedades.

é assim que se parece - topo ordinário, fundo dtw

DTW

 
mytarmailS:

1) Eu sugeri o que achei uma boa idéia para fazer tal seleção, mas ninguém está interessado, e eu mesmo não posso implementá-la.

2) Reduza apenas a quantidade de dados ou conheça você mesmo)

O que você sugere? Acontece que eu falhei? Posso repetir a sua ideia?
 
SanSanych Fomenko:
O que você sugere? Acontece que perdi o quê? Posso repetir a sua ideia?
Olha onde escrevi sobre o agrupamento, expliquei-o em grande detalhe.
 
mytarmailS:

a questão é como devolver esta transformação a um vector normal sem perder as suas propriedades

Então, alguma ideia sobre isto?
 

Eu fiz mais um exemplo com ForeCA, em pequena tabela de arquivo para teste e código para trabalhar com ele.
Desta vez, acertei.
Você pode usar sua própria tabela com dados de treinamento para modelo, o principal é que ela deve ser matricial, sem fatores (treinamento com lm, você pode usar apenas regressão). O número de filas deve ser muito maior do que o número de preditores, caso contrário, haverá erros em ForeCA.
Eu tenho 0 e 1 valores alvo, com outra precisão não será determinado corretamente, se isso, por favor corrija o código em RegressionToClasses01(regr) para o seu caso no local onde o resultado da regressão é arredondado para as classes.
trainData - dados para treinamento
trainDataFT - dados para o fronttest

Resultado:
lm em dados brutos: 75% de precisão em dados de treinamento e 57% em dados novos.
lm nos 14 componentes do foreCA: 75% nos dados de treinamento e 61% nos novos dados. Ligeiramente melhor, mas neste caso +4% é apenas +1 resultado correcto, a tabela é bastante pequena :)

Ou seja, se os preditores já estão pré-seleccionados, não deve ser pior depois da ForeCA, talvez até adicionar alguns pontos percentuais à precisão.

Também acrescentei um gráfico com a precisão dependente do número de componentes ForeCA. Parece que quanto maior for o número de componentes, mais precisos serão os resultados. Número máximo permitido de componentes = número de preditores.


Arquivos anexados:
 

A segunda parte da experiência é.

Eu tinha 14 preditores previamente selecionados, acrescentei outros 14 com valores aleatórios. O número máximo permitido de componentes ForeCA é agora de 28.

A precisão da previsão com todos os 28 componentes nos dados de treinamento em ambos os casos (com e sem foreCA) é de 76%, a precisão nos dados novos em ambos os casos é de 57%.

Não acho que o ForeCA tenha lidado com o lixo dos palpiteiros, não vi o milagre esperado.

 
mytarmailS:
E daí?
Parece um gráfico de renko. Rencos são de alguma forma desenhados em barras no terminal mt5, você precisa de um algoritmo similar.