Erros, bugs, perguntas - página 595

 
-Alexey-:
Tente transferir-se para C - o erro vai encontrar-se a si mesmo. E em geral - com tais projectos é a única forma de escrever, se não quiser problemas no futuro. Infelizmente, eu próprio o compreendi demasiado tarde e agora reescrevo-o :).
Provavelmente, estudarei C++ num futuro próximo. Durante os últimos seis meses a minha cabeça já está cheia: MQL4, MQL5, HTML, CSS, XML. E agora também estou a estudar JavaScript. Ainda não tenho espaço e tempo suficiente para C++, embora queira mesmo))).
 

Temos um indicador a correr na TF M15, no código o indicador pede a série cronológica MqlRates à TF M1.

O indicador não começa de imediato porque os dados M1 não estão prontos e não é possível carregá-los durante a primeira corrida.

Como resultado temos um passe falso e o indicador já não tem acesso aos dados, pensando que já está calculado e não há necessidade de o recalcular.

Agora estou a correr o indicador de duas maneiras:

  1. Inicio o indicador em M15, elimino o indicador e inicio-o novamente (funciona).
  2. Antes de correr o indicador em M15, abro um gráfico em M1, corro o indicador em M15 (tudo funciona da primeira vez).

Daí a questão: como automatizar o correcto controlo e carregamento dos dados necessários para outra TF?

 
Urain:

Daí a questão: como automatizar a verificação e o carregamento dos dados necessários da outra TF?

Numa situação semelhante, eu controlo o processo de inicialização na OnCalculate. Se houver um erro durante a inicialização, então eu devolvo prev_calculado=0, e assim por diante até que tudo seja contado correctamente.
 
Lizar:
Numa situação semelhante, eu controlo o processo de inicialização na OnCalculate. Se houver um erro durante a inicialização, então eu devolvo prev_calculado=0 e continuo a fazê-lo até que tudo seja calculado correctamente.

A ideia é boa, embora não se possa atribuir nada a pré_calculado, a variável é declarada como const, mas entendo que se pode ter outra variável semelhante.

Há ainda uma questão - se não há dados, o que devo fazer?

Compreendo que o pedido de dados em si não leva a descarregar ou carregar a partir de uma base de dados local, e este é exactamente o problema.

 
Urain:

A ideia é boa, embora não se possa atribuir nada a pré_calculado, a variável é declarada como const, mas eu compreendi-o, pode ter outra variável semelhante.

Não se trata de atribuição, trata-se do número devolvido pela OnCalculated. Se os seus dados não estiverem prontos, devolverá 0 da OnCalculated.
Veja os exemplos do BarsCalculated. É assim que deve verificar.

Resta uma questão - se não houver dados, o que deve fazer?

Se não houver dados e estes não aparecerem, então não há muito a fazer.
Se quiser, pode esperar e calcular os amortecedores por temporizador.
 
sergeev:

Se os seus dados não estiverem prontos, devolverá 0 da OnCalculated.
Veja os exemplos de BarsCalculated.

Se não os tiver e eles não aparecerem, então não há muito a fazer.
Se quiser, pode chamar os amortecedores de espera e de cálculo por temporizador.

Não ajuda, apenas descarrega o indicador e reinicia-o, neste caso os dados já estão lá por alguma razão.

Ou em alternativa, abrir um gráfico com a M1 TF requerida, então os dados no gráfico M15 adjacente no pedido M1 estão prontos imediatamente.

 
Urain:

Não ajuda, apenas descarrega o indicador e reinicia-o, neste caso os dados já estão lá por alguma razão.

Ou em alternativa, abrir um gráfico com a TF necessária, então os dados no gráfico adjacente estão prontos de imediato.

Hoje passei meio dia com índices. Havia várias divisas/multitime.

O problema de não exibir é que está a tentar tirar um valor de um bar que simplesmente não existe nesta TF.

Portanto, tem de verificar antes de tomar um bar - SeriesInfoInteger.
Não é necessário descarregar. Não se pode descarregar a parte de cálculo de qualquer maneira (acabei de levantar o assunto hoje).
 
sergeev:

Tenho estado hoje a trabalhar com os índices há meio dia. Havia várias divisas/multitime.

O problema com a não exibição é que ela tenta tirar o valor da barra, o que não existe nesta TF.

Portanto, tem de verificar antes de tomar um bar - SeriesInfoInteger.

Não é necessário descarregar. Não se pode descarregar a parte de cálculo de qualquer maneira (acabei de trazer à baila um tópico sobre isto hoje).

Mimeo, tenho um cheque, encontro a primeira data na TF M1 e o cálculo das barras M15 começa a partir desta data. TF é definido como PERÍODO_M1

   timestart=(datetime)SeriesInfoInteger(_Symbol,TF,SERIES_FIRSTDATE);
   for(int i=prev>0?prev-1:0;i<rates_total-1;i++)
     {
      if(time[i]>timestart)
        {
         ... расчёт
        }
     }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков - Документация по MQL5
 
Urain:

1. a ideia é boa, embora não se possa atribuir nada a pré_calculado, a variável é declarada como const, mas entendo que se pode ter outra variável semelhante.

2. Resta uma questão, e se não houver dados, o que devemos fazer?

3. compreendo que a consulta em si não carrega ou descarrega dados da base de dados local, e este é exactamente o problema.

  1. Quis dizer deOnCalculate return 0, depois prev_calculated=0;
  2. Eu estabeleço um contador de reinicializações. Ao transbordar, descarrego o indicador.
  3. Não tive problemas com SoruXXX. Se houver uma história local, tudo é contado desde a segunda ou terceira vez, se não desde a primeira. No Campeonato, o "espião" utilizado pelo Conselheiro Especialista conta apenas com a história de um minuto, trabalha no H1. E assim por diante 9 pares. Se não houver qualquer história local, o ponto 2 irá funcionar. Mas, tanto quanto me lembro, a história foi descarregada a partir do servidor.
 
Urain:

Compreendo que o pedido de dados em si não provoca o descarregamento ou carregamento de dados a partir de bases de dados locais, e é exactamente este o problema.

A partir da ajuda do CopyXXXX:

Ao solicitar dados a um Expert Advisor ou um script, iniciará o descarregamento a partir do servidor, se o terminal não tiver esses dados localmente, ou começará a construir as séries de tempos necessárias, se os dados puderem ser construídos a partir do histórico local, mas ainda não estiverem prontos. A função devolverá a quantidade de dados que estará pronta quando o tempo limite expirar, mas o histórico continuará a ser descarregado e o próximo pedido semelhante devolverá mais dados.

Estamos a falar apenas de Expert Advisors e roteiros. Isto não se aplica aos indicadores?