Redes neurais e comércio. Implementação prática

A moda de negociação está passando por altos e baixos, juntamente com a taxa de câmbio do Bitcoin. Agora, este tópico está em um ponto baixo após um crescimento incrível em 2018. Muitos durante esse tempo conseguiram se familiarizar com as trocas de criptomoedas - eles se aprofundaram no assunto, estudaram, negociaram, perderam dinheiro e até ganharam algumas vezes. Como resultado, a moda passou, mas a experiência permaneceu, embora negativa. As palavras “long”, “short”, “spread”, “diver” podem ser ouvidas daqueles de quem você certamente não espera isso. Mas não apenas o comércio de “mãos” atraiu a atenção, também existem bots de negociação. O que temos nesta área, qual é a experiência dos últimos 2-3 anos falando?

Infelizmente, também não há nada de bom nessa área. Existem muitas ferramentas para escrever bots de negociação, mas não existem estratégias estavelmente lucrativas. Na melhor das hipóteses, uma solução funcional precisa ser constantemente atendida por um par de configurações de comerciante-programador que mudam para o mercado atual. O resultado padrão após conectar um bot totalmente autônomo ao depósito é drenar o depósito.

A última esperança permanece - redes neurais. Isso certamente deve acontecer, porque a rede neural aprende como pessoa e se adapta ao mercado. Como você está nessa área? Bem ... você adivinhou. Tudo está ruim, fala-se muito, mas não há soluções funcionais. Tudo está muito ruim! Um exemplo vívido disso é a loja de aplicativos da comunidade MQL5. Por trás da marca MQL5 há uma plataforma de negociação profissional - MetaTrader5, além de uma enorme comunidade de comerciantes e programadores. Portanto, nesta loja, há uma seção para soluções baseadas em redes neurais, existem muitos bots, mas nenhum real. Adicionar um bot usando uma rede neural é proibido pelas regras. É difícil de acreditar, mas é. A proibição de conectar uma API externa exclui a possibilidade de usar redes neurais, e as ferramentas incorporadas no MQL5 não funcionam na prática. Eu discuti esse problema com o suporte técnico do MQL5,Não recebi uma resposta clara. Como resultado, não há nada realmente pronto no mercado, as soluções da série "ensine a si mesmo", apresentadas no github, não são levadas em consideração.

Ok, estou terminando a introdução, estou começando a trabalhar. Consegui treinar uma rede neural, existem resultados dignos no mercado real. Além disso, sem entrar em detalhes, descreverei como isso foi feito.

O primeiro e principal erro de quem está tentando ensinar a rede neural a negociar é o pensamento comercial sobre o mercado. Normalmente, um profissional tenta implementar uma solução baseada em redes neurais junto com um programador que já escreveu bots. O algoritmo do bot de negociação resolve o problema de encontrar o ponto de entrada correto para a posição e determinar o "take" e "stop". Se você tiver essa tarefa em mente ao projetar uma rede neural, nada funcionará. Você pode escolher infinitamente opções engenhosas para inserir dados, aplicar ou não fornecer indicadores, experimentar diferentes tipos de redes neurais, substituir muletas como treinamento apenas em determinadas áreas ou treinar mostrando apenas padrões conhecidos. Não funciona.

Com uma rede neural, você precisa parecer uma criança, olhar o mundo através dos olhos dela e começar com tarefas simples. A pergunta mais simples que pode ser feita é "onde o preço passará por X velas, para cima ou para baixo?". Não importa quanto o preço muda e não importa que a resposta não possa ser transformada em uma estratégia de negociação. Esquecemos a negociação, agora a principal tarefa é educar a rede pelo menos alguma coisa, basta obter a resposta certa.

Eu resolvi essa tarefa inicial após 100.500 seleções de entrada. Utilizou o TensoFlow plus Keras, uma rede de Sequental Dense. Conjunto de dados de entrada para 200 a 300 mil exemplos, recurso de vetor de entrada 250 a 350. A forma da resposta segue a rede colocada da pergunta - a classificação binária “up” ou “down”. A entrada foi preparada pelo bot no MQL5. Um bot percorrendo uma história forma um arquivo csv comum, cada linha é um vetor. No final de cada vetor, a resposta correta é 1: 0 se estiver ativo, 0: 1 se estiver inativo.

Aqui estão algumas sugestões para quem tenta:

  1. Ele estuda bem dentro da previsão de 15 minutos a 60 minutos. Em um período mais curto, o caos do movimento dos preços cresce, em um período maior a influência externa aumenta - notícias e assim por diante, 15 a 60 minutos, a zona mais "técnica".
  2. BTCUSD, EURUSD. — .
  3. « ? ?». , .
  4. , 50% . , .

Você precisa entender com qual material estamos lidando. O mercado é um caos de 95%. Quando enviamos dados de treinamento para a rede e indicamos a resposta correta, estamos realmente alimentando o caos. É como tentar treinar uma rede neural para distinguir um gato de um cachorro, e no treinamento para mostrar borboletas, estrelas e signos do zodíaco, não haverá resultado. Por isso, está aqui, mas, felizmente, o mercado fornece cerca de 5% dos padrões realmente funcionais que a rede pode capturar e isso será refletido em suas respostas. Portanto, preste atenção à análise dos resultados do teste.

Usando essa abordagem, obtive o seguinte resultado:
em cerca de 2% das respostas, a rede adivinha o movimento adicional na proporção de 2 respostas corretas para 1 incorreta. Ao testar no mercado real, é exatamente isso que acontece, mas surge outro problema. Afinal, temos apenas 2% das perguntas respondidas, ignore o resto. Essa. Lançamos um neuro no mercado real em um período de 5 minutos e esperamos ... a 2% - apenas 50 velas serão respondidas, uma resposta em 4 horas! E o que fazer com isso? Bem, se a resposta foi "comprar / vender", 6 transações por dia são normais, e aqui o resumo "para cima / para baixo" e, em seguida, impreciso, completa decepção.

Como resultado, resolvi esse problema com relativa facilidade - a cada 5 minutos, você precisa entrevistar não um modelo, mas 20 a 30 modelos, como resultado das respostas que serão suficientes. Os modelos são treinados em diferentes dados de entrada e, consequentemente, são treinados em diferentes padrões. Na prática, verifica-se que os modelos buzinam com velas diferentes, ativando-se juntos apenas em locais óbvios e previsíveis e não se sobrepõem.

Para resumir, agora há algo que pode ser lançado no mercado real e ter sinais de subida / descida com a mineração média. Já é mais divertido, mas o sentido prático ainda é zero.

Algumas palavras sobre a implementação. Funcionou para mim em um monte de MQL5 e Keras. Um bot lançado no MetaTrader5 em cada castiçal preparava dados para uma rede neural e passava por um soquete para um script python, que por sua vez pesquisava todos os modelos e, quando ultrapassava um limite aceitável, enviava um sinal para o canal Telegram.

Portanto, o circuito funciona, mas não pode ser aplicado. Não foi possível adicionar sinais a alguma estratégia. A principal desvantagem é a discrição das respostas. A resposta é um evento ao qual você precisa de alguma forma reagir - observe a situação do mercado, pense se a rede está certa ou não, etc. Em uma vela, um modelo poderia sinalizar para cima, e outro para baixo, e em qual acreditar? Como resultado, nasceu a idéia de abandonar o limiar para passar a resposta e começar a respeitar cada resposta da rede, embora com um baixo grau de confiança. Se você começar a calcular todas as respostas em uma única opinião comum e considerar isso como a resposta da rede, a resposta se tornará uma qualidade completamente diferente. Nesse caso, o conhecimento de todos os modelos começa a tomar forma, e isso é uma enorme quantidade de treinamento conjunto.

Por quanto tempo, brevemente, mas depois de todas as alterações, comecei a receber respostas únicas da rede neural para cada vela, expressas como uma porcentagem do tempo de trabalho esperado de -100% a + 100%. O sinal reflete a direção esperada para cima / baixo. Tornou-se claro que agora há um sentido em todas as respostas. Funciona! Eu próprio tenho experiência em negociação e vi como o comportamento da rede diante dos meus olhos se tornou significativo. Às vezes, sua lógica era compreensível, às vezes não, mas suas respostas sempre sentiam sua própria visão, muitas vezes paradoxal, do mercado. Além disso, verificou-se que quanto maior a confiança da rede, mais próximo o desenvolvimento esperado da hora certa e vice-versa. A baixa confiança parecia dizer "o que acontecerá em 15 minutos, eu não sei, mas a tendência geral está em alta".

Desse lugar, percebi que tentar formalizar tudo isso em sinais de compra / venda é como martelar pregos com um microscópio. O que era necessário era algum tipo de ferramenta para visualizar sinais de redes neurais - uma exibição gráfica do nível de "confiança" em cada vela. Uma ampla gama de ferramentas MQL5 tornou possível colocar tudo isso no Expert para MetaTrader5. O "especialista" por meio da API recebe as respostas da rede neural e está envolvido apenas na renderização. Aqui está um exemplo de seu trabalho no BTCUSD M1: A

imagem

área colorida no topo é a previsão "para baixo", a área abaixo é a previsão "para cima", a espessura é o grau de confiança.

Nesta fase, a qualidade da previsão não importa, é importante que a rede neural demonstre uma opinião bastante adequada sobre a situação do mercado. Você sempre pode atualizar a rede ainda mais, o principal é que funciona!

Como resultado, hoje existe o Expert para MetaTrader5 com dois tipos de previsões - curto e longo prazo. As estatísticas estão se acumulando gradualmente, há feedback dos operadores. O resultado obtido inspira mais trabalho, agora precisamos chegar às queridas equipes de "compra / venda". Isso pode ser feito aumentando significativamente a qualidade da previsão. Então eu vejo este caminho de desenvolvimento:

  1. É necessário preparar uma dúzia de previsões no intervalo entre 15 e 60 minutos. Essa. comece a prever “up / down” por 20, 25, 30, 35 minutos e assim por diante até 60. Cada previsão, lembro-me, é construída a partir das respostas de cerca de 20 modelos.
  2. Tendo esse volume de informações em cada minuto, é possível e necessário analisá-lo com outra rede neural. A conexão entre previsões em diferentes intervalos de tempo pode ser completamente não trivial; portanto, uma rede neural aqui será apropriada.
  3. O conjunto de dados para esta rede neural não será tão barulhento quanto o de seus camaradas mais jovens, portanto, deve ser treinado não em um "up / down" banal, mas em prever a força do movimento de um ativo, e essa é uma saída direta para "comprar / vender".

É tudo o que eu queria lhe contar hoje. O trabalho continua, acho que haverá mais artigos.

A propósito, este Expert para MetaTrader5 é distribuído gratuitamente. Se você quiser ver o trabalho de uma rede neural no mercado real, entre em contato.

All Articles