[Erro em obter o tempo do TF sênior no temporizador! - página 14

 
No entanto, eu já o executei algumas vezes. Engraçado, mas nem sempre funciona. Às vezes, a conexão não é estabelecida a tempo.
Eu tenho uma boa conexão própria. Talvez essa seja a razão.
 
Mas não foi isso que notei com este teste. Mesmo correndo agora com a contagem de passes, recebo 10 passes pela OnCalculate, ainda hoje. Acontece que a melhor opção para você parece ser fazer um pequeno atraso quando o indicador começa.
 
Konstantin Nikitin:
Mas eu notei algo diferente com este teste. Mesmo quando estou correndo agora com contagem de passes, recebo 10 passes através da OnCalculate. Acontece que a melhor opção para você parece ser um pequeno atraso no início do indicador.

Não há necessidade de uma solução de muleta, repito. O comportamento atual não me convém, os conselhos dados pelos próprios desenvolvedores não funcionam. Deixar que coisas como esta aconteçam por conta própria não adianta de nada. Um problema foi detectado, ele precisa ser resolvido pelos desenvolvedores.

 
Alexey Kozitsyn:

Não há necessidade de uma solução de muleta, vou dizer novamente. O comportamento atual não me convém, os conselhos dados pelos próprios desenvolvedores não funcionam. Deixar que coisas como esta aconteçam por conta própria não adianta de nada. Um problema é descoberto, ele precisa ser resolvido pelos desenvolvedores.

Eu descrevi o que vi. É preciso pensar em como consertá-lo. Não serve de nada conseguir o rastreamento do primeiro passe, etc...

 
Konstantin Nikitin:

Eu descrevi o que vi. Tenho que pensar como lidar com isso. Ou seja, não é bom de forma alguma obter o rastreamento do primeiro passe, etc.

Acho que precisa haver um mecanismo testado em locais tão "finos", trabalhando corretamente com números de erro (batendo em cada pedido), ou algum tipo de verificação adicional nas funções de acesso ao histórico (isto é, embutido, de modo a não procurar tais problemas por horas). E este mecanismo deve ser descrito em detalhes na documentação. Então não haverá nenhuma pergunta para os desenvolvedores. Mas como está agora? Na documentação nada sobre o acesso aos dados de TFs mais antigos, portanto, os próprios desenvolvedores não sabem como obter os dados. Há apenas alguns links para o fórum dos anos barbudos onde eles têm o mesmo raciocínio.

 
Se você souber a diferença com o servidor em horas. Você pode usar uma comparação do relógio local atual com o horário de abertura do bar da última hora. O TimeCurrent não é adequado porque o tempo pode não ser atualizado.
Algo como isto
     MqlDateTime mqlDateTime;
     TimeToStruct( (TimeLocal()-60*3), mqlDateTime );
     mqlDateTime.min = 0;
     mqlDateTime.sec = 0;
     
     if( IsConnected() )
          Comment( TimeToString( iTime(Symbol(), PERIOD_H1, 0) ), "\n", TimeToString( StructToTime(mqlDateTime) ) );
 
Alexey Kozitsyn:

A propósito, você não respondeu à sua pergunta sobre a versão terminal.

terminais 1121 e 1090

Alexey Kozitsyn:

A comunicação com o servidor é estabelecida. Ao solicitar dados da TF sênior, se os dados não estiverem prontos - erro ou retorno 0. Se os dados estiverem prontos - retornar SOMENTE dados reais. Isso é tudo. Se os dados não estiverem prontos por muito tempo - deixe-os retornar erro ou 0.

Aqui não há erro. Há uma conexão e dados do histórico.
Os dados que já se encontram no terminal são exibidos imediatamente.
Novos dados vêm com um atraso, pois é necessário enviar um pedido ao corretor e carregá-lo se algo estiver faltando.

Assim que novos dados aparecem, um tique é imediatamente gerado (mesmo agora, quando o mercado é fechado).
Você só precisa verificar o aparecimento de uma nova barra e mudar suas variáveis você mesmo.

ps. não há bandeira para a relevância dos dados no mt4.

 
Taras Slobodyanik:

terminais 1121 e 1090

Aqui não há erro. Há uma conexão e os dados do histórico estão presentes.
Os dados que já se encontram no terminal são exibidos imediatamente.
Novos dados chegam com um atraso porque um pedido tem que ser enviado ao corretor e carregado se algo estiver faltando.

Assim que novos dados aparecem, um tique é imediatamente gerado (mesmo agora, quando o mercado é fechado).
Você só precisa verificar o aparecimento de uma nova barra e mudar suas variáveis você mesmo.

ps. não há bandeira de atualização de dados no mt4.

Como eu disse, terá que tentar novamente no terminal atualizado.

Eu discordo categoricamente do comportamento que não pode ser controlado. A função retorna dados incorretos sem erros - isto é errado. Você mesmo se deparará mais tarde com tal situação e se perguntará qual é o problema.

Digamos, no início a função retornou um erro. Eles são liberados. Durante a consulta seguinte, a função não retornou o erro e retornou alguns dados "incorretos". Está tudo bem?

 

O que você quer dizer com dados incorretos?

Quando eles não estão lá, ou não há conexão, ou o que quer que seja, então sim, há um erro.
E não há nada para contar.

Quando todos os dados estão corretos - tudo está normal e tudo funciona.

Seu indicador não rastreia a atualização dos dados.
Novos bares vêm do corretor e você não os verifica.
Acrescentei algumas linhas para mostrar que quando você verifica, tudo está correto.

É uma situação de trabalho para verificar um novo bar.

 
Taras Slobodyanik:

O que você quer dizer com dados incorretos?

E vejam meu primeiro posto. Você vê o erro 4066 aí? Em seguida, erro 0 e retornar dados incorretos. Por que a função (SeriesInfoInteger() neste caso) não verifica a relevância antes de enviar os dados? Por que ela não define a bandeira de erro? É que eu prefiro esperar um pouco mais para que as verificações internas passem do que procurar por erros mais tarde.

Mas depois disso, recebi muitos conselhos, com os quais ainda não obtive nenhum resultado. E afinal não se tratava nem mesmo do temporizador.

Razão: