Aplicação prática de redes neurais no trading

8 outubro 2020, 07:34
Andrey Dibrov
0
1 025

Introdução

Neste artigo, quero levantar o tópico de como usar redes neurais ao criar robôs de negociação, no seu sentido mais restrito. Já de forma mais ampla, desejo tentar responder a uma série de perguntas e resolver alguns problemas:

  1. Será possível construir um sistema lucrativo usando aprendizado de máquina?
  2. O que podemos obter de uma rede neural?
  3. Qual o fundamento lógico por trás do treinamento de redeis neurais para tomada de decisões.
  4. Uma rede neural é algo difícil ou simples?
  5. Como integrar uma rede neural num terminal de negociação?
  6. Como testar uma rede neural? Quais as etapas de teste.
  7. Sobre amostras de treinamento.


1. Será possível construir um sistema lucrativo usando aprendizado de máquina?

Provavelmente, todo novato que chega ao mercado de moedas e tenta realmente operar nele, sem ter nenhum sistema, pega uma folha de papel e desenha uma tabela com os indicadores de que gosta. Em seguida, em frente a cada um desses indicadores, coloca mais e menos, setas ou porcentagens indicando o movimento dos preços, com base no gráfico do indicador no terminal. Depois, tira conclusões baseadas nas suas observações e decide entrar no mercado numa determinada direção, porém, se continuasse ainda mais longe, poderia até manter essa decisão ou, inclusive, ficar fora dele.

É neste ponto que começamos a pensar no que acontece na rede neural mais perfeita, no nosso cérebro. Tudo é bastante simples: após observar esses indicadores, formamos uma imagem em nossa cabeça de um indicador comum que nos dá um sinal para tomarmos uma decisão. Além do mais, imaginemos que no indicador é formada uma cadeia de sinais. E aqui temos que pensar em que se estamos estudando indicadores num determinado momento e olhamos para o passado focando no máximo de vários períodos, como podemos abordar esse estudo para construir um indicador único que possa ser otimizado mais para frente.

Assim, obtemos a resposta à segunda pergunta, o que podemos obter de uma rede neural depois do seu treinamento? Na verdade, a questão precisa ser reformulada assim: o que queremos da rede neural depois do seu treinamento? Se pensarmos de maneira lógica, podemos responder à primeira pergunta afirmativamente, uma vez que é técnica e programaticamente possível fazer isso. Você pode ver como isso é implementado na prática no vídeo do meu canal https://youtu.be/5GwhRnSqT78. Também assista a uma playlist com um teste online de módulos de rede neural no mesmo canal https://youtu.be/3wEMQOXJJNk


2. Qual o fundamento lógico por trás do treinamento de redeis neurais para tomada de decisões

Antes de embarcar no desenvolvimento de qualquer sistema de negociação, fazemos a pergunta: com base em que princípios funcionará esse sistema? Temos dois princípios fundamentais para usar flats e continuação da tendência. Não consideraremos derivados mais restritos, negociação intradiária, com base em dados fundamentais, notícias, aberturas de mercado, etc. Tive que ver descrições de produtos de redes neurais, em que seus autores, nos exemplos de uso, ofereciam previsão de preços de ações, moedas, etc.

Gráfico de resposta de rede neural treinada com base na previsão do preço

1. Gráfico de resposta de rede neural treinada com base na previsão do preço

Após examinarmos o gráfico de resposta de uma rede neural treinada para prever preços, vemos que, embora repita o gráfico de preços, está um passo atrás. Adicionalmente, isso não depende de se estamos prevendo dados de preços ou derivados. Com base nisso, podemos chegar a uma conclusão, como por exemplo, “o que é ontem para nós é hoje para uma rede neural”. Provavelmente, você concorde comigo que aqui, em princípio, não se pode falar de algo que preste. No entanto, quero notar que podemos usar esta variante, mas, com uma certa modificação.

Por outra parte, certamente gostaríamos de partir do postulado: “o que é hoje para uma rede neural é amanhã para nós”, e ter algum tipo de máquina do tempo. Porém, entendemos que a melhor rede neural é o nosso cérebro. E podemos usar este postulado com no máximo 50% de sucesso (se falarmos da probabilidade sim ou não), ou ainda pior. Mas há também uma terceira variante: “o que é ontem para uma rede neural é hoje para nós”. Vejamos o que significam para nós esses postulados durante a negociação:

  • primeiro — realizamos um trade e amanhã obtemos uma resposta da rede neural: foi aberto na direção certa ou não. Embora já saibamos isso sem usar uma rede neural.
  • segundo — recebemos informações da rede neural, realizamos um trade e amanhã vemos se a recomendação era correta ou não.
  • terceiro — recebemos informações da rede neural quando precisamos realizar determinado trade, ou melhor, ela informa se precisamos realizar um trade agora especificando a direção.

Naturalmente, descartamos o primeiro postulado de uma vez. Mas o segundo e o terceiro são adequados para negociação. No entanto, o segundo postulado seria olhar para o futuro. Esta variante de negociação é exagerada porque recebemos um sinal da rede neural num determinado momento, por exemplo, no fechamento do pregão com uma previsão de como será fechado no dia seguinte (neste momento não estamos interessados no movimento do preço antes do fechamento do trade). Nesta fase é difícil implementá-lo para negociações puramente mecânicas (em negociações lucrativas). O sentido por trás da terceira variante é que rastreamos a resposta da rede neural durante o pregão e compramos ou vendemos, interpretando-a. E aqui precisamos entender o fundamental:

ual das variantes que podemos implementar depende de como treinamos a rede neural. Quiçá você concorde comigo que a terceira variante é, contudo, mais fácil de implementar. Se na segunda usarmos alguma informação com o objetivo de obter o resultado do dia seguinte, isto é, o seu fechamento (o dia é escolhido como exemplo, sendo que pode haver algum outro período), já na terceira variante usamos as informações que vieram uma etapa antes tomar uma decisão, como qual será a direção do preço neste momento. Em meus sistemas, fico com a terceira variante.


3. Uma rede neural é algo difícil ou simples? 

Se estamos falando sobre o desenvolvimento de um sistema de negociação usando redes neurais, a seguinte questão surge naturalmente: de onde obtemos a própria rede neural, como treiná-la e integrá-la ao terminal de negociação. Nesta fase, ainda uso redes neurais prontas, como "NeuroSolutions" e Matlab. Essas plataformas permitem que você escolha a rede neural que mais lhe convém, para treiná-la e gerar um arquivo executável com uma interface que lhe convier. Como resultado, o próprio programa de rede neural pode ter a seguinte aparência:

Módulo de rede neural criado em ambiente Matlab

2. Módulo de rede neural criado em ambiente Matlab

ou esta aparência:

Módulo de rede neural desenvolvido em ambiente Neuro Solutions

3. Módulo de rede neural desenvolvido com Neuro Solutions

Ao estudar as possibilidades de uso de redes neurais em mercados financeiros, cheguei à conclusão de que as redes devem ser usadas não apenas como o principal provedor de sinais para a tomada de decisão, mas também como uma excelente oportunidade para livrar parte do software do EA do terminal de negociação. Imagine que você decida escrever um Expert Advisor com uma dúzia de indicadores, e estes têm parâmetros diferentes, além disso, eles precisarão ser analisados e comparados usando certa profundidade de tempo, mais você usará várias janelas com diferentes períodos... você terá um Expert Advisor bastante sobrecarregado para usar na negociação real e, mais importante, será difícil de testar.

Mas podemos mudar a função do terminal para calcular indicadores para uma rede neural, treinando-os de uma determinada maneira, e depois treinar a rede neural usando esses indicadores. Ou seja, precisamos transferir do Expert Advisor para o módulo de rede neural apenas os dados de preços relativos que são usados nas fórmulas do indicador. E posteriormente aceitar da rede neural vários “uns” e “zeros” e, depois de os comparar, tomar uma decisão.

Vejamos um exemplo de um oscilador estocástico para ver o que temos no final. Usaremos esses dados de preços como entradas e, como exemplo de treinamento, usaremos o próprio indicador.

Dados de preços

4. Dados de preços

FileWrite(handle,
                   
                   iClose(NULL,0,i+4)-iLow(NULL,0,i+4),
                   iHigh(NULL,0,i+4)-iClose(NULL,0,i+4),
                   iHigh(NULL,0,i+4)-iLow(NULL,0,i+4),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+4))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+4)),
                   
                   iClose(NULL,0,i+3)-iLow(NULL,0,i+3),
                   iHigh(NULL,0,i+3)-iClose(NULL,0,i+3),
                   iHigh(NULL,0,i+3)-iLow(NULL,0,i+3),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+3))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+3)),
                   
                   iClose(NULL,0,i+2)-iLow(NULL,0,i+2),
                   iHigh(NULL,0,i+2)-iClose(NULL,0,i+2),
                   iHigh(NULL,0,i+2)-iLow(NULL,0,i+2),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+2))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+2)),
                   
                   iClose(NULL,0,i+1)-iLow(NULL,0,i+1),
                   iHigh(NULL,0,i+1)-iClose(NULL,0,i+1),
                   iHigh(NULL,0,i+1)-iLow(NULL,0,i+1),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+1))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+1)),
       
                   iClose(NULL,0,i)-iLow(NULL,0,i),
                   iHigh(NULL,0,i)-iClose(NULL,0,i),
                   iHigh(NULL,0,i)-iLow(NULL,0,i),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i)),
 
                   iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,i),
                   TimeToStr(iTime(NULL,60,i)));

Depois de treinar a rede neural, teremos o seguinte resultado.

Resposta da rede neural

5. Resposta da rede neural

Para um melhor estudo visual, vamos transferir esses dados como um indicador para o terminal de negociação.

Indicador estocástico e de rede neural

6. Indicador estocástico e de rede neural

Na janela superior vemos o indicador construído pelo terminal, e abaixo, pela rede neural. Mesmo visualmente, podemos entender que o indicador construído pela rede neural tem todas as características de um indicador padrão (níveis, interseções, reversões, divergências, etc). Embora não tenhamos usado nenhuma fórmula complexa para treinar a rede.

Assim, podemos desenhar esse diagrama de blocos do sistema de negociação.

Diagrama de blocos do sistema de negociação

7. Diagrama de blocos do sistema de negociação

Os blocos “MT4” são nosso Expert Advisor. O arquivo de preços é “Input_mat”. O arquivo de sinal é “Open1,2,3”. Exemplos desses arquivos são fornecidos na próxima seção.

O trabalho fundamentar que devemos fazer tem a ver com os blocos “Net1” e “Net2”. Ao prepará-los, precisaremos usar vários scripts e EAs para aprontar dados históricos e testar sinais. Mas, na verdade, quando nosso sistema estiver pronto como um conjunto, não tardaremos muito a modificá-lo, desenvolvê-lo ou experimentar com ele. Para ver um exemplo, você pode assistir ao vídeo https://youtu.be/k_OLEKJCxPE. Por exemplo, a preparação dos arquivos, o treinamento “Net1” e “Net2” e a primeira fase de testes para podermos otimizar nosso sistema levam 10 minutos.


4. Como integrar uma rede neural num terminal de negociação?

A integração de uma rede neural e um terminal de negociação não é bem um problema. Resolvi essa questão transferindo informações por meio de arquivos criados pelo terminal e pelo programa de rede neural. Se alguém disser que isso desacelera o desempenho do sistema na tomada de decisões, irei me concentrar nas principais vantagens desse método para transferência de informações. Em primeiro lugar, a informação transferida pelo terminal é mínima, apenas algumas dezenas de bytes. Observe a linha do arquivo que é escrita pelo terminal.

Arquivo de preços normalizados

8. Arquivo de preços normalizados

Embora o próprio método de transmissão de informações programaticamente nos permita abrir apenas no próximo tick após a chegada de um sinal da rede neural. Mas se o sistema não usar momentos de super curto prazo para realização de trades, isso não será essencial. Olhando para frente, gostaria de notar que neste artigo eu analiso o sistema “segundo os preços de abertura”. Além disso, com base no acima exposto, chegamos à conclusão de que sistemas com esse método de transferência de informações requerem testes com base em pontos de verificação ou em todos os ticks. Os testes de sistemas baseados em redes neurais de acordo com pontos de verificação e todos os ticks são quase idênticos. Embora antes, ao desenvolver robôs de negociação tradicionais, enfrentei certo problema relacionado com uma deterioração significativa nos resultados de negociação ao mudar para o teste com base em todos os ticks. 

Mas a principal vantagem desse método de transferência de informações é que podemos controlar os dados transferidos e recebidos em cada estágio. Eu considero esta uma das bases para obter mais trades bem-sucedidos com ajuda de uma rede neural. E a aparente morosidade de preparar o próprio sistema de rede neural, por consequência, torna-se uma vantagem no trabalho real, pois reduziremos ao mínimo a probabilidade de obter um erro de programa ou erro na estrutura lógica do sistema. Ainda assim, o próprio sistema requer um teste triplo passo a passo antes de usá-lo. Discutiremos isso com mais detalhes posteriormente.

Na imagem abaixo vemos os arquivos “Input_mat” e “Bar”. Esses arquivos são gerados pelo terminal de negociação. Os arquivos “Open1,2,3” são gerados pelo programa de rede neural. O único pequeno inconveniente é que, no programa de rede neural, precisamos definir explicitamente os caminhos para esses arquivos com base na qualidade do EA, isto é, testando-o ou realmente negociando com ele.

Arquivos gerados pelo módulo de rede neural e pelo EA

9. Arquivos gerados pelo módulo de rede neural e pelo EA

O arquivo “Bar” é auxiliar e serve de contador.

Arquivo Bar

Nos arquivos “Open1,2,3” recebemos diretamente a resposta da rede neural. A primeira linha é a resposta anterior. A segunda é a resposta em tempo real. Este formato é um caso especial. Pode ser diferente dependendo das condições de negociação, bem como do próprio número de arquivos de resposta. Nesse caso, isso se deve ao fato de o próprio módulo da rede neural utilizar três redes treinadas em intervalos de tempo diferentes.

Resposta do módulo de rede neural em arquivos Open1,2,3

10. Resposta do módulo de rede neural em arquivos Open1,2,3


5. Como testar uma rede neural? Etapas de teste

Ao preparar sistemas de negociação baseados em redes neurais, uso três estágios de teste. Quanto ao primeiro estágio, eu o chamo de teste rápido. Esta é a etapa principal para preparação do sistema em termos de desempenho geral. Nesta fase, podemos otimizar o sistema e não demoramos muito para otimizá-lo. Aqui, usamos um script ou um Expert Advisor para preparar um arquivo de dados históricos após o "histórico" com base no qual treinamos a rede neural e segundo o momento atual. Depois, a partir desses dados, recebemos respostas da rede por meio de um script vindo do ambiente Matlab e construímos um indicador a partir deles. Com a ajuda deste indicador, otimizamos nossas respostas da rede neural para a entrada e saída do mercado. A imagem abaixo mostra um exemplo desse indicador. Este indicador é uma interpretação de 52 derivados de 12 indicadores personalizados. Embora possam ser indicadores padrão do terminal.

Indicador baseado nas respostas da rede neural

11. Indicador baseado nas respostas da rede neural

Em seguida, podemos otimizar nossa estratégia de negociação.

Resultados do teste do indicador de respostas da rede neural

12. Resultados do teste de respostas da rede neural

O segundo estágio dos testes consiste em treinarmos e escrevermos redes neurais no ambiente Matlab usando a Neural Network Toolbox.

Neural Fitting

13. Neural Fitting


Redes neurais resultantes

14. Redes neurais resultantes


Obtemos uma resposta dessas redes neurais na janela de comando.

Obtendo uma resposta das redes neurais

15. Obtemos respostas das redes neurais


Assim, teremos mais um indicador, que deve ser idêntico ao anterior. Naturalmente, o teste da estratégia com base nele deve ser idêntico.

Se tivermos sucesso, podemos seguir em frente.

E testaremos essas redes neurais usando o script do módulo de rede neural, que usaremos no sistema. Vamos testá-los com base em qualquer intervalo de tempo usando pontos de controle. Se este teste coincidir com o mesmo intervalo de tempo do teste do indicador anterior, estaremos nos movendo na direção certa. Executamos este script no ambiente Matlab. Ao mesmo tempo, iniciamos nosso Expert Advisor no terminal de negociação.

Excecutamos o script no ambiente de trabalho Matlab

16. Excecutamos o script no ambiente de trabalho Matlab

Iniciamos o Expert Advisor no terminal

17. Iniciamos o Expert Advisor no terminal

Como resultado, temos algo assim.

Resultado do teste de script Matlab e EA em MT4

18. Resultado do teste de script Matlab e EA em MT4

Em seguida, precisamos projetar a interface do usuário, compilar o módulo de rede neural e testá-lo da maneira anterior.


Testamos o módulo de rede neural compilado

19. Testamos o módulo de rede neural compilado

Se obtivermos um resultado semelhante ao anterior, podemos começar a negociação real usando nosso sistema de rede neural.



5. Sobre amostras de treinamento


Dependendo do tipo de amostras de treinamento prepararemos a rede neural, receberemos diferentes indicadores de resposta da rede. Desse modo, seremos capazes de construir várias estratégias de negociação. Já uma combinação de estratégias diferentes nos dará um resultado final mais estável. Apresentei uma variante nas seções anteriores. Nelas, fizemos uma escolha com base nos pontos extremos do período de negociação. Vou dar outro exemplo.

Indicador de resposta de uma rede neural treinada com base numa amostra diferente

20. Indicador de resposta de uma rede neural treinada com base numa amostra diferente

Nesse caso, treinei duas redes neurais. Um para comprar, outra para vender. O treinamento foi realizado com base em amostras quando havia sido atingido o preço mínimo e o preço máximo ainda não. e vice versa. Nos dois indicadores mostrados na imagem são interpretados doze indicadores personalizados. Os máximos da linha vermelha aparecem quando é atingido o preço mínimo, já os máximos cinzas, quando atingido o preço máximo. Como podemos ver, agora é possível otimizar esses indicadores individualmente ou em pares. Por exemplo, na interseção entre eles, na diferença de valores, na interseção de certos níveis, etc.

Quiça concorde comigo que doze indicadores são muito mais difíceis de otimizar.


Fim do artigo

Muitos artigos foram escritos sobre o uso de redes neurais no trading. Há muita pouca literatura em que se fale plenamente acerca deste tópico para construir um sistema com base em redes neurais e aplicá-lo. Também, muitas das descrições são destinadas principalmente a usuários com conhecimentos especiais em programação. Este tópico é difícil de desvendar num artigo, mesmo em vários. Mas tentei fazer isso sem empilhar material teórico e especial no livro “Нейросетевая торговая система. MetaTrader 4 + MATLAB. Пошаговая разработка. Segunda edição”.


Traduzido do russo pela MetaQuotes Software Corp.
Artigo original: https://www.mql5.com/ru/articles/7031

Conjunto de ferramentas para marcação manual de gráficos e negociação (Parte I). Preparação - Descrição da Estrutura e Classe Auxiliar Conjunto de ferramentas para marcação manual de gráficos e negociação (Parte I). Preparação - Descrição da Estrutura e Classe Auxiliar

Neste artigo, começaremos a ver um conjunto de ferramentas para marcação gráfica usando atalhos de teclado. É bastante conveniente: clicaremos num botão e aparecerá uma linha de tendência, clicaremos noutro e aparecerá um leque de Fibonacci com os parâmetros desejados. Também poderemos alternar timeframes, mudar a ordem das "camadas" de objetos ou remover todos os objetos do gráfico.

Métodos para localizar zonas de sobrecompra/sobrevenda. Parte I Métodos para localizar zonas de sobrecompra/sobrevenda. Parte I

As zonas de sobrecompra/sobrevenda caracterizam uma determinada situação do mercado que se distingue por um enfraquecimento da dinâmica dos preços dos instrumentos financeiros. Além disso, essa mudança negativa da dinâmica é mais pronunciada na parte final da tendência, independentemente do tamanho desta última. E como o lucro depende diretamente da capacidade de cobrir a máxima amplitude da tendência, identificar com precisão essas zonas é o mais importante ao negociar qualquer instrumento financeiro.

Aplicação prática de redes neurais no trading. Embarquemos na prática Aplicação prática de redes neurais no trading. Embarquemos na prática

Este artigo apresenta uma descrição e instruções para o uso prático de módulos de redes neurais (MRN) na plataforma Matlab. Também aborda os principais aspectos para construção de um sistema de negociação usando o MRN. Para realizar uma apresentação concisa deste artigo, tive que modernizá-lo um pouco de forma a combinar várias funções da MRN num programa.

Conjunto de ferramentas para negociação manual rápida: funcionalidade básica Conjunto de ferramentas para negociação manual rápida: funcionalidade básica

Atualmente mais e mais traders estão mudando para sistemas de negociação automáticos que ou requerem configuração inicial ou estão totalmente automatizados. No entanto, ainda existe uma parte considerável de traders que negociam manualmente à moda antiga, Neste artigo, criaremos um conjunto de ferramentas para negociação manual rápida usando teclas de atalho e realizando ações de negociação típicas com um clique.