Discussão do artigo "20 sinais de negociação no MQL5" - página 3

 

Tenho uma pergunta prática.

Por que é necessário verificar a deficiência do identificador do indicador a cada chamada de CopyBuffer()? Em meu EA, fiz esse procedimento uma vez (com a chegada do primeiro tick, depois de verificar a sincronização de dados) e, mais tarde, comecei a receber o erro 4807 Error indicator handle. CSymTotal=7. Os identificadores foram recebidos em uma matriz:

      for (int i=0;i<CSymTotal;i++)
      {
      H_Ind[i]=iSAR(CSymList[i],PSARTF,PSARStep,PSARMax);
      }
A verificação de impressão mostra que todos os sete H_Ind[0..6] têm valores 10..15 respectivamente, ou seja, diferentes de -1. Os identificadores parecem ser válidos, mas em resposta a CopyBuffer(H_Ind[0-6]...) recebo CopyBuffer=-1, LastError=4807(!!!).Às vezes, tudo ocorre normalmente e, às vezes, ocorrem erros.

Depois que introduzi verificações como neste artigo,

   if(H_Ind[CSymListItem]==INVALID_HANDLE)//--- se o identificador for inválido
     {
      //--- создадим его снова                                                      
      H_Ind[CSymListItem]=iSAR(CSymList[CSymListItem],PSARTF,PSARStep,PSARMax);
      //--- sair da função
      return(0);
     }
   else
     {
      cb=CopyBuffer(H_Ind[CSymListItem],0,0,BarsCheck,PSARBuffer);
...

até agora tudo está funcionando corretamente. Um mistério...

Não entendo qual é a minha falha.... E, o mais importante, por que é necessário verificar a validade do identificadortoda vez que uso CopyBuffer() e o crio novamente? Ele não é salvo até que o Expert Advisor termine seu trabalho? Isso é uma necessidade em geral ou é apenas para a conveniência do exemplo?

Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
  • www.mql5.com
Получение рыночной информации / SymbolIsSynchronized - Документация по MQL5
 
pronych:

Tenho uma pergunta prática.

Por que é necessário verificar a deficiência do identificador do indicador a cada chamada de CopyBuffer()? Em meu EA, fiz esse procedimento uma vez (com a chegada do primeiro tick, depois de verificar a sincronização de dados) e, mais tarde, comecei a receber o erro 4807 Error indicator handle. CSymTotal=7. Os identificadores foram recebidos em uma matriz:

A verificação de impressão mostra que todos os sete H_Ind[0..6] têm valores 10..15 respectivamente, ou seja, diferentes de -1. Os identificadores parecem ser válidos, mas em resposta a CopyBuffer(H_Ind[0-6]...) recebo CopyBuffer=-1, LastError=4807(!!!).Às vezes, tudo ocorre normalmente e, às vezes, ocorrem erros.

Depois que introduzi verificações como neste artigo,

até agora tudo está funcionando corretamente. Um mistério...

Não entendo qual é a minha falha.... E, o mais importante, por que é necessário verificar a validade do identificadortoda vez que uso CopyBuffer() e o crio novamente? Ele não é salvo até que o Expert Advisor termine seu trabalho? Isso é uma necessidade ou é apenas para a conveniência do exemplo?

Em meus exemplos, a condição é a seguinte: se o identificador for válido, prosseguimos com a cópia dos dados. Se não for, criamos o indicador novamente e saímos dessa função, pois o cálculo do indicador leva tempo. O mesmo acontece com a cópia, pois durante a cópia o indicador pode ser recalculado, de modo que CopyBuffer() retorna -1, assim que os dados estiverem prontos, a função fará seu trabalho, por isso é necessário verificar tudo.
 

Em geral, a pergunta deve ser formulada de forma mais ampla:

Que verificações, condições ou atrasos devem ser introduzidos ANTES e DEPOIS de CopyBuffer(), para obter GARANTIDAMENTE os valores do indicador 400(0) de que preciso agora(!), em sete (dez) instrumentos em condições de velocidade máxima (em um loop)?

Pois, return(0) = "ah, bem, não funcionou agora, talvez da próxima vez funcione...".

Aqui, a propósito, o restante da cópia está ao lado...

PS. Talvez isso já esteja fora do tópico. Bem, a pergunta não é para o autor, mas para todos que possam esclarecer...

 
sergey1294:
Em meus exemplos, a condição é a seguinte: se o identificador for válido, prosseguimos com a cópia dos dados. Caso contrário, criamos o indicador novamente e saímos dessa função, pois o cálculo do indicador leva tempo. O mesmo acontece com a cópia, durante a cópia, o indicador pode ser recalculado, portanto, CopyBuffer() retorna -1, assim que os dados estiverem prontos, a função fará seu trabalho, por isso é necessário verificar tudo.

Sim, Sergey, eu entendo. Não tive a intenção de ofuscar o artigo ou o autor. O artigo é excelente. Não se trata de uma reclamação, mas de uma tentativa de encontrar uma resposta. É apenas a discussão mais próxima que encontrei sobre o assunto. Você provavelmente também gostaria de saber a resposta com mais precisão, não é mesmo? )

Talvez devêssemos colocá-la em um tópico separado?

 
pronych:

Talvez colocá-lo em um tópico separado?

https://www.mql5.com/ru/forum/1880.

Aqui, coloque-a no tópico. Sergey, peço desculpas por ter ido além do escopo do artigo. Ficarei feliz...)))

ДО и ПОСЛЕ CopyBuffer(..)
ДО и ПОСЛЕ CopyBuffer(..)
  • www.mql5.com
Какие проверки, условия, или задержки надо внести ДО и ПОСЛЕ CopyBuffer(), для того, чтоб, ГАРАНТИРОВАННО получить те 400(0) значений индикатора, которые необходимы сейчас(!
 
Gostamos muito desse artigo. Até o momento, criamos 10 consultores especializados com nosso software Visual Wizard usando esses sinais. Você pode vê-los aqui: http://www.molanis.com/products/expert-advisor-visual-wizard/expert-advisors-mt5
Expert Advisors for MT5 - Examples
  • Molanis Marketing
  • www.molanis.com
Please note that these Expert Advisors were created for educational purposes and do not constitute any financial advice. Before using the following EAs, please take into account the following: THE DOWNLOAD FILES ARE IN MOL5 FORMAT (MOLANIS 5 FORMAT - A .MOL5 FILE FOR THE EA VISUAL WIZARD). TO OBTAIN THE EA FOR MT5, DOWNLOAD THE STRATEGY...
 
Tentei fazer o download de alguns EAs, mas sem sucesso.
 

Desejo que alguém possa fornecer 20 métodos de gerenciamento de dinheiro!!!!!!

 

Para este artigo, a ideia é muito boa. Mas você esqueceu o conceito de OOP e de programação em geral: ABSTRATIVIDADE. Em suas funções, há indicadores codificados, o símbolo atual, o período atual e os parâmetros do indicador. A ideia é boa, mas não está totalmente implementada, está longe da perfeição. Por exemplo, quero verificar o cruzamento de linhas de indicadores, cada uma delas em um período de tempo diferente e em símbolos diferentes. Segundo: o que acontece com as suas funções se o terminal perder temporariamente a conexão com o servidor e perder as três barras que você está processando? Há um sinal, mas a entrada foi perdida. A busca por um sinal deve ser realizada com um CHARGE. Em seguida, o sinal deve ser verificado se já foi processado. Pode haver tantas interseções que você mesmo se surpreenderá. Basta passar parâmetros (número do indicador, símbolo, período de tempo, início da busca, fim da busca, linha do indicador...) para as funções. - Com isso, você tornará seu sistema mais flexível e o Expert Advisor poderá ver o que é inacessível aos humanos: a interseção de linhas de diferentes símbolos e diferentes períodos de tempo. Isso é muito melhor do que as funções apresentadas aqui. Você também precisa trabalhar com o conceito de nomear variáveis - você tem poucas variáveis com nomes que não significam nada - mas esse é um tópico separado. Isso é chamado de estilo de programação. Cada um tem seu próprio estilo. Mas vejo que, aos poucos, você está se aproximando dos conceitos que tentei usar no MT4 - isso é muito encorajador.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов - Документация по MQL5
 
1CMaster:

Para este artigo, a ideia é muito boa. Mas você esqueceu o conceito de OOP e de programação em geral: ABSTRATIVIDADE. Em suas funções, há indicadores codificados, o símbolo atual, o período atual e os parâmetros do indicador. A ideia é boa, mas não está totalmente implementada, está longe da perfeição. Por exemplo, quero verificar o cruzamento das linhas do indicador, cada uma delas em um período de tempo diferente e em símbolos diferentes. Segundo: o que acontece com as suas funções se o terminal perder temporariamente a conexão com o servidor e perder as três barras que você está processando? Há um sinal, mas a entrada foi perdida. A busca por um sinal deve ser realizada com um CHARGE. Em seguida, o sinal deve ser verificado se já foi processado. Pode haver tantas interseções que você mesmo se surpreenderá. Basta passar parâmetros (número do indicador, símbolo, período de tempo, início da busca, fim da busca, linha do indicador...) para as funções. - Com isso, você tornará seu sistema mais flexível e o Expert Advisor poderá ver o que é inacessível aos humanos: a interseção de linhas de diferentes símbolos e diferentes períodos de tempo. Isso é muito melhor do que as funções apresentadas aqui. Você também precisa trabalhar com o conceito de nomear variáveis - você tem poucas variáveis com nomes que não significam nada - mas esse é um tópico separado. Isso é chamado de estilo de programação. Cada um tem seu próprio estilo. Mas vejo que eles estão se aproximando lentamente dos conceitos que tentei usar no MT4 - isso é muito encorajador.

O artigo foi escrito de acordo com a tarefa técnica. Se você quiser verificar a interseção, quem o impede de fazer isso?