Redes neurais e negociação. Parte 2: kit DIY

No último artigo, descrevi como consegui obter previsões de tendências da rede neural no mercado real. O artigo despertou interesse, mas descobriu-se que a pergunta "Onde estão as provas?" Sem resposta. Na verdade, o tema das redes neurais no comércio é muito discutido, existem publicações, ramos em fóruns profissionais são dedicados a ele. Mas não importa o quanto você mergulhe no assunto, não importa o quanto você se comunique com especialistas, fica a impressão de que tudo isso é algum tipo de ilusão evasiva. Não há nada realmente funcionando, nada que, mesmo remotamente, mas pudesse realmente conectar a rede neural e a previsão do movimento de preços. Daí a opinião bem fundamentada da comunidade de que o movimento dos preços não pode ser previsto em princípio, e toda essa conversa é sobre nada.



Proponho dissipar essas dúvidas de uma vez por todas e transferir o discurso da área de “pode prever ou não” para a área de “prevê bem ou mal”. E faremos de forma simples, rápida e visual. Vou dar uma ferramenta pronta e todos podem pegar o resultado em seu computador. O projeto gratuito GoogleColaboratory vai nos ajudar nisso. Esta é uma plataforma aberta para desenvolvimento colaborativo, todos os cálculos são feitos nos servidores do Google, toda a interação é por meio do navegador, não é necessário registro.



O código do nosso trabalho está aberto e já carregado no GoogleColab. Os resultados do treinamento de uma rede neural para cada um serão individuais. Isso ocorre porque os pesos iniciais são distribuídos aleatoriamente e os resultados são ligeiramente diferentes. Além disso, tenha em mente que o histórico de cotações é um dado muito barulhento, então a qualidade do treinamento é baixa, mas suficiente para ver como a rede neural fará a previsão. A previsão deve estar aproximadamente no nível de um bom indicador.



O único lugar onde encurtaremos nosso caminho é coletando dados sobre o histórico de um par de negociação. A coleta é realizada por um aplicativo para MetaTrader5, o processo não é complicado, mas requer habilidades para trabalhar com um testador no MetaTrader5. Instruções detalhadas levarão a um artigo separado, portanto, usamos dados pré-preparados para o par Euro / Dólar (para aqueles que usam MT5, o link para o Expert está no final do artigo). Será possível ter certeza de que os dados preparados com antecedência não "espreitam" e não sugerem redes neurais na última etapa, quando passarmos aos testes com o mercado real.



Vamos começar ...



GoogleColaboratory



Nosso "laptop" no GoogleColab pode ser encontrado neste link . Não se esqueça de fazer login em sua conta do Google (ou Gmail) primeiro.



Copie o "laptop" para você.



imagem



Agora você precisa executar sequencialmente todos os blocos de cima para baixo.



1. Instalação de bibliotecas



Esta etapa instalará o TensorFlow e outras bibliotecas. O processo terminará sozinho, nada precisa ser feito.



imagem



2. Carregar e preparar dados para treinamento



Nesta fase, o conjunto de dados será carregado, bem como conjuntos de dados separados para treinamento e teste serão preparados. O conjunto de dados foi coletado para o par EURUSD para o período do início de 2015 até os dias atuais, a etapa de coleta de dados é o castiçal M6. Últimas 2 semanas - site de teste. Os dados no conjunto de dados são um conjunto de centenas de milhares de linhas, cada uma delas algo assim



0.32,0.26,0.00,0.43 ... 0.66,0.25,0.24,0.05,0,1,1600144440,1.189240


Os preditores são separados por vírgulas, os campos 3 e 4 do final - esta é a resposta correta para onde a tendência foi (0,1 - para baixo; 1,0 - para cima). O segundo campo do final é o id do castiçal. O último é o preço na abertura da vela. Os dois últimos campos não são usados ​​para treinamento.



3. Treinamento e teste do modelo



Deixe as configurações de rede neural padrão na primeira inicialização. O treinamento acontecerá em cinco passes até que um resultado aceitável seja obtido. Em caso de treinamento bem-sucedido, algo como esta tabela aparecerá:



+------------+---------+----------+-------------+------------+
|   |  |  |  (%) |  (%) 
+------------+---------+----------+-------------+------------+
|     0      |   7174  |   7173   |      50     |   100.0    |
|     2      |   6956  |   6731   |      50     |    95.4    |
|     4      |   6430  |   6224   |      50     |    88.2    |
|     6      |   5867  |   5630   |      51     |    80.1    |
|     8      |   5250  |   5065   |      50     |    71.9    |
|     10     |   4636  |   4450   |      51     |    63.3    |
|     12     |   3964  |   3772   |      51     |    53.9    |
|     14     |   3330  |   3152   |      51     |    45.2    |
|     16     |   2758  |   2539   |      52     |    36.9    |
|     18     |   2198  |   2012   |      52     |    29.3    |
|     20     |   1700  |   1544   |      52     |    22.6    |
|     22     |   1298  |   1167   |      52     |    17.2    |
|     24     |   958   |   825    |      53     |    12.4    |
|     26     |   699   |   517    |      57     |    8.5     |
|     28     |   446   |   278    |      61     |    5.0     |
|     30     |   246   |   127    |      65     |    2.6     |
+------------+---------+----------+-------------+------------+


A resposta da rede neural é uma classificação binária onde [0 1] é "inativo" e [1 0] é "ativo". Mas a rede neural nunca responde com um valor inteiro, sua resposta, dependendo do grau de "confiança", pode ser do tipo [0,4 0,6]. Nessa resposta, a rede neural acredita que o preço cairá, mas não está muito confiante, e na resposta [0,1 0,9] também caiu, mas há muito mais confiança. Esta é a aparência da matriz de respostas reais:



[[0.5084921  0.49150783]
 [0.3930727  0.6069273 ]
 [0.4930727  0.50692725]
 ...
 [0.5189831  0.48101687]
 [0.27955987 0.7204401 ]
 [0.476914   0.5230861 ]]


O campo da tabela “Resposta da rede” é a diferença dentro dessa resposta binária multiplicada por 100. Obviamente, essa diferença caracteriza a “confiança” da rede em sua previsão. Como resultado, depois de multiplicar por 100, temos valores no intervalo de 0 a 100. Agora você não pode pegar todas as respostas, mas selecionar apenas aquelas em que a rede neural tem "confiança" significativa. Para entender o quanto a resposta afeta o resultado da previsão, a seção de teste é verificada quanto à exatidão da previsão em diferentes níveis dessa "confiança". Cada linha da tabela é uma verificação de um novo valor mais alto para a resposta da rede. Quanto mais alto o filtro de resposta da rede, menos respostas, mas melhores são. Isso pode ser visto nos campos "Ganhou" e "Perdeu". O processo para quando as respostas (sinais) são menos de 1% de todos os dados de teste.



Se a rede não foi treinada em uma passagem, simplesmente reinicie este bloco (você não precisa recarregar os dados).



4. Resultados no gráfico de negociação



Execute este bloco. Tudo é óbvio aqui, no gráfico do par de negociação do conjunto de teste, os sinais da rede neural são desenhados, verde para cima, vermelho para baixo.



imagem



5. Teste no mercado real



Durante essa verificação, os dados da rede neural são carregados, que são criados à medida que novas velas são adicionadas em tempo real. Essa. a última parte dos dados recebidos foi criada na abertura do candle, no nosso caso, o candle zero M6. Esses dados, é claro, não contêm a resposta correta, a rede é convidada a fazer uma previsão real. Você pode ter certeza de que os dados não são alterados à medida que avançam para o histórico, removendo o comentário da linha de impressão (dados) e comparando os valores de uma linha específica na entrada e depois de um tempo.



def get_from_ennro(symbol, tfm, dim, lim):
    ...
    # print(data)
    ...


Pode não haver sinais no mercado real. Isso acontece quando a volatilidade é menor do que na área de teste, caso em que a rede neural não vê pontos de entrada.



conclusões



Sim! A qualidade da previsão não é adequada para a abertura de posições. Mas não definimos tal tarefa, o principal é que a rede neural aprende e reconhece algo no gráfico, adivinha a tendência, sua previsão obviamente não é caótica. Observe que usamos a configuração de rede neural mais simples - Sequencial Densa com 2 camadas e apenas 10 épocas para treinamento. Há espaço para um maior desenvolvimento.



Já existem soluções que melhoram qualitativamente a previsão, mas sobre elas no próximo artigo.



PS Para aqueles que desejam coletar e preparar dados para qualquer par no MetaTrader5 por conta própria, leia aqui e use o GoogleColab que é fornecido neste link .



All Articles