Discussão do artigo "Aplicação prática de redes neurais no trading. Python (Parte I)"

 

Novo artigo Aplicação prática de redes neurais no trading. Python (Parte I) foi publicado:

Neste artigo, analisaremos passo a passo a implementação de um sistema de negociação baseado na programação de redes neurais profundas em Python. Para isso, usaremos a biblioteca de aprendizado de máquina TensorFlow desenvolvida pelo Google. Para descrever as redes neurais, iremos por em uso a biblioteca Keras.

Vejamos alguns pontos de preparação para o treinamento de redes neurais.

  • Neste desenvolvimento, para tomar uma decisão, vamos usar dois redes neurais para abrir posições numa direção.
  • Com base no ponto anterior, também dividiremos os dados de treinamento em duas direções.
  • Como no sistema anterior, nossa primeira rede neural será treinada para construir indicadores semelhantes aos indicadores técnicos padrão. Usamos esta variante no sistema anterior porque usamos indicadores escritos por nós e não queríamos sobrecarregar funcionamento do Expert Advisor. Em Python, isso acontece porque desde o terminal podemos obter só cotações e, só depois disso, precisamos construir esses indicadores num script Python para preparar dados da rede neural. Porém, após ensinar a rede neural a construir indicadores desse tipo, contornamos a necessidade de repeti-los no script. 
  • A segunda rede neural constrói diretamente o indicador de sinal que usamos para realizar a estratégia de negociação.
  • Treinar a rede neural com base no gráfico horário do par EURUSD.
  • Como resultado, para construir o sistema, precisamos preparar dois RN para transações de compra e dois para transações de venda. No total, no sistema funcionarão quatro redes neurais.

Autor: Andrey Dibrov

 

uma busca, não um artigo

1.

não há descrição da constante 10 000 (1 e 4 zeros) no texto do artigo ou nas fontes, a busca no artigo é usada 51 vezes

Suspeitei que esse fosse o número de dígitos do EURUSD, mas então por que 100.000 (1 e 5 zeros)?

inB[15]=(iOpen(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*100000;
inB[16]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iOpen(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*100000;
inB[17]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*10000;
inB[18]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iOpen(NULL,PERIOD_H1,i+1))*10000;
inB[19]=(iOpen(NULL,PERIOD_H1,i+1)-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*10000;


De onde vêm os números 10000 e 100000? O que eles significam?


2. PythonTestExpert

Esse código é um mistério em geral:

void OnTick()
  {
   MqlDateTime stm;
   TimeToStruct(TimeCurrent(),stm);
   
   for(int i=0; i<=14; i++)
     {
      in[i]=in[i+5];
     }


Suspeito que deslocamos a matriz a cada tick, mas de onde obtemos os valores iniciais da matriz? .... Abaixo, preenchemos essa matriz do 15º elemento até o final da matriz.


3.

Por que o código dos indicadores DibMin1-1.mq5 e DibMax1-1.mq5 é idêntico em 99%, separado em dois indicadores, e não executado em um indicador com duas linhas (buffers)?



4. sobre o Python, também há dúvidas. No início, não havia um único comentário sobre o script Python , nem sobre a finalidade de escrever o script, mas, no final do artigo, apareceu de repente uma descrição do que o script estava fazendo e o fato de já termos usado os dados desse script ao otimizar o Expert Advisor.... Bem, volte, leitor, e procure onde estavam os dados desse script, talvez seja aqui:

Enquanto trabalhava no artigo, decidi também dar um exemplo de outra abordagem para os objetivos de aprendizado do NS.

?




Eu não escreveria que não gostei do artigo (ou que o artigo é absurdo?), mas o título do artigo "Aplicação prática de redes neurais em negociação. Python" é muito alto, e é uma pena que os mecanismos de pesquisa agora exibam esse artigo nos primeiros resultados de pesquisa

 
Igor Makanu:

É uma busca, não um artigo.

1.

não há descrição da constante 10 000 (1 e 4 zeros) no texto do artigo ou nas fontes, a busca no artigo é usada 51 vezes

Suspeitou-se que esse fosse o número de dígitos do EURUSD, mas então por que 100.000 (1 e 5 zeros):


De onde vêm os números 10000 e 100000? O que eles significam?


2) PythonTestExpert

esse código é um mistério em geral:


Suspeito que deslocamos a matriz a cada tick, mas de onde obtemos os valores iniciais da matriz? .... Abaixo, preenchemos essa matriz do 15º elemento até o final da matriz.


3.

Por que o código dos indicadores DibMin1-1.mq5 e DibMax1-1.mq5 é idêntico em 99%, mas não é executado em um indicador com 2 linhas (buffers)?



4. sobre o Python, também há dúvidas: no início, não havia um único comentário sobre o script Python , nem sobre a finalidade de escrever o script, mas, no final do artigo, apareceu de repente uma descrição do que o script estava fazendo e o fato de já termos usado os dados desse script ao otimizar o Expert Advisor.... Bem, volte leitor e veja onde estavam os dados desse script, talvez fosse isso:

Enquanto trabalhava no artigo, decidi também dar um exemplo de outra abordagem para os objetivos de aprendizado do NS.

?




Eu não escreveria que não gostei do artigo (ou que o artigo é absurdo?), mas o título do artigo "Aplicação prática de redes neurais em negociação. Python" é muito alto, e é uma pena que os mecanismos de pesquisa agora exibam esse artigo nos primeiros resultados de pesquisa

Obrigado pelas boas perguntas!!!

1. 10.000 ou 100.000? " * " ou " / " ? etc. Formamos os dados de entrada para a NS. (A rede neural que está em meu crânio gostou visualmente dos dados que foram enviados para o arquivo. Talvez a rede neural na outra caixa também goste. Estou brincando:) Com a NS, é preciso fazer experiências, tanto com os hiperparâmetros da própria rede neural, a arquitetura, quanto com os dados de entrada. Aqui, provavelmente não se trata de "dois vezes dois é quatro", mas de "dois vezes dois é?".

2. Sobre a questão do PythonTestExpert. Não entendi o ponto que precisava ser esclarecido - executamos o Expert Advisor no testador de estratégia em H1 a preços de abertura. E o deslocamento do cluster do indicador é feito em cada barra. Em outro caso, uso a mudança de indicadores às 00 horas - uma vez por dia. Aqui, também, é necessário fazer experimentos.

3. Dois indicadores - puramente por conveniência e esse é um caso especial. Muitas vezes, as estratégias são construídas com base na negociação em uma única direção. Portanto, para a amostragem de dados, é mais conveniente usar uma linha do indicador, que mostra o extremo máximo do dia ou o mínimo. Aqui, também, experimente o deslocamento - "para frente e para trás".

4. Sobre o script Python - sim, talvez eu quisesse simplificá-lo demais..... Mas meu objetivo neste artigo foi mostrar a simplicidade da aplicação prática de redes neurais usando a integração com Python. Nesta etapa - obtenção de dados de entrada, treinamento e teste. "Pressione o botão e obtenha o resultado". Não sei se esse tópico já foi abordado dessa forma? Não por mim. Por outros. Mas eu queria compartilhá-lo....

5. E como uma piada sobre a questão do absurdo - não é absurdo olhar em uma caixa para um conjunto de fórmulas que foram chamadas de indicadores técnicos e tentar ganhar dinheiro!!!)))).

 
Andrey Dibrov:

5. E como uma piada sobre a questão do absurdo - não é absurdo olhar em uma caixa para um conjunto de fórmulas que foram chamadas de indicadores técnicos e tentar ganhar dinheiro!!!)))).

O artigo é absurdo porque é impossível sentar e ler o material, não há uma apresentação consistente, nenhuma descrição da metodologia, nenhum objetivo do estudo - não estou falando do simples para o complexo, simplesmente não há lógica em seguir o material apresentado.

aqui está

Enquanto trabalhava no artigo, decidi também dar um exemplo de uma abordagem diferente para os objetivos de aprendizagem da NS. Para fazer isso, vamos fazer algumas alterações no script PythonIndicators.

Isso é um sinal de que o material do artigo foi preparado de forma inferior, você quer explorar possibilidades adicionais da metodologia fornecida - descrever novos objetivos, descrever o que usaremos do código pronto

e, em tal apresentação, parece que, por que não tentamos girar algo mais pelo método de "cutucada científica" - "Eu estive girando e sei exatamente o que vamos conseguir:".

A lógica aqui é que estamos treinando o NS em metas que foram alcançadas, e não em eventos que estão prestes a acontecer. O que, você pode concordar, é mais lógico. Afinal de contas, é mais fácil avaliar eventos passados do que fazer previsões.

Como resultado, temos esse indicador.


a favor

Aqui estão alguns resultados da otimização.

Não quero comentar nada - um conjunto de recortes do Paint? Por que há datas e tamanhos diferentes nas telas? Onde estão os valores dos parâmetros de otimização?

O que é isso? - É a "pesquisa por imagem" do Google? É parecido com isso:


 
Igor Makanu:

O artigo é absurdo porque é impossível sentar e ler o material, não há uma apresentação consistente, nenhuma descrição da metodologia, nenhum objetivo da pesquisa - não estou falando do simples para o complexo, simplesmente não há lógica em seguir o material apresentado.

isso

Enquanto trabalhava no artigo, decidi também dar um exemplo de uma abordagem diferente para os objetivos de aprendizagem da NS. Para fazer isso, vamos fazer algumas alterações no script PythonIndicators.

Isso é um sinal de que o material do artigo foi preparado de forma inferior, se você quiser explorar possibilidades adicionais da metodologia fornecida - descreva novos objetivos, descreva o que usaremos a partir do código pronto.

E em tal apresentação, parece que, por que não tentamos girar outra coisa pelo método de "bombeamento científico" - "Eu estive girando e sei exatamente o que vamos conseguir:".


sobre

Não quero comentar nada - um conjunto de recortes do Paint? Por que há datas diferentes, tamanhos diferentes nas telas? Onde estão os valores dos parâmetros de otimização?

O que é isso? - Isso é a "pesquisa de imagens" do Google? Para você, parece isso:


Em princípio, concordo com tudo - finalizarei o artigo levando em conta os comentários. Obrigado...

 
Andrey Dibrov:

Em princípio, concordo com tudo - finalizarei o artigo levando em conta os comentários. Obrigado...

ótimo!

o material está em demanda, pelo menos eu estou muito interessado nessa direção.

ZY: sim, aqui está mais uma coisa da minha mensagem anterior - todos os resultados da pesquisa no artigo devem ter o efeito de reprodutibilidade, além de confirmar a validade do artigo, e você não terá dúvidas de onde o obteve (suas capturas de tela de otimização), bem, e muito provavelmente será útil como material de treinamento.


Sv.

 
Instalei o pacote MT5, mas nunca o utilizei. É possível remover todos os indicadores e negociar com o programa python, por uma questão de brevidade
 
Maxim Dmitrievsky:
Instalei o pacote MT5, mas nunca o utilizei. Você pode remover todos os indicadores e negociar a partir do programa python para ser breve

Sim, usamos os indicadores para treinar o NS no programa python. E outro programa python negociará usando o NS treinado...

 
<br/ translate="no">

4. Sobre o script Python - sim, talvez eu tenha simplificado demais..... Mas meu objetivo neste artigo foi mostrar a simplicidade da aplicação prática de redes neurais usando a integração com Python. Nesta etapa - obtenção de dados de entrada, treinamento e teste. "Clique no botão e obtenha o resultado". Não sei se esse tópico já foi abordado dessa forma? Não por mim. Por outros. Mas eu queria compartilhá-lo....

5. E como uma piada sobre a questão do absurdo - não é absurdo olhar em uma caixa para um conjunto de fórmulas chamadas indicadores técnicos e tentar ganhar dinheiro!!!)))).

"para mostrar a simplicidade da aplicação prática de redes neurais usando a integração Python" , você não conseguiu. O procedimento que você propõe não pode ser chamado de simples. E não há integração alguma .

"receber dados de entrada, treinar e testar" - tudo isso pode e deve ser feito em Python. O pacote MetaTrader5 foi escrito para essa finalidade.

Sem a otimização dos hiperparâmetros da rede neural e a preparação de qualidade dos dados de entrada, não podemos falar de nenhum resultado sério. O Python tem tudo para executar essas etapas importantes e nada simples. Seu artigo não tem isso.

"Clique em um botão e obtenha um resultado" não tem nada a ver com sua abordagem. No aprendizado de máquina, há todo um campo em desenvolvimento - a automação do aprendizado de máquina. Nesse caso, sim, você coleta os dados, passa para o programa e ele determina os métodos e as técnicas de pré-processamento, seleciona o modelo ou os modelos que fornecem os melhores resultados para esses dados, otimiza os hiperparâmetros e produz um resultado pronto para uso.

O artigo mostra a sequência errada de etapas para criar e usar uma rede neural - essa é uma falha importante em minha opinião. O fato de a integração não ser usada integralmente é triste, mas não fatal. E você deveria ser mais modesto com o título do artigo.

Boa sorte

 
Vladimir Perervenko:

"paramostrar a simplicidade da aplicação prática de redes neurais usando a integração Python" , você não conseguiu. O procedimento que você propõe não pode ser chamado de simples. E não há integração alguma .

"Tudo isso pode e deve ser feito em Python. O pacote MetaTrader5 foi escrito para essa finalidade.

Sem a otimização dos hiperparâmetros da rede neural e a preparação de qualidade dos dados de entrada, não podemos falar de nenhum resultado sério. O Python tem tudo para executar essas etapas importantes e nada simples. Seu artigo não tem isso.

"Clique em um botão e obtenha um resultado" não tem nada a ver com sua abordagem. No aprendizado de máquina, há todo um campo em desenvolvimento - a automação do aprendizado de máquina. Nele, sim, você coleta os dados, passa para o programa e ele determina os métodos e as técnicas de pré-processamento, seleciona o modelo ou os modelos que fornecem os melhores resultados para esses dados, otimiza os hiperparâmetros e fornece o resultado pronto para uso.

O artigo mostra a sequência errada de etapas para criar e usar uma rede neural - essa é uma falha importante em minha opinião. O fato de a integração não ser totalmente utilizada é triste, mas não fatal. E você deveria ser mais modesto com o título do artigo.

Boa sorte

Se você assistiu ao vídeo no final do artigo, perceberá que todo o processo de aquisição de dados, treinamento de NS (nesses hiperparâmetros) e construção do indicador resultante leva até 2 minutos. Não é difícil e está disponível para qualquer operador, não apenas para os "escolhidos".

Sobre a questão da integração... Todo o processo criativo ocorre nos estágios descritos neste artigo, especialmente no recebimento dos dados de entrada e na amostragem desses dados. Pessoalmente, uso meus próprios indicadores para esse fim. E agora vou enfatizá-lo um pouco)))) - nesta etapa do desenvolvimento das redes neurais, os hiperparâmetros para análise de uma série temporal pura são de pouca importância. Basicamente, as redes neurais agora estão "aprimoradas" para a robótica (em um sentido amplo). Para classificação. Ou seja, eles funcionam perfeitamente bem em imagens completas. Mas se treinarmos o NS em gatos e cachorros e mostrarmos a ele apenas uma orelha, então, exageradamente, poderemos obter a resposta de que se trata de um pioneiro em um boné. E, em nosso negócio, há imagens completas apenas no passado, e no presente não há nenhuma.... É por isso que essa etapa de preparação para o treinamento NS é tão importante. E a integração. - Esse é um processo puramente técnico. O Python o simplifica muito e o traz para o plano da aplicação prática na negociação.

No aprendizado de máquina, toda uma direção está se desenvolvendo - a automação do aprendizado de máquina. Nesse caso, sim, você coleta os dados, passa para o programa e ele determina os métodos e métodos de pré-processamento, seleciona o modelo ou modelos que permitem obter os melhores resultados para esses dados, otimiza os hiperparâmetros e produz um resultado pronto para uso.
Novamente, isso é adequado para classificar imagens completas. Onde a qualidade pode ser determinada durante o treinamento.... Temos que voltar sempre aos testes, à otimização no MT5 etc. E aqui é muito mais difícil de integrar, mas como uma perspectiva para trabalhos futuros, sim.....
O artigo mostra uma sequência errada de etapas de criação e uso da rede neural - essa é a principal desvantagem em minha opinião. O fato de a integração não ser usada em toda a sua extensão é triste, mas não fatal. E é claro que você deveria ser mais modesto com o título do artigo.
Qual é a sequência correta?
 

Depois de executar dois scripts - PythonIndicators .mq5 , PythonPrices.mq5 - são criados arquivos .csv vazios - qual seria o motivo?

Agradecimentos