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

 
Alexey Burnakov:

Espera aí. Vou verificar os seus dados para as dependências também.

Uma pergunta antes de eu começar. Os seus dados incluem todas as barras em fila, ou houve desbaste das barras antes da amostragem?

R1, R2, R3 em linha e dentro delas também em linha são séries cronológicas em H1.
 
SanSanych Fomenko:
R1, R2, R3 em linha e dentro deles também em linha é uma série cronológica sobre H1.

Estou a ver. Bem, com os seus dados, eu entendo como trabalhar.

Eu também quero entender o Dr. Trader.

 

Eu também tenho H1, a amostra inclui dados das últimas 4 barras. open[1]-high[1]-close[1]-...-open[2]-high[2]-close[2]-... etc., os dados lá são das estruturas MqlRates e MqlDateTime, mais alguns indicadores e preços de fechamento de prazos mais altos, tudo é normalizado em intervalos [0...1]. O resultado de 1 ou 0 é aumento ou diminuição do preço na barra seguinte. Mas tudo isto não é claramente suficiente.

O problema é que nós não sabemos de quantos bares precisamos. O Neuronka precisa de apenas 3 barras para se reeducar a um erro de 0% (e portanto 50% dele estará na frente). Ou, se você treiná-lo com controle e pará-lo a tempo, o erro inicial será um par de por cento menos. Mas, é possível pegar centenas de barras e obter aproximadamente o mesmo resultado, embora cada nova barra na amostra seja uma enorme quantidade de lixo e, consequentemente, baixar a qualidade do modelo.

 
Dr. Trader:
Eu também tenho H1, a amostra inclui dados das últimas 4 barras. open1-high1-close1-...-open2-high2-close2-... etc. Os dados das estruturas MqlRates e MqlDateTime. O resultado de 1 ou 0 é aumento ou diminuição do preço na barra seguinte.
Óptimo. Existe algo como open1 - open2? Devoluções
 

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

 
Dr. Trader:

Eu também tenho H1, a amostra inclui dados das últimas 4 barras. open[1]-high[1]-close[1]-...-open[2]-high[2]-close[2]-... etc., os dados lá são das estruturas MqlRates e MqlDateTime, mais alguns indicadores e preços de fechamento de prazos mais altos, todos normalizados em intervalos [0...1]. O resultado de 1 ou 0 é aumento ou diminuição do preço na barra seguinte. Mas tudo isto não é claramente suficiente.

O problema é que nós não sabemos de quantos bares precisamos. O Neuronka precisa de apenas 3 barras para se reeducar a um erro de 0% (e portanto 50% dele estará na frente). Ou, se você treiná-lo com controle e pará-lo a tempo, o erro inicial será um par de por cento menos. Mas, é possível pegar centenas de barras e alcançar o mesmo resultado, embora cada nova barra na amostra seja uma enorme quantidade de lixo e uma diminuição correspondente na qualidade do modelo.

Bem, você tem que fazer engenharia de características. Não é necessariamente o uso de indicadores padrão. Você precisa de imaginação e compreensão do processo. Só dar os dados da barra da caixa negra pode não ser suficiente. E a profundidade da qual a informação é tirada é importante. Eu, por exemplo, vi na minha pesquisa que você precisa alimentar uma profundidade simétrica na entrada em relação à profundidade na saída. Prever para 3 horas à frente - dar dados para 3 horas atrás e mais tarde.

Aqui está um exemplo de um esquema de desenvolvimento de preditores que se reflecte em parte também na minha investigação. Estes dados já dão à máquina muitas informações sobre o que foi:

http://blog.kaggle.com/2016/02/12/winton-stock-market-challenge-winners-interview-3rd-place-mendrika-ramarlina/comment-page-1/

Winton Stock Market Challenge, Winner's Interview: 3rd place, Mendrika Ramarlina
Winton Stock Market Challenge, Winner's Interview: 3rd place, Mendrika Ramarlina
  • 2016.12.02
  • blog.kaggle.com
The Stock Market Challenge, Winton's second recruiting competition on Kaggle, asked participants to predict intra and end of day stock returns. The competition was crafted by research scientist at Winton to mimic the type of problem that they work on everyday. Mendrika Ramarlina finished third in the competition with a combination of simple...
 
Dr. Trader:

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

Isso é obrigatório.

Sabes o que funciona bem? A diferença entre o último preço conhecido e a média móvel. A janela da média deve ser diferente.

 
Aqui estou eu a ler, a ler.... e não consigo 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 saber o significado da própria variável alvo.
 

Eu olho para a variável alvo como um qualificador de compra/venda, sem as especificidades de quanto tempo manter a negociação aberta ou qual o nível de preço a esperar. A EA abre um negócio no início de um bar, e espera que o próximo bar tome a próxima decisão.

É mais difícil com um sentido lógico :)

Eu queria treinar a neurônica para encontrar padrões e formas em um gráfico (cabeça e ombros, etc.). E teve de aprender a encontrar alguns números por si só sem a minha participação; usei a direcção em ziguezague como variável alvo. O significado da variável alvo de acordo com o meu plano deveria ter sido "padrão encontrado, a tendência vai subir, eu deveria comprar" (com resultado=1). Ao mesmo tempo, o resultado=0 significaria que a tendência vai subir e eu deveria vender. Eu tentei considerar a força do sinal e não trocar quando o resultado está perto de 0,5.

Não pensei nisso antes: parece que o meu modelo estava errado, tive que dar 3 aulas para comprar/vender/fechar todas as_propostas_e_não_comerciais. E faça 3 saídas de uma rede, ou treine 3 redes separadas. Nem uma rede com uma saída.

Então eu percebi através de experiências que eu posso tomar apenas 5 barras em vez de 200 e nada vai mudar, o resultado vai permanecer o mesmo. Acho que o modelo não aprende a encontrar padrões em tal configuração, mas sim a encontrar algumas regularidades no tempo. Eu decidi gradualmente ensinar o modelo não em zig-zag, mas simplesmente no preço de fechamento do próximo bar. Neste caso eu não preciso filtrar o resultado da neurônica, menos problemas com o mesmo resultado, não é tão ruim assim. Aqui o significado lógico já é mais simples - variável alvo 0/1 - o preço cairá/cresce em 1 barra.

Estive estudando a floresta nos últimos dias, e os exemplos deste fórum. Se você tomar as mesmas 5 barras, então a floresta não aprenderá algumas coisas abstratas como neurônica, mas derivará de regras bastante específicas. Por exemplo, a floresta poderia derivar uma regra "atravessando dois MA" ou algo parecido. Parece-me que com tal conjunto de dados a floresta é muito mais promissora, vou aprender a usá-la. O significado da variável alvo é o mesmo - 0/1 - o preço vai descer/acrescer em 1 bar.

Não sei tanto sobre o impacto dos preditores como eu gostaria. O tempo deve definitivamente ser usado, hora/minuto/dia da semana, provavelmente um desses (hora?). Você não pode usar preditores com um pequeno conjunto de valores que vão em uma linha sem looping. Por exemplo, se a amostra de treinamento contém dados de um ano, você não pode usar um preditor de "mês". O modelo pode simplesmente dividir todos os dados em 12 pedaços de acordo com os meses, e treinar alguma lógica diferente para cada pedaço. E a lógica de janeiro de 2015 certamente não caberá em um ano para a lógica de janeiro de 2016. Mas se os dados de treinamento são para 5 anos, então "mês" já pode caber. Além disso, não tenho a certeza se o uso de indicadores é justificado, as avaliações dos indicadores padrão estão perdendo dinheiro, seria estranho se o modelo treinado extraísse algo útil desses dados. Além disso, entendo que a própria floresta também faz alguns cálculos e pode criar seus próprios indicadores internos durante o treinamento. O preço também deve ser usado, embora eu não confie nos preços de abertura e fechamento, eu prefiro alto e baixo.

Todos esses preditores mostram uma espécie de condição atual do mercado e o objetivo do modelo é definir essas mesmas condições usando preditores e para onde vai o preço em tais casos. Um modelo deve usar o mínimo possível de dados de entrada, como a lâmina de barbear de Occam, então há uma chance de que ele descreva alguma dependência e não se ajuste aos exemplos.

 
Dr. Trader:

Eu olho para a variável alvo como um qualificador de compra/venda, sem as especificidades de quanto tempo manter a negociação aberta ou qual o nível de preço a esperar. A EA abre um negócio no início de um bar, e espera que o próximo bar tome a próxima decisão.

É mais difícil com um sentido lógico :)

Eu queria treinar a neurônica para encontrar padrões e formas em um gráfico (cabeça e ombros, etc.). E teve de aprender a encontrar alguns números por si só sem a minha participação; usei a direcção em ziguezague como variável alvo. O significado da variável alvo de acordo com o meu plano deveria ter sido "padrão encontrado, a tendência vai subir, eu deveria comprar" (com resultado=1). Ao mesmo tempo, o resultado=0 significaria que a tendência vai subir e eu deveria vender. Eu tentei considerar a força do sinal e não trocar quando o resultado está perto de 0,5.

Não pensei nisso antes: parece que o meu modelo estava errado, tive que dar 3 aulas para comprar/vender/fechar todas as_propostas_e_não_comerciais. E faça 3 saídas de uma rede, ou treine 3 redes separadas. Nem uma rede com uma saída.

Então eu percebi através de experiências que eu posso tomar apenas 5 barras em vez de 200 e nada vai mudar, o resultado vai permanecer o mesmo. Acho que o modelo não aprende a encontrar padrões em tal configuração, mas sim a encontrar algumas regularidades no tempo. Eu decidi gradualmente ensinar o modelo não em zig-zag, mas simplesmente no preço de fechamento do próximo bar. Neste caso eu não preciso filtrar o resultado da neurônica, menos problemas com o mesmo resultado, não é tão ruim assim. Aqui o significado lógico já é mais simples - variável alvo 0/1 - o preço cairá/cresce em 1 barra.

Estive estudando a floresta nos últimos dias, e os exemplos deste fórum. Se você tomar as mesmas 5 barras, então a floresta não aprenderá algumas coisas abstratas como neurônica, mas derivará de regras bastante específicas. Por exemplo, a floresta poderia derivar uma regra "atravessando dois MA" ou algo parecido. Parece-me que com tal conjunto de dados a floresta é muito mais promissora, vou aprender a usá-la. O significado da variável alvo é o mesmo - 0/1 - o preço vai descer/acrescer em 1 bar.

Não sei tanto sobre o impacto dos preditores como eu gostaria. O tempo deve definitivamente ser usado, hora/minuto/dia da semana, provavelmente um desses (hora?). Você não pode usar preditores com um pequeno conjunto de valores que vão em uma linha sem looping. Por exemplo, se a amostra de treinamento contém dados de um ano, você não pode usar um preditor de "mês". O modelo pode simplesmente dividir todos os dados em 12 pedaços de acordo com os meses, e treinar alguma lógica diferente para cada pedaço. E a lógica de janeiro de 2015 certamente não caberá em um ano para a lógica de janeiro de 2016. Mas se os dados de treinamento são para 5 anos, então "mês" já pode caber. Além disso, não tenho a certeza se o uso de indicadores é justificado, as avaliações dos indicadores padrão estão perdendo dinheiro, seria estranho se o modelo treinado extraísse algo útil desses dados. Além disso, entendo que a própria floresta também faz alguns cálculos e pode criar seus próprios indicadores internos durante o treinamento. O preço também deve ser usado, embora eu não confie nos preços de abertura e fechamento, eu prefiro alto e baixo.

Todos esses preditores mostram uma espécie de condição atual do mercado e o objetivo do modelo é definir essas mesmas condições usando preditores e para onde vai o preço em tais casos. Um modelo deve usar o mínimo possível de dados de entrada, de acordo com o princípio da lâmina de Occam, então há uma chance de que ele descreva alguma dependência e não se ajuste aos exemplos.

Em muitos aspectos, os nossos pensamentos sobrepõem-se.

Mas no final estou preso com os preditores de ruído. A presença de preditores de ruído faz com que o modelo aprenda demais e todos os outros raciocínios se tornem inúteis.