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

 
Dr. Trader:

Uma pequena adição ao post anterior. Não, não há deltas. Vou ter de tentar.

De qualquer forma, tentei procurar uma correlação nos seus dados. É mais provável que não do que sim. Acontece que encontrei algo em metade das observações tiradas aleatoriamente do comboio. Comecei a verificar a outra metade e a mesma correlação não está lá. Acontece que ou está ausente, ou os dados são construídos de tal forma que não é possível encontrar boas dependências sobre eles.

Mas deixa-me tentar outra vez. Eu vou dar o meu feedback.

Alexey

 

Suspeito que há algo em falta nestes dados. É como na sua atribuição do primeiro post - se você remover qualquer uma dessas 6 entradas da amostra, o resultado se torna imprevisível. Forex depende claramente do seu próprio preço passado, hora do dia, etc. E esse "itd" é exatamente o que falta nos meus dados e, portanto, os modelos simplesmente não conseguem encontrar nenhuma regularidade adequada e descrever a lógica. Les aparentemente não podem tentar combinações diferentes como "subtrair o alto do baixo" e pegar o melhor deles, e tais coisas precisam ser adicionadas à própria amostra. Atualmente estou refazendo meu script que salva dados em csv, adicionando muitos deltas, mais distâncias para o topo do ziguezague passado, de acordo com os conselhos. Mais tarde publicarei um novo arquivo de dados para experimentação.

 
SanSanych Fomenko:

Em anexo estão vários artigos que supostamente resolvem o problema de limpar o conjunto original de preditores do ruído, e com muito mais qualidade. Infelizmente, não tenho tempo para experimentar de momento. Talvez alguém experimente e afixe o resultado?

Consegui repetir o processo descrito. De acordo com os resultados - o meu conjunto de preditores descreve o resultado com 0,1% de confiança, ou algo do género... Há muita teoria lá fora além do meu conhecimento, eu não entendi tudo.

Eu adicionei 3 ficheiros. Você pode apenas mudar o caminho do arquivo csv lá e você pode executá-lo. O resultado necessário deve estar na última coluna do csv, tudo o resto são preditores. Não normalize nada de antemão, alimente os dados como eles são.

1) Regressão dos Componentes Principais 01. Algum código da parte introdutória do artigo, parece-me que falta alguma coisa, porque tenho erros ao executar o código. Deve dar a cada entrada uma pontuação, e desenhar um gráfico, aqui, infelizmente, eu não entendo o quê para o quê e como aplicá-lo.

2) Regressão dos Componentes Principais 03. Regressão dos Componentes Principais, Pt. 2: Métodos Y-Aware. Saltei a primeira parte, porque o artigo diz que a primeira parte é outro algoritmo, mais fraco.
O código é dividido em duas partes e elas devem ser executadas uma após a outra para olhar para o gráfico desenhado em R após cada parte.

A primeira execução - você precisa copiar e executar tudo desde o arquivo até o início da segunda etapa (o início da segunda etapa é destacado em negrito PASSO 2). O console R mostrará uma tabela onde quanto menor o valor da entrada, melhor ela é. Valor = 1 = lixo. Mais gráfico, quanto mais longa a linha, pior, semelhante a tabela.

A seguir temos de correr o código do segundo passo. No final haverá um gráfico, quanto mais longa a linha se relaciona com a entrada, mais confiável ela é (foi vice versa no passo 1). Há também um exemplo de variávelPruneSig no código que é responsável por separar as entradas de acordo com o valor psig da tabela na etapa 1. Você pode definir valor variável =1, se você quiser ver o valor transformado da plausibilidade de todos os inputs. Pois é possível que um input tenha sido mal avaliado no primeiro passo, mas tornou-se melhor no segundo passo. Recomenda-se tomar algum valor limiar ou exemploPruneSig = 1/número de_inputs, mas não há instruções exatas.

A terceira etapa é a própria Análise de Componentes Principais (prcomp). Isto é algo novo para mim novamente, mas a questão é que esta função tenta produzir muitos "componentes principais" (PC) (algo como variáveis internas, das quais depende o resultado desejado). Cada uma destas variáveis internas depende de um conjunto diferente de dados de entrada. Depois, a tarefa resume-se a encontrar o conjunto mínimo de PCs que possam determinar o resultado de forma confiável. E a amostra resultante de preditores é ela própria os preditores daqueles PCs que caem nesse conjunto mínimo.
O artigo em si não resolve este problema, apenas pega nos dois primeiros PCs e analisa se ele tem ou não sucesso. Mas talvez me tenha escapado alguma coisa, por isso, se percebes prcomp, é melhor leres tu mesmo.
Mas, no final da etapa será desenhado um diagrama dos primeiros 5 PCs, e as entradas utilizadas por eles. Quanto mais longa for a linha no diagrama, mais importante é a entrada.

Quarto, quinto, sexto passos - avaliação do resultado em treinamento e dados de teste.


3) Regressão dos Componentes Principais 04. Uma função de outro pacote que faz a mesma coisa que na Regressão 03 dos Componentes Principais. No entanto, um bônus é que ele peneira o PC, e deixa um conjunto mínimo daqueles que podem descrever o resultado com 95% de precisão.
Mas não há exemplos e gráficos adequados, acho que você tem que usar algo da Regressão 03 dos Componentes Principais.


tl;dr:

1) Crivando valores ruidosos. Pegamos o arquivo "Regressão de Componentes Principais 03", rodamos apenas o código até o segundo passo (não incluindo o segundo). R conterá uma tabela, apenas entradas com valor psig inferior ao limiar devem ser tomadas. Um valor de "1" é ruído e aleatório. "0" é bom. Um limiar de (1/número de entradas) é incerto. Este método não dá nenhuma garantia de que os inputs sejam amostrados corretamente, ao contrário, simplesmente remove os valores realmente aleatórios e ruidosos.

2) Uma abordagem mais complexa. Um algoritmo astuto cria alguns Componentes Principais que podem ser usados para calcular o resultado. PC é um tipo de função que descreve algum processo interno que acontece no modelo que está sendo modelado. E o resultado do modelo em si é um conjunto de PC's que interagem. Em seguida, pegamos um conjunto mínimo de PC's que descrevem o resultado com alta precisão, veja as entradas usadas para esses PC's. O arquivo "Regressão de Componentes Principais 04" nos permite obter o conjunto mínimo de tais PCs, mas não está claro o que fazer com ele, precisamos puxar os preditores utilizados.

Aqui está o artigo em si, e o código para ele.

http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/

https://github.com/WinVector/Examples/blob/master/PCR/YAwarePCA.Rmd


Principal Components Regression, Pt. 2: Y-Aware Methods | R-bloggers
Principal Components Regression, Pt. 2: Y-Aware Methods | R-bloggers
  • Nina Zumel
  • www.r-bloggers.com
In our previous note, we discussed some problems that can arise when using standard principal components analysis (specifically, principal components regression) to model the relationship between independent (x) and dependent (y) variables. In this note, we present some dimensionality reduction techniques that alleviate some of those problems...
Arquivos anexados:
 
Dr. Trader:

Suspeito que há algo em falta nestes dados. É como na sua atribuição do primeiro post - se você remover qualquer uma dessas 6 entradas da amostra, o resultado se torna imprevisível. Forex depende claramente do seu próprio preço passado, hora do dia, etc. E este "itd" é exatamente o que falta nos meus dados e, portanto, os modelos simplesmente não conseguem encontrar nenhuma regularidade adequada e descrever a lógica. Les aparentemente não podem tentar combinações diferentes como "subtrair o alto do baixo" e pegar o melhor deles, e tais coisas precisam ser adicionadas à própria amostra. Atualmente estou refazendo meu script que salva dados em csv, adicionando muitos deltas, mais distâncias para o topo do ziguezague passado, de acordo com os conselhos. Mais tarde publicarei um novo ficheiro de dados para experiências.

Tentei mais algumas buscas. E fez um controlo de validação. Mas a dependência encontrada não foi confirmada. Em suma, acho que não há informação suficiente nos dados. Tente expandir a lista de entradas, sim.

E aqui estão os meus dados de Forex: https://drive.google.com/drive/folders/0B_Au3ANgcG7CYnhVNWxvbmFjd3c

dat_train_final é um ficheiro para formação de modelos. Tem a história de 5 pares de moedas em 10 anos e todos os meus palpiteiros.

many_samples - Eu preciso de carregar em R. Esta é uma lista - em cada elemento há uma amostra de validação, e são 49 no total. Qualquer um ou todos eles podem ser validados.

Meet Google Drive – One place for all your files
  • accounts.google.com
Google Drive is a free way to keep your files backed up and easy to reach from any phone, tablet, or computer. Start with 15GB of Google storage – free.
 

Não consigo ver os seus ficheiros, o link é apenas uma pasta vazia.

De qualquer forma aqui está o meu novo ficheiro para o modelo de treino em eurusd (h1, 5 barras, alvo é aumento/diminuição do preço para a próxima barra). Analisei-o seguindo os métodos do artigo acima mencionado, componentes-regressão-pt-2-y-aware-methods, e descobri que os dados descrevem de forma confiável menos de 1% dos resultados.
(RData by SanSanych tem este número mais de 10% para o Rat_DF1), então parece que eu tenho lixo de novo. É improvável treinar modelos neste arquivo, é mais adequado se alguém quiser treinar para peneirar os preditores.

O arquivo contém 2 arquivos, a condição é treinar o modelo no primeiro arquivo (é mais conveniente dividi-lo em vários pedaços para teste e validação, por padrão Rattle o divide em 75%/15%/15%), então, quando os inputs são selecionados e o modelo é treinado, faça um teste físico no segundo arquivo. Se o erro for inferior a 45% - você tem uma chance de negociar com tal modelo em forex. Você pode não lucrar, mas pode ganhar bônus dos corretores pelo número de negócios e descontos. Se o erro de classificação no segundo arquivo for inferior a 40% - esta já é uma estratégia lucrativa.

Arquivos anexados:
 
Dr. Trader:

2) Regressão dos Componentes Principais, Parte 2: Métodos Y-Aware. Eu omiti a primeira parte porque o artigo diz que a primeira parte é outro algoritmo mais fraco.

Como me pareceu, talvez eu esteja errado, mas a incerteza do seu resultado é causada por não compreender a própria essência do método dos componentes principais. E a essência é a seguinte.

A partir dos preditores existentes, crie novos preditores que tenham algumas novas propriedades úteis.

O resultado é apresentado em uma tabela, com PC1, PC2... no cabeçalho, os nomes das linhas da tabela são os nomes dos seus preditores e nas colunas sob cada PC são números - os coeficientes pelos quais você precisa multiplicar o seu preditor inicial para formar o valor do PC. Ou seja: para uma determinada barra tomamos os valores dos preditores iniciais, multiplicamos por coeficientes e obtemos o valor do PC, depois a próxima barra e assim por diante. Como resultado, além dos seus vectores iniciais, por exemplo Ask, obtemos mais um vector

Todos os PCs na mesa são encomendados. A primeira é a EM que mais explica a variabilidade no conjunto original, a segunda é a EM que mais explica a variabilidade a partir do que resta da primeira EM. Por exemplo, PC1 = 0,6, PC2 = 0,2, depois no total PC1+PC2 explicar 0,8 da variabilidade. Normalmente, para grandes conjuntos de preditores, 5-6 destes mesmos "componentes principais" são suficientes para explicar mais de 95% da variabilidade. Isto se a maioria dos preditores forem ruidosos e houver verdadeiros componentes "principais" entre eles!

Eu descrevi os clássicos "componentes principais". O artigo é interessante para nós porque, em contraste com o clássico, calcula a variabilidade em relação à variável alvo. Os limiares, por outro lado, são necessários para escolher algo de um conjunto completamente desesperado de preditores. Isto não me parece ser relevante para nós. É relevante, por exemplo, para a estatística em sociologia, onde é muito difícil recolher algo adicional. No nosso caso, até mesmo um par de moedas pode ser usado para construir um enorme número de preditores.

Talvez você pudesse fazer outra corrida (hit) sobre esses componentes fundamentais?

PS.

1. Não esqueçamos que os principais componentes requerem uma normalização prévia dos dados em bruto

2. Os componentes principais resultantes têm a propriedade notável de serem independentes um do outro.

3. Os componentes principais podem ser previstos.

 

Compreendo agora, obrigado pelo esclarecimento. Eu só soube deste modelo pelo artigo. Eu pensei que PC1 e PC2,3,4,... correspondem a diferentes conjuntos de preditores, não a coeficientes. Eu vi a tabela de coeficientes, agora descobri rapidamente onde conseguir o quê.

O código do PrincipalComponentRegression04.txt parece demasiado complicado. Além disso, parece não haver uma definição de variabilidade em relação àvariável alvo, voltei ao PrincipalComponentRegression03.txt desse arquivo que anexei esta manhã.

Preciso de fazer os 5 primeiros passos.

A seguir,

> model$coefficients

(Interceptar) PC1 PC2

0.02075519 0.40407635 -0.42250678

O resultado da execução deve ser interceptado + coef1 * PC1 + coef2 * PC2 + ... + PC restante, se houver

Os valores de PC1, PC2. :

> proj

> projeto

PC1 PC2

X_clean 0,00516309881 0,00477076325

X1_clean 0,00142866076 0,00149863842

X2_clean -0,00008292268 0,00001010802

.....

PC1 = X_clean * 0,00516309881 + X1_clean*0,00142866076 +.

É um mistério para mim agora se o postfix "limpo" é uma referência para tomar o valor original dos inputs, X, X1, X2,... antes das normalizações e transformações, ou não.

Mais tarde, vou pegar um exemplo mais fácil e calcular todos os valores manualmente para comparar se tenho as fórmulas certas ou não. Só um palpite por agora )

Mas então acontece que este método não se destina a eliminar os preditores; destina-se antes a treinar um modelo que, por si só, ignora o número máximo de preditores. Tudo o que podemos fazer é calcular o coeficiente médio para cada preditor e excluir algo abaixo do limiar.
Este modelo em si é muito semelhante ao neurônio, mas sem uma função de ativação e sem mudanças nos neurônios da camada interna. Mas a essência é a mesma.

Mais um problema - quantos componentes de PC devem ser levados. Se eu conseguir menos de 95% de confiança tenho que voltar ao passo 3 e alterar o proj <-extractProjection(2,princ) de dois para três, então execute os passos 3,4,5, calcule o erro e se for menos de 95% volte ao passo 3 e aumente o número de componentes novamente.

Se tivéssemos acesso directo ao R em MT5, teríamos um modelo acabado pronto a ser comercializado. Eu entendo que este modelo não sofre do problema de reciclagem, é muito bom se for. Ou seja, o nível de confiança de 10% é atingido e isso é bom.

Quase tudo está claro sobre o modelo. Seria muito bom implementá-lo em MT5, para implementar apenas uma lógica de tomada de decisão por coeficientes. Não está claro como ligar o R ao MT5. Posso exportar todos os dados do mt5 para o csv e depois processá-los em R, treinar o modelo e escrever os coeficientes em outro csv. CSV com coeficientes lidos do Expert Advisor. E além disso será muito ruim porque R tem muitas funções que normalizam os dados antes de calcular o PC a partir dele. Repetir este código para normalização no MT5 é dificilmente possível. Precisamos de pensar.

 
Dr. Trader:

Compreendo agora, obrigado pelo esclarecimento. Eu só soube deste modelo pelo artigo. Eu pensei que PC1 e PC2,3,4,... correspondem a diferentes conjuntos de preditores, não a coeficientes. Eu vi a tabela de coeficientes, agora descobri rapidamente onde conseguir o quê.

O código do PrincipalComponentRegression04.txt parece demasiado complicado. Além disso, parece não haver uma definição de variabilidade em relação àvariável alvo, voltei ao PrincipalComponentRegression03.txt desse arquivo que anexei esta manhã.

Preciso de fazer os 5 primeiros passos.

A seguir,

(Interceptar) PC1 PC2

0.02075519 0.40407635 -0.42250678

O resultado da execução deve ser interceptado + coef1 * PC1 + coef2 * PC2 + ... + PC restante, se houver

Os valores de PC1, PC2. :

> projeto

PC1 PC2

X_clean 0,00516309881 0,00477076325

X1_clean 0,00142866076 0,00149863842

X2_clean -0,00008292268 0,00001010802

.....

PC1 = X_clean * 0,00516309881 + X1_clean*0,00142866076 +.

É um mistério para mim agora se o postfix "limpo" é uma referência para tomar o valor original dos inputs, X, X1, X2,... antes das normalizações e transformações, ou não.

Mais tarde, vou pegar um exemplo mais fácil e calcular todos os valores manualmente para comparar se tenho as fórmulas certas ou não. Só um palpite por agora )

Mas então acontece que este método não se destina a rastrear os preditores, mas sim a treinar um modelo que ignora o número máximo de preditores. Tudo o que podemos fazer é calcular o coeficiente médio para cada preditor e excluir qualquer coisa abaixo do limiar.
Este modelo em si é muito semelhante ao neurônio, mas sem uma função de ativação e sem mudanças nos neurônios da camada interna. Mas a essência é a mesma.

Mais um problema - quantos componentes de PC devem ser levados. Se eu conseguir menos de 95% de confiança tenho que voltar ao passo 3 e alterar o proj <-extractProjection(2,princ) de dois para três, então execute os passos 3,4,5, calcule o erro e se for menos de 95% volte ao passo 3 e aumente o número de componentes novamente.

Se tivéssemos acesso directo ao R em MT5, teríamos um modelo acabado pronto a ser comercializado. Eu entendo que este modelo não sofre do problema de reciclagem, é muito bom se for. Ou seja, o nível de confiança de 10% é atingido e isso é bom.

Quase tudo está claro sobre o modelo. Seria muito bom implementá-lo em MT5, para implementar apenas uma lógica de tomada de decisão por coeficientes. Não está claro como ligar o R ao MT5. Posso exportar todos os dados do mt5 para o csv e depois processá-los em R, treinar o modelo e escrever os coeficientes em outro csv. CSV com coeficientes lidos do Expert Advisor. E além disso será muito ruim porque R tem muitas funções que normalizam os dados antes de calcular o PC a partir dele. Repetir este código para normalização no MT5 é dificilmente possível. Temos de pensar.

Na minha opinião, Regressão de Componentes Principais, Parte 2: Métodos Y-Aware

Do ponto de vista superficial do texto, entendo que o mais gosto é que a escala é baseada na função do alvo. No PCA convencional, a função de alvo não é de todo considerada. Por causa disso, supostamente os primeiros componentes são os componentes mais importantes para explicar a função alvo, em vez de explicar a variabilidade de todo o conjunto de preditores!


Outro problema é a quantidade de componentes para PC a levar

Esta é a razão de todo este alarido. Intuitivamente, não há limites. Se os primeiros 5 componentes não explicam mais de 95% da variabilidade, então devemos procurar por um novo conjunto de preditores. Embora eu possa estar errado.

Sobre o modelo, quase tudo está claro. Seria muito bom implementá-lo no MT5.

Tudo funciona bem no MT4. Há uma biblioteca Pascal com código fonte. Eu mesmo não tentei, mas para mim se o MT4 é capaz de apelar para a biblioteca no pascal, então o MT5 também o deveria fazer.

O apelo ao R parece ser assim.

1. OnInit estabelece a ligação com R. Se houver dados especiais preparados, a área de trabalho é carregada. Além disso, o código em R disposto em uma ou várias funções é carregado. O número de cordas em cada função é, naturalmente, arbitrário - determinado pela lógica.

2. O corpo do Expert Advisor ou o indicador chama estas funções.

Se considerarmos que o R tem os gráficos mais ricos não ligados à janela do terminal, temos grandes oportunidades de visualizar os dados paralelamente ao terminal.

 
SanSanych Fomenko:
Aqui estou eu a ler, a ler.... e não consegue entender qual é a variável alvo primeiro de um ponto de vista formal: um número real (regressão) ou um valor nominal (classificação). Além disso, se estamos discutindo até que ponto os preditores influenciam a variável alvo, é uma boa idéia conhecer o significado substantivo dessa mesma variável alvo.

Paradoxalmente, a classificação é a mesma que a regressão.

Apenas para regressão o output é real, enquanto para classificação é a probabilidade.

E o alvo para a regressão é uma curva contínua, enquanto que para a classificação são os impulsos (0, 1) ou (-1,+1).

Esta saída é então traduzida para a classe apropriada (ifelse(y > 0.5, 1, 0).

 
Dr. Trader:

Não consigo ver os seus ficheiros, o link apenas mostra uma pasta vazia.


isto é formação: https://drive.google.com/file/d/0B_Au3ANgcG7CN2tTUHBkdEdpVEU/view?usp=sharing

esta é a validação: https: //drive.google.com/file/d/0B_Au3ANgcG7CZmFWclFOd0RqNFk/view?usp=sharing

a validação deve ser tratada como esta carga(validation_file)

cada item da lista contém uma amostra de validação única, com observações independentes. Quase não há sobreposição entre as amostras de validação porque as observações nelas contidas são retiradas de pontos de tempo aleatórios. Cada amostra de validação pode ser tratada como uma estimativa pontual de comércio.

Isto é feito de forma a não simular negócios que ocorrem a cada minuto. Os negócios são modelados aproximadamente a cada 12 horas.