[Os indicadores não são devidamente instanciados quando chamados/criados a partir de um Indicador de tempo de trabalho diferente. - página 4

 
nicholishen:

...

Quero agradecer especialmente por toda sua ajuda... se não fosse por sua condescendência, não sei onde eu teria encontrado a motivação para lutar! /s

Já vi dezenas de pessoas como você aqui. Elas sabem tudo melhor do que outras, não ouvem, colocam suas próprias falhas nos outros (um outro usuário, um moderador, um corretor, uma plataforma, Metaquotes, o SO, ou o que quer que seja...).

Parece que você não aprende nada aqui. Isto NÃO é um bug, é como os desenvolvedores conceberam sua plataforma. Eu entendo porque você diz que é um bug, eu descobri o MT5 e como ele funciona anos atrás. Se você tivesse isto em mente e o aceitasse, você teria visto muito mais cedo qual era o problema: sua abordagem e sua compreensão.

Mas não, ainda assim você continua a dizer que é um "bug" ou uma "grande falha", isto é simplesmente ridículo. A arquitetura MT5 usando comportamento de função assíncrona é o que torna esta plataforma muito mais rápida do que o MT4, é claro que nem sempre é fácil lidar com ele. A principal falha das Metaquotes aqui é incompleta, incompreensível ou sem documentação.

Quando você não entende algo, você deve ouvir os outros (Stanislav e eu, por exemplo), e certamente não insultar as pessoas que estão tentando ajudá-lo.

 
Alain Verleyen:

Já vi dezenas de pessoas como você aqui. Elas sabem tudo melhor do que outras, não ouvem, colocam suas próprias falhas nos outros (um outro usuário, um moderador, um corretor, uma plataforma, Metaquotes, o SO, ou o que quer que seja...).

Parece que você não aprende nada aqui. Isto NÃO é um bug, é como os desenvolvedores conceberam sua plataforma. Eu entendo porque você diz que é um bug, eu descobri o MT5 e como ele funciona anos atrás. Se você tivesse isto em mente e o aceitasse, você teria visto muito mais cedo qual era o problema: sua abordagem e sua compreensão.

Mas não, ainda assim você continua a dizer que é um "bug" ou uma "grande falha", isto é simplesmente ridículo. A arquitetura MT5 usando comportamento de função assíncrona é o que torna esta plataforma muito mais rápida do que o MT4, é claro que nem sempre é fácil lidar com ele. A principal falha das Metaquotes aqui é incompleta, incompreensível ou sem documentação.

Quando você não entende algo, você deve ouvir os outros (Stanislav e eu, por exemplo), e certamente não insultar as pessoas que estão tentando ajudá-lo.

Executar todos os indicadores em uma única linha sem um método para chamar recursivamente a próxima iteração, além de definir um timer, é uma falha. Você quer falar sobre velocidade? Em vez de colocar o processamento de volta na fila, eu acabei de passar um ms extra em uma fila de trabalho. Provavelmente não é o fim do mundo, mas ainda assim requer uma solução. Estou muito grato àqueles que me ajudaram a entender a solução e por que ela foi necessária, dada a limitação da plataforma. No entanto, ainda estou tentando entender o que você trouxe para a discussão, além da condescendência.
 
nicholishen:
Executar todos os indicadores em um único fio sem um método para chamar recursivamente a próxima iteração, além de definir um cronômetro, é uma falha. Você quer falar sobre velocidade? Em vez de colocar o processamento de volta na fila, eu acabei de passar um ms extra em uma fila de trabalho. Provavelmente não é o fim do mundo, mas ainda assim requer uma solução. Sou muito grato àqueles que me ajudaram a entender a solução e por que ela foi necessária, dada a limitação da plataforma. No entanto, ainda estou tentando entender o que você trouxe para a discussão, além da condescendência.

Estou achando você muito agressivo. Desde o início eu estava apenas tentando explicar o que está acontecendo, a partir dos meus anos de experiência com o MT5. Não sou condescendente, sou hábil e experiente, e mereço respeito (como todo mundo). Isso é apenas do posto nº 14, vejo que você quer que funcione sem um novo tique, mas no mesmo posto eu me senti assaltado por sua palavra "furiosamente", então desisti.

De qualquer forma, o assunto está encerrado, obrigado por me empurrar para aprender algo novo.

 

Eu estava coçando minha cabeça durante anos por causa disto.

Para qualquer outra pessoa que se depare com esta questão, parece haver um trabalho simples.

Adicione uma variável de nível de módulo (RunOnce) para determinar quando estamos executando o OnCalculate pela primeira vez. Nessa primeira execução, retornar zero e definir a variável como verdadeira para evitar mais interupções.


bool RunOnce = false;

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]) {
               
   if (rates_total == prev_calculated) return (rates_total);
   if (!RunOnce) {
      RunOnce = true;
      return (0);
   }
  
REST OF YOUR CODE HERE.


Funcionou muito bem para mim, espero que ajude você também.

[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
  • 2017.01.30
  • www.mql5.com
UPDATE: See the workaround below CopyBuffer() throws an error of 4806 (Indicator data not accessible) when calling an indicator with a different Ti...
 
Tks para a solução
Razão: