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

 
Andrey Dik:
Por quanto tempo?

Eu entendo que o seu código no artigo já é adequado para simular a negociação nos pontos encontrados e é justo usá-lo. ) Isso é óptimo.

Bem, digamos que em alguns dias de operação da máquina (ou uma semana). Algum tempo previsível, digamos.

 
Alexey Burnakov:

Eu entendo que o seu código no artigo já é adequado para simular a negociação nos pontos encontrados e é justo usá-lo. ) Isso é óptimo.

Bem, digamos que dentro de alguns dias de operação da máquina.

O algoritmo em si funciona e não requer (a menos que você seja muito exigente) trabalho adicional, enquanto um fragmento de código com zz ideal pode ser usado como uma simulação de negociação com algum trabalho adicional.

Dentro de alguns dias? - Não, acho que consegues um bom resultado muito mais rápido, em horas ou até em minutos. No artigo, a busca foi algo como alguns segundos, mas havia 100 barras. No seu caso, pode demorar muito mais tempo, claro. Você pode estimar experimentalmente o número de épocas para que você possa obter o resultado com a precisão especificada e cumprir o limite de tempo.

 
Andrey Dik:

O algoritmo em si funciona e não precisa (a menos que você seja muito exigente) de algum ajuste fino, mas a seção de código com o zz perfeito poderia, em princípio, ser usada como uma simulação de comércio com algum ajuste fino.

Dentro de alguns dias? - Não, acho que consegues um bom resultado muito mais rápido, em horas ou até em minutos. No artigo, a busca foi algo como alguns segundos, mas havia 100 barras. No seu caso, pode demorar muito mais tempo, claro. Você pode ajustar experimentalmente o número de épocas para que você possa obter o resultado com a precisão desejada e atender aos requisitos de tempo.

Então. Obrigado. Vou tentar. Quero gerar entradas para barras minúsculas sobre todo o histórico. E depois vou colocá-los na minha experiência.

Bom trabalho que fizeste. E o fato de que as entradas ideais não coincidem necessariamente com a lógica ZZ é uma conclusão não trivial e importante.

 
Alexey Burnakov:

Está bem. Obrigado. Vou tentar. Quero gerar entradas para as barras de minutos de toda a história. E depois vou colocá-los na minha experiência.

Bom trabalho que fizeste. E o fato de que as entradas ideais não coincidem necessariamente com a lógica ZZ é uma conclusão não trivial e importante.

E obrigado. Poucas pessoas prestaram atenção à cara ousada, por alguma razão...

Eu gostaria de acrescentar. O artigo otimiza o PPI considerando o spread médio de um instrumento, mas agora estou inclinado a pensar que a otimização deve ser feita sem o spread, enquanto o spread tem que ser considerado durante os testes de aprovação.

 
Andrey Dik:

Obrigado também. Poucas pessoas prestam atenção à cara ousada, por alguma razão...

Eu gostaria de acrescentar. O artigo otimiza o WPI levando em conta o spread médio do instrumento, mas agora estou inclinado, ou melhor, seguro, a acreditar que a otimização deve ser realizada sem o spread, enquanto as operações de teste devem ser realizadas com o spread.

Para otimizar "em cada barra" o spread tem que ser levado em conta, é claro. Caso contrário, um acordo será executado em todos os bares na direcção do próximo preço aberto. O spread torna a tarefa não-linear e define a configuração ideal do negócio.
 
Alexey Burnakov:

LSTM que vamos ver mais tarde.

Por enquanto, meu colega e eu chegamos a R^2 0,2 no teste. Alguns filtros de convolução e alguns neurônios em uma camada totalmente conectada. A idéia é que a recorrência não é necessária lá. O que nós precisamos é de uma extracção correcta das características.

Os resultados até agora são os seguintes para o meu problema (todas as pontuações R^2 no conjunto de testes):

ARIMA: 0,14

MLP (totalmente ligado NN): 0,12-0,15

GBM: 0.1

Rede Convolucional (simples, não bem desenvolvida): pelo menos 0,2

Assim, a dependência simulada acabou, de facto, por não ser tão simples e os métodos populares falham. Nós vamos melhorar a rede convolucional.

Se alguém tiver tempo para tentar resolver o problema (com alguma rede recorrente), por favor, compartilhe o resultado.

 
Alexey Burnakov:

Até agora os resultados para o meu problema são os seguintes (todas as estimativas R^2 no conjunto de teste):

ARIMA: 0,14

MLP (totalmente ligado NN): 0,12-0,15

GBM: 0.1

Rede Convolucional (simples, não bem desenvolvida): pelo menos 0,2

Assim, a dependência simulada acabou, de facto, por não ser tão simples e os métodos populares falham. Nós vamos melhorar a rede convolucional.

Se alguém tiver tempo para tentar resolver o problema (com alguma rede recorrente), por favor, compartilhe os resultados.

Eu também trabalhei no meu problema. Eu também usei NS convolucional com camadas totalmente conectadas no topo.

O melhor resultado que obtive para o R^2 no teste foi 0,23 .

Parece ser o tecto. Aumentar a complexidade da rede não dá mais nada. Mas a saída da rede não é perfeita. Este é um gráfico de pontos da resposta contra o modelo. Uma nuvem estreita e inclinada é esperada. Na verdade, pode-se ver que a complexa função de resposta não é totalmente modelada pela rede (os saltos não são reconhecidos). A função produzida pela rede é muito mais suave do que a que eu expus.


Talvez as pessoas familiarizadas com a NS tenham algumas ideias sobre como uma função tão complexa poderia ser modelada (exemplo):

Aumentar o número de camadas, neurónios?

Na verdade, sem a preparação de variáveis de entrada, todos os métodos populares se fundiram. Convert pode realmente extrair as características necessárias (por integração, diferenciação, suavização não linear) e os NS já aprendem normalmente com eles. Esse é o poder da convolução.

A propósito, o Sr. Perervenko não disse nada sobre este tipo de redes no seu artigo sobre redes neurais. Bem, encontrei apenas uma menção em todo o artigo. E seria possível revelar a questão da aplicabilidade às séries temporais (com ponderação).

Alexey

 

Você, o mais importante, dá mais informações.

E exemplos de treino.

 
Vadim Shishkin:

Você, o mais importante, dá mais informações.

E exemplos de treino.

Já chega.
 

Quanto mais neurônios na camada oculta - a função mais complexa pode ser descrita pelo neurônio, você precisa de mais camadas e neurônios escondidos neles.

Mas então o problema será que o neurônio usa adições e multiplicações consecutivas (e por exemplo sigmóides para a função de ativação) para descrever o alvo, ou seja, você obviamente não terá sua função original, mas algum tipo de aproximação. E pode acontecer que esta aproximação se lembre de algumas características nos dados de treinamento, por isso não funcionará corretamente com novos dados. Portanto, às vezes você precisa parar o treinamento, ver se o erro na amostra de teste diminuiu, e continuar o treinamento se tudo estiver bem. Em algum momento o erro nos dados de teste começará a crescer, então o treinamento deve ser completamente interrompido.

Além disso, a saída de um neurônio é limitada pela função de ativação. Para popular - sigmoid é (0;1), relu é [0;inf). Os valores alvo precisam ser escalados para um intervalo diferente, seus outputs no intervalo (-7;7) são simplesmente inalcançáveis para muitos pacotes.

Razão: