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

 
Alain Verleyen:

Você está repetindo "falhar em instanciar", mas isso não é exato. O indicador é instanciado em todos os casos.

O problema é que os dados não estão disponíveis sincronicamente, você tem que lidar com eles. NÃO é um bug MT5, é uma CARACTERÍSTICA.

Proponho parar a discussão e esperar a resposta SD.

Talvez eu não tenha articulado corretamente que não importa quantos loops e espera, você não poderá acessar os dados indicadores (de diferentes TF) até após a primeira passagem de (*edit) OnCalculate();

Estou perfeitamente disposto a aceitar que posso estar errado, e é por isso que tenho uma recompensa de 10 dólares se você puder demonstrar o contrário. Por favor... prove que estou errado. Preciso de uma solução para este bug estúpido, desculpe, quero dizer "recurso".

 
nicholishen:

Talvez eu não tenha articulado corretamente que não importa quantos loops e espera, você não poderá acessar os dados indicadores (de diferentes TF) até após a primeira passagem de (*edit) OnCalculate();

Estou perfeitamente disposto a aceitar que posso estar errado, e é por isso que tenho uma recompensa de 10 dólares se você puder demonstrar o contrário. Por favor... prove que estou errado. Preciso de uma solução para este bug estúpido, desculpe, quero dizer "recurso".

Por que você precisa dele no primeiro "passe"? Se os dados necessários não estiverem disponíveis, espere até que estejam, só isso.
 
Alain Verleyen:
Por que você precisa dele no primeiro "passe"? Se os dados necessários não estiverem disponíveis, espere até que eles estejam, é tudo.

Porque estou desenvolvendo um indicador que requer o acesso de dados do mesmo indicador (mesmo símbolo) em um período de tempo diferente. Uma vez que não processará até após o segundo tick, isto significa que o indicador não funcionará off-line, e só funciona quando o segundo tick chegar.

Por que temos que nos comprometer por causa deste bug? O que há nele para você defendê-lo tão furiosamente?

 
nicholishen:

Porque estou desenvolvendo um indicador que requer o acesso de dados do mesmo indicador (mesmo símbolo) em um período de tempo diferente. Uma vez que ele não processará até depois do segundo tick, isto significa que o indicador não funcionará offline, e só funcionará quando o segundo tick chegar.

Por que temos que nos comprometer por causa deste bug? O que há nele para você defendê-lo tão furiosamente?

???

Eu não defendo nada, e certamente não "com fúria". Por favor, fique calmo.

 
Alain Verleyen:

???

Eu não defendo nada, e certamente não "furiosamente". Por favor, fique calmo.

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

[MQL5 BUG] Os indicadores não são devidamente instanciados quando chamados/criados a partir de um Indicador de tempo de trabalho diferente.

Alain Verleyen, 2017.01.31 12:46

Ok, você não acredita em mim, esse é o seu direito, mas está errado

Posso apenas sugerir que você escreva para o ServiceDesk, e por favor informe aqui a resposta deles.


OK.

Coloquei este trabalho para o caso de alguém estar interessado em fazer uma tentativa.

https://www.mql5.com/en/job/57516

 
nicholishen:

Isto significa que se os dados estiverem imediatamente disponíveis para um script ou EA, então eles estariam igualmente disponíveis para o Indicator (como neste caso não é uma questão de disponibilidade de dados). O Indicador simplesmente não está instanciando antes da segunda passagem do OnCalculate() (também conhecido como o primeiro tick)

Você entende a palavra "disponibilidade" também literalmente. Enquanto alguns dados podem existir na memória do terminal, o próprio terminal pode conter alguma lógica de sincronização que bloqueia atualizações para qualquer intervalo de tempo enquanto os dados subjacentes são verificados para um (provavelmente outro) intervalo de tempo. Ou eles podem bloquear solicitações de dados de um indicador até que ele termine sua própria criação (lembre-se que os indicadores são gerenciados pelos chamados handles, enquanto especialistas e scripts não o fazem) e isto é lógico para mim. Estes são apenas suposições, que eu fiz do ponto de vista dos desenvolvedores da MQ. Você pode perguntar a eles diretamente através do service desk.

Seu trabalho é impossível de ser realizado devido ao ponto 3:

3. Deve acessar o buffer na Inicialização

Isto é apenas contra a arquitetura e documentação do terminal:

Você não pode se referir aos dados indicadores logo após sua criação, pois o cálculo dos valores indicadores requer algum tempo

Por favor, leia também sobre a função CopyBuffer:

Nota

Ao solicitar dados do indicador, se as séries de tempos solicitadas ainda não tiverem sido construídas ou precisarem ser baixadas do servidor, a função retornará imediatamente-1, mas o processo de download/construção será iniciado.

Ao solicitar dados de um Expert Advisor ou script, odownload do servidor será iniciado, se o terminal não tiver esses dados localmente, ou a construção de uma série de tempos requerida será iniciada, se os dados puderem ser construídos a partir do histórico local, mas ainda não estiverem prontos. A função retornará a quantidade de dados que estarão prontos no momento da expiração do timeout.

Assim, especialistas e scripts são processados de forma síncrona até um timeout pré-definido, mas indicadores - de forma assíncrona.

Documentation on MQL5: Technical Indicators
Documentation on MQL5: Technical Indicators
  • www.mql5.com
Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
 
Quanto à sua tarefa específica, ela pode ser feita facilmente de outra forma. Você não é o primeiro que constrói um indicador sobre indicador e quer que ele funcione off-line. Use um timer.
 
Stanislav Korotky:
Quanto à sua tarefa específica, ela pode ser feita facilmente de outra forma. Você não é o primeiro que constrói um indicador sobre indicador e quer que ele funcione off-line. Use um timer.
Experimente-o. Não funcionou.
 
nicholishen:
Experimentei-o. Não funcionou.
Postar pergunta mais específica com um código de amostra. Pode ser um buggy. A abordagem funciona para mim.
 
Stanislav Korotky:
Postar pergunta mais específica com um código de amostra. Pode ser um buggy. A abordagem funciona para mim.
Eu não entendo como posso ser mais específico do que já fui...

Nenhuma quantidade de temporizadores ou loops pode superar o fato de que o indicador não instanciará até depois de Oncalculate retornar pelo menos uma vez. A recursividade também não funciona.