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

 
Mihail Marchukajtes:

Esse é o tipo de programador que eu sou. Ninguém o pode explicar correctamente até que lhe apanhes o jeito... Seja como for, people!!!!! Ouçam bem. Aqui vem o importante longo post......


é uma evolução ... fazer ou morrer :) eu sou como aquele programador

 
Mihail Marchukajtes:

De qualquer forma as pessoas!!!!! Ouçam bem. A sair Importante longo post......

Mestre, queime!

 

Todos vocês sabem muito bem que eu tenho um sentimento fervoroso por Open Interest (OI), pois é o elo chave na determinação da natureza do volume negociado. Combinado com o delta...mmmmm.... Apenas um saboroso tidbit.... OI certamente não é uma panaceia, mas melhorar a qualidade do modelo mesmo em 10% já terá um peso elevado!!!! E oh,milagre!!!! Finalmente cheguei ao instinto do dia, mas infelizmente só o MT5 tem tais características, o que foi o fator decisivo para mudar do MT4 para o MT5. Um grande obrigado ao Rafil, que me poupou muito tempo e deu um bom começo à migração. A EA já está sendo escrita e há uma semana de estatísticas. Claro que não é suficiente, mas podemos começar a testá-lo no M5, além disso a influência do spread no Si neste período de tempo é insignificante em comparação com a volatilidade do instrumento em geral. Bem... os dados estão lá, a única coisa é o que eu pensava que seria. Para treinar o modelo e ver do que a combinação Delta+Volume+OI é capaz. Tenho um bom conhecimento prático do Мкуль5, mas já os resolvi, acho que cheguei à meta e enfrentei um muro de mal-entendidos numa linguagem tão maravilhosa e poderosa. O conceito geral do TC é este.

Neste artigo vou tentar explorar as principais diferenças entre os valores teóricos e os valores numéricos do modelo.

Para preparar o conjunto de treinamento eu uso o roteiro de aplicação abaixo. Este script descarrega sinais da estratégia básica para o arquivo csv. Depois construímos o modelo e enfiamo-lo noutro indicador. Eu tenho dois deles. BuySi e SellSi, eles são os mesmos indicadores que contêm IA. Para entradas estes indicadores abordam o conjunto de indicadores Delta+AD+OI. Indicador do indicador, especialmente em um pacote... Qual poderia ser o problema... Mas não... Eles são.... e acho que sou a única que sabe tanto sobre esta linda e maravilhosa linguagem de programação.... por isso... onde estava eu... oh sim.... O problema é este:

O script descarrega um dado para um arquivo, mas durante o teste no momento do sinal, a impressão exibe outros valores. O mesmo sinal em um arquivo escreve uma coisa, mas na verdade, no momento do teste na entrada é completamente diferente. E aqui está o paradoxo. A inicialização e o próprio acesso ao buffer foram copiados a partir do script. Mas o BuySi carrega dados adequados no momento do teste, porque eu verifiquei à mão. E o mais interessante é que o OM carrega o mesmo arquivo e a entrada de IA, mas o AD é padrão, terminal um. No arquivo, alguns valores, na verdade, outros. Penso que tem a ver com este mesmo parâmetro quando tentamos chamar o indicador para outro instrumento que não o que está a ser testado. Acho que o problema está na sincronização de cotações e valores indicadores. Acho que esta solução pode requerer alguma preparação preliminar. É por isso que eu peço ajuda às pessoas. Por que o script busca os mesmos valores de iAD, mas quando testados, esses valores são diferentes e, consequentemente, os sinais começam a mudar? Quando os ícones estão no gráfico, ou seja, são calculados durante a inicialização, a figura aparece da seguinte forma.

Muito bem, na minha opinião. A influência do OM é sentida de imediato, mas quando eu a analiso, a imagem muda... e não para melhor.

Além disso, o testador faz duas corridas com sinais diferentes. Os Indutores devem bombear os amortecedores a tempo. O cálculo da IA é feito com um atraso e o erro 4806 não aparece mais, mas os sinais de dança e a diferença nos dados, código absolutamente idêntico ao do indicador STANDARD iAD Estou muito desgastado que eu estava muito preguiçoso para escrever este longo post, esperando por ajuda. Eu acho que o problema está no iCustom, quando o indicador é chamado em um instrumento diferente do atual. O mesmo começou a chuviscar OI, mas depois forcei-o a carregar a partir de ficheiros específicos e tudo passou, mas o que fazer com o iAD???

É assim que eu chamo no script, que cria um arquivo com dados.

AD_H =iAD("BR-12.17",   0, VOLUME_REAL);  Sleep(1500);

então eu acedo ao buffer assim...

  double AD(int index)
  {
   double MA[1];
   ResetLastError();
   if(CopyBuffer(AD_H,0,index,1,MA)<0)
     {
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
      return(0.0);
     }
   return NormalizeDouble(MA[0],Digits());
  }

E depois calculei a entrada desta maneira.

      double AD=(AD(i+1)-AD(i+PNT+1))*Cont;

Tudo isso está em um roteiro, mas funciona em um indicador com IA, onde o cabo é escrito da seguinte forma

AD_H =iAD("BR-12.17",   0, VOLUME_REAL);  

O acesso de amortecedor é assim...

  double AD(int index)
  {
   double MA[1];
   ResetLastError();
   if(CopyBuffer(AD_H,0,index,1,MA)<0)
     {
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
      return(0.0);
     }
   return NormalizeDouble(MA[0],Digits());
  }

O cálculo das entradas é assim....

      double AD=(AD(i+1)-AD(i+PNT+1))*Cont;

É compreensível, porque tudo foi apenas copiado. Mas porque há tanta diferença no resultado final. Mas acho que é porque o indicador foi chamado com outro símbolo. Não há necessidade de preparar nada, como sincronização ou qualquer verificação antes de chamar o indicador com outro símbolo. O que você acha sobre isso????

 
Vizard_:

Mestre, dispare!


É óbvio... que chegou uma multidão séria. Eu acho que o debate vai ser quente :-)

 

E agora eu compilei um indicador e ele envia para a impressora exatamente os dados que ele envia para o arquivo. Mas durante o teste, o mesmo sinal na entrada tem outros valores. Como assim?

 

Vejo que não vai haver filme???? Triste :-(

 

Só um palpite, mas...

AD é dependente do volume, o que significa que o valor na barra de zero está em constante mudança. Se você preencher o arquivo com os valores AD gerados com antecedência, e depois ler esse arquivo e usá-lo para testes, então você pode muito bem estar olhando para frente, usando o valor da barra de zero já gerada em um momento em que ainda não é conhecido no próprio EA.

 
Dr. Trader:

Só um palpite, mas...

AD depende do volume, portanto o valor da barra de zero está mudando constantemente. Se você preencher o arquivo com os valores de AD gerados com antecedência, e depois ler este arquivo e usá-lo para testes, então você pode muito bem estar olhando para frente, usando o valor da barra de zero já gerada em um momento em que ainda não é conhecido no próprio EA.


Não. Nenhum arquivo é escrito usando AD, tudo é tirado diretamente do símbolo. Acho que pode ser devido à falta de verificação de sincronização. Além disso, o erro 4806 estava sempre presente. Eu introduzi um atraso no indicador principal e o erro desapareceu, mas o problema persistiu. :-(

 

Aqui está a impressão a partir do terminal após a compilação.

2017.11.27 20:59:17.625 Buy_Si (Si-12.17,M5)2017.11.23 11:05:00 1.0 -116.0 64.0 2292.0 -206.0 413 4

e aqui do agente.

2017.11.27 20:59:38.318 2017.11.23 11:10:40 2017.11.23 11:05:00 1.0 -116.0 140.0 -1889.0 -993.0 1 4

Note que este é o mesmo sinal. a hora 11:05:-116 é o OI que é tirado do arquivo, também o mesmo. Depois há três valores de AD de símbolos diferentes. Então eu barro bem e parâmetro pont.

Por que os dados sobre AD são diferentes. Verificação de sincronização inserido....?

 

Eu não entendo nada sem o código.

Precisamos fazer um Expert Advisor simples com um conjunto mínimo de funções para simplesmente ler os valores indicadores e escrevê-los no log (ou melhor - em arquivo csv, para melhor comparação posterior). Neste caso, os resultados serão diferentes, e o código deve ser enviado ao Service Desk juntamente com o código do Expert Advisor.
Você também pode anexar o código ao terminal -https://www.mql5.com/ru/forum/1111/page2096 - e então uma pessoa bem informada irá verificar e confirmar ou explicar o que está errado.

Razão: