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

 
Aleksey Vyazmikin:

Concorda que no momento da abertura do bar de minutos o OI deve ser tomado para a entrada anterior? Por exemplo, a abertura é às 10:00 da manhã, às 23:49:55.

Eu acho que é melhor usar o indicador no M1 e pegar toda a informação necessária da barra zero e fazer comparações diferentes no Expert Advisor considerando o pedido de informação do buffer do indicador com o offset requerido.

Qual é o terceiro valor no ficheiro - o primeiro é a data, o segundo é OM e o terceiro é OI? Pensei que era um delta, mas não funciona.

Eu tentei modificar o indicador como escrevi acima, ele lê e exibe OM, a velocidade de trabalho é muito mais rápida agora, basta tentar verificá-lo.

Sim, e a leitura do arquivo deve funcionar em caso de interrupção de dados e presença de dados no arquivo, mas o mercado está fechado e eu não o verifiquei.

Isso não importa. É importante que os dados escritos sejam sempre carregados correctamente no indicador. A questão é que tais erros são permitidos antes que o arquivo de treinamento tenha sido salvo. Se especificarmos esta regra, que assim seja, o mais importante é que o indicador real execute esta regra correctamente.

Alexey, obrigado pelo indicador, mas eu tenho uma pergunta sobre um Expert Advisor em tempo real. Se não souber o que fazer com ele, deve marcá-lo uma vez por minuto e não depois de cada mudança de OM num minuto?

Eu não uso barra zero no meu trabalho. Além disso, eu faço todos os cálculos 30 segundos após o sinal na primeira barra. Consequentemente, não são efectuados cálculos entre o sinal. Mas o sinal na primeira barra em 30 segundos aplica-se a todos os indicadores que participam no modelo e em teoria estes indicadores devem calcular todo o histórico desde a última referência (sinal) até ao actual na condição de não constarem do gráfico. Este é o buraco que o indicador deve ler do arquivo para obter o valor atual com precisão.

A questão é que eu uso dados dependentes de citações (eu mesmo os nomeei :-)) que são sensíveis a lacunas e buracos na história.

Por favor, ajude-me a trazer o código de indicadores que eu uso e eu lhe agradecerei com algumas idéias chave ao preparar os kits de treinamento. + Eu tenho 37 libras no meu serviço, não há problema. Mas apenas na condição de que a total confiabilidade dos dados seja assegurada no funcionamento real da EA.

O principal problema que eu tenho é que quando eu alimento minha EA com IA em um gráfico e recebo um novo sinal eu preciso recompilá-la e então ela irá solicitar dados adequados dos indicadores. Mas o problema é com os indicadores. Eu os envio para um gráfico, ele exibe o histórico corretamente e continua apresentando os dados. Recompilo-a após algum tempo e a cauda que foi desenhada na conta real muda os seus valores.

Há também um indicador delta acumulado que calcula corretamente em relação às barras. No entanto, quando o histórico deste indicador é longo, são 3 meses em М5, não tem tempo para ser calculado para um ciclo, uma vez que toma dados de copiadora, que por si só compreende quantos ciclos recebe.

Recentemente a atualização começou a comer memória ao criar um arquivo de treinamento, pois é solicitado para 14 instrumentos em 3-6 meses de história. Como resultado, 8 gigs de RAM simplesmente não é suficiente. E esta ferramenta escreve barra zero em tempo real, o que eu não preciso. Basta-me carregar apenas a primeira quando a barra zero aparece.

Se você quiser dar alguma ajuda, não hesite em me contatar e negociar. Obrigado!!!!

Arquivos anexados:
CumDelta.mq5  55 kb
 
Mihail Marchukajtes:

Isso não importa. O importante é que os dados registrados sejam sempre carregados corretamente no indicador. A questão é que tais erros são aceitáveis antes que o arquivo de treinamento seja salvo. Se especificarmos esta regra, que assim seja, o mais importante é que o indicador real execute esta regra correctamente.

Alexey, obrigado pelo indicador, mas eu tenho uma pergunta sobre um Expert Advisor em tempo real. Se não for utilizado, poupará cada minuto e nem todas as alterações de OM no espaço de um minuto.

Eu não uso barra zero no meu trabalho. Além disso, eu faço todos os cálculos 30 segundos após o sinal na primeira barra. Consequentemente, não há cálculos entre o sinal. Mas o sinal na primeira barra em 30 segundos aplica-se a todos os indicadores que participam no modelo e em teoria estes indicadores devem calcular todo o histórico desde a última referência (sinal) até ao actual na condição de não constarem do gráfico. Este é o buraco que o indicador deve ler do arquivo para obter adequadamente o valor atual.

A questão é que não podemos reproduzir perfeitamente o treinamento e a aplicação, especialmente no mercado rápido. Agora acontece que o atraso é de até 10 segundos em relação aos novos dados (se estivermos falando de histórico) e se analisarmos apenas a abertura da barra, o atraso será de 60 segundos ou mais. Se trabalharmos com dados obtidos na abertura do bar (não deslocados), haverá um erro no indicador, ou seja, podemos ter um vislumbre do futuro. Em geral precisamos pensar mais uma vez sobre a ideologia, agora os dados são mais recentes, mas é tudo teoria. Pode ser suficiente pegar os dados registrados quando uma nova barra aparece e treinar sobre ela.

Bem, podemos fazer um script que irá simplesmente remover linhas desnecessárias dentro de um minuto e o tamanho do arquivo será 10 vezes menor.

Mihail Marchukajtes:

O principal problema é que quando eu envio EA com IA para fazer um gráfico e obter um novo sinal, ele precisa ser recompilado e então ele irá solicitar dados adequados dos indicadores. Mas o problema é com os indicadores. Eu os envio para um gráfico, ele exibe o histórico corretamente e continua apresentando os dados. Recompilo-a após algum tempo e a cauda que foi desenhada na conta real muda os seus valores.

Tente a versão do indicador que eu dei. Se o problema persistir, provavelmente está na EA, e não nos indicadores. Por favor, mostre o código para obter os dados do indicador.

 
Mihail Marchukajtes:
Se a quebra é global por parte do corretor, não há nada que possamos fazer a respeito. O consultor para salvar os dados está no servidor UPU e os dados foram escritos sem qualquer perda.

Agora é esperado que o conselheiro salve os dados em paralelo com o trabalho do indicador e do conselheiro de negociação, assim, quando a conexão for perdida ou o terminal for fechado, os novos dados históricos serão retirados do arquivo, permitirá continuar trabalhando com urgência e, em seguida, substituir o arquivo por VPS e reiniciar o conselheiro.

 
Mihail Marchukajtes:

\Alexey, obrigado pelo indicador, mas tenho uma pergunta sobre o Conselheiro Especialista. É possível fazê-la escrever ao minuto, mas não com cada mudança de OM em um minuto?

Se você não pensar muito, verifique esta variante

   MqlTick last_tick;
   if(SymbolInfoTick(Name_instrFS,last_tick))
      StartDate=last_tick.time;
   else StartDate=TimeCurrent();
   if(isNewBar(Name_instrFS,0,PERIOD_M1))
   {
      for (int i=0; i<100 && !IsStopped(); i++)
      {
         h=FileOpen("OpenI\\"+Name_instr+"_OI.csv",FILE_WRITE|FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON|FILE_SHARE_READ,",");
         if(h!=INVALID_HANDLE)
         {

            FileSeek(h,0,SEEK_END);
            FileWrite(h,StartDate,DoubleToString(interest,0));
            FileClose(h);
            Sleep(100);
            break;
         }
      }
      //inter=interest;
      // byOR=byORD;
      // sellOR=sellORD;
   }
 
Aleksey Vyazmikin:

Se não for muito incómodo, vê isto.

Alexey, muito obrigado. Com certeza vou verificar e informá-lo sobre os resultados. Quanto a olhar para o futuro, não importa e não acontecerá se a EA escreverá da mesma forma que o indicador escreverá. Se não houver diferença entre eles, isso não importa. Alternativamente, quando uma nova barra aparece, esperamos pela primeira mudança de OI e registamos o novo valor para a primeira barra anterior. Podemos até registar não um novo valor, mas o antigo, que era o último para a primeira barra. Ou seja, na verdade, vamos começar a escrevê-lo no final do bar anterior.

O importante não é o OI que atribuímos à barra de minutos, mas como o indicador é lido a partir do arquivo.

 
Mihail Marchukajtes:

Alexei, muito obrigado. Com certeza vou verificar tudo e informá-lo do resultado. Quanto a olhar para o futuro, isso é absolutamente sem importância e não acontecerá se a EA escrever a forma como o indicador lê. Se não houver diferença entre eles, isso não importa. Alternativamente, quando uma nova barra aparece, esperamos pela primeira mudança de OI e registamos o novo valor para a primeira barra anterior. Podemos até registar não um novo valor, mas o antigo, que era o último para a primeira barra. Ou seja, na verdade, vamos começar a escrevê-lo no final do bar anterior.

O importante não é o OI que vamos atribuir à barra de minutos, mas como o indicador será lido a partir do arquivo.

Por favor, olhe para o código completo e pergunte

interest=SymbolInfoDouble(Name_instrFS,SYMBOL_SESSION_INTEREST); 


  if ((interest!=inter))
  {

   MqlTick last_tick;
   /*if(SymbolInfoTick(Name_instrFS,last_tick)) 
    StartDate=last_tick.time;
    else StartDate=TimeCurrent();*/
    StartDate=iTime(Name_instrFS,PERIOD_M1,1);
  if(isNewBar(Name_instrFS,0,PERIOD_M1))
   {  
    for (int i=0;i<100 && !IsStopped();i++)
    { 
      h=FileOpen("OpenI\\"+Name_instr+"_OI.csv",FILE_WRITE|FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON|FILE_SHARE_READ,",");
       if(h!=INVALID_HANDLE)                                                         
       {  
         
         FileSeek(h,0,SEEK_END);
         FileWrite(h,StartDate,DoubleToString(inter,0)); 
         FileClose(h); 
         Sleep(100);
         break; 
       }
    }   
    inter=interest;
   // byOR=byORD;
   // sellOR=sellORD;
  }
}


Se um novo bar abrir e não houver mudança de OI em 5 ticks, ele entrará na nova condição do bar?

Acho que deveria, porque será a primeira chamada da nova função de bar e só depois disso o resultado será transformado em falsh? Certo?

 
Simulei o trabalho do código na minha cabeça e encontrei um engarrafamento. A última barra da sessão de ontem será escrita na primeira alteração na abertura da barra de minutos da sessão de hoje, em caso de reinicialização da EA, o valor de OI será perdido, o que levará à desagradável entrada zero na última barra da sessão de ontem. Penso que a solução ainda não é escrever o valor do OM anterior na primeira barra, mas exactamente o OM actual, ou seja, aquele que será o primeiro no novo bar. Ok, eu queria sincronizá-los perfeitamente, mas acho que vai fazer como está... Então... só de pensar em voz alta...
 
Aleksey Vyazmikin:

O problema é que não se pode reproduzir perfeitamente o treinamento e a aplicação, especialmente em um mercado rápido. Agora acontece que o atraso é de até 10 segundos em relação aos novos dados (se estivermos falando de histórico), e se usarmos apenas a abertura da barra, o atraso será de 60 segundos ou mais. Se trabalharmos com dados obtidos na abertura do bar (não deslocados), haverá um erro no indicador, ou seja, podemos ter um vislumbre do futuro. Em geral é necessário pensar mais uma vez sobre a ideologia, agora os dados são mais recentes, mas é tudo teoria. Pode ser suficiente pegar os dados registrados quando uma nova barra aparece e treinar sobre ela.

Bem, podemos fazer um script que simplesmente remove linhas desnecessárias dentro de um minuto e o tamanho do arquivo será 10 vezes menor.

Tente a versão do indicador que eu dei. Se o problema persistir, provavelmente está na EA e não nos indicadores. Por favor, mostre o código para obter os dados do indicador.

Eu verifiquei o indicador no histórico e tenho um erro. O problema é que o primeiro castiçal de um minuto tem o tempo 10:00 na janela de aspas, mas o valor para este castiçal é retirado do castiçal anterior. Ou seja, a vela abre às 10:00:00 e fecha às 10:00:59. Este é o valor que deve ser escrito, não é? E o indicador durante a construção toma o valor da barra a partir das 23:59:59.
 
Mihail Marchukajtes:
Eu verifiquei o indicador no histórico e o erro é óbvio. O problema é que o primeiro castiçal de um minuto tem o tempo 10:00 na janela de aspas, mas o valor para este castiçal é retirado do castiçal anterior. Significa que a vela abre às 10:00:00 e fecha às 10:00:59. Este é o valor que precisamos escrever, não é? E o indicador toma o valor a partir das 23:59:59 quando se traça a barra.
Fui eu que o fiz. Agora não importa se o arquivo é escrito por minuto ou por tick, ele irá escrever os valores corretos para a vela. Isto é, se um castiçal tem um tempo aberto, escrevemos o valor no fecho deste castiçal...
 
Mihail Marchukajtes:
Eu verifiquei o indicador no histórico e o erro é óbvio. O problema é que o primeiro castiçal de um minuto tem o tempo 10:00 na janela de aspas, mas o valor para este castiçal é retirado do castiçal anterior. Ou seja, a vela abre às 10:00:00 e fecha às 10:00:59. Este é o valor que deve ser escrito, não é? E o indicador toma o valor a partir das 23:59:59 quando se constrói a barra.

Se a EA está trabalhando na abertura da barra, mesmo que seja com um atraso, é correto alimentá-la com os dados do fechamento da vela, ou seja, olhar para o futuro? É por isso que os dados mais recentes antes deste castiçal são utilizados, ou seja, um pequeno atraso, em vez de se avançar.


Mihail Marchukajtes:

Por favor, reveja o código completo e pergunte


Se um novo bar abrir e não houver mudança de OI dentro de 5 ticks, ele entrará na condição de um novo bar?

Acho que deveria porque será a primeira chamada da função do novo bar e só depois disso o resultado mudará para um falsh? Certo?

Onde está a contagem dos 5 ticks aqui? Acontece que dentro de um minuto não há transação, e então você perde a barra, e é por isso que eu removi a comparação para mudanças de OI, para que os dados sejam escritos imediatamente na abertura de uma nova vela. Posso ter-me esquecido, tenho de o testar em dados, mas ontem não tinha nenhum e é de uma semana :(