Erros, bugs, perguntas - página 1168

 
TheXpert:

Ta maaa...

Tem que se colocar um duplo do muito antes da transferência. Para variável global. Não é zero, é apenas um duplo aleatório, pode ser 1,34*e-307 ou 4,29*e+120, porque tem bits de registo.

Depois de transferir o descomprimido de dub para longo.

É isso mesmo.

OK, já o tem ;)

 
artmedia70:

OK, já o tem ;)

Só não compreendo o que não é claro.

O duplo truncata os dados, pelo que não se pode transferir directamente por muito tempo para o dobro. Mas ambos são 8 bytes cada um, pelo que se pode transferir sem perdas apenas usando o dobro como contentor, que foi o que eu fiz no exemplo.

 
TheXpert:

Só não compreendo o que não é claro.

O duplo truncata os dados, pelo que não se pode transferir directamente por muito tempo para o dobro. Mas ambos são 8 bytes cada um, pelo que se pode transferir sem perdas apenas usando o dobro como contentor, que foi o que eu fiz no exemplo.

Andrey, não compreendi o formato de armazenamento e exibição em GV do terminal. Parecia mostrar a identificação gráfica, mas mostra 0.
 
artmedia70:
Andrey, não compreendi o formato de armazenamento e exibição no GV do terminal. Parecia mostrar o ID do gráfico, mas mostra 0.

GV mostrará algo parecido com lixo na aparência, este "lixo" transformar-se-á em ID de gráfico após conversão inversa.

O duble tem o seu próprio formato de dados, ao aconchegar o longo, colocamos o formato do duble e usamo-lo apenas como 8 bytes de memória.

 
TheXpert:

GV mostrará algo parecido com lixo na aparência, este "lixo" transformar-se-á em identificação gráfica após conversão inversa.

O duble tem o seu próprio formato de dados, ao colocarmos o duble no formato de duble e usá-lo simplesmente como 8 bytes de memória.

Sim, eu já descobri isso, obrigado.
 
Algo que noto é que a actualização de uma biblioteca ou de recursos ligados a algum outro script (indicador) faz com que ele (o indicador) recompile e recarregue o terminal. Nenhuma exigência! É um insecto ou uma característica? P.S. É sobre o MT4.
 
artmedia70:

Mais uma pergunta:

Procura de um GV existente do terminal pelo nome. Através dele, a identificação do gráfico em que a EA está a decorrer é passada para o indicador. O indicador pende sobre outro símbolo. Isto é, quero passar ao indicador a identificação do gráfico em que o Consultor Especialista está a correr. Procuro-o desta forma:

Isto é o que o terminal me diz:


Tentei ler a variável. Coloquei-o directamente no fio e coloquei-o no diário, bem como em variáveis de diferentes tipos - tudo o mesmo. Há duas diferenças.

O que há de errado nisso?

Leia aqui https://www.mql5.com/ru/docs/basis/types/casting parágrafo "Conversão de dados de estruturas simples".

Exactamente o seu caso. Os duplos têm uma precisão muito inferior em _número_ de caracteres do que os longos. É por isso que se obtém este resultado com uma simples tarefa.

Mas pode utilizar totalmente 64 bits de uma variável global para armazenar _qualquer_ informação 64 bits de comprimento (como cordas curtas de 8 bytes de comprimento, para não mencionar longas)

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Encontrei o seguinte problema. Depois de reiniciar o terminal, o indicador retorna valores "estranhos" de outro período de tempo quando chamado da EA.
O Conselheiro Especialista está em M2, os dados indicadores são retirados de M3.
1) Há um reinício do terminal às 14:40:
PE 0 14:39:50.524 Terminal
MD 0 14:40:06.009 Terminal MetaTrader 5 Alfa-Forex x64 construir 930 iniciado
II 0 14:40:06.586 Terminal OpenCL não encontrado, instalar o último driver OpenCL para um melhor desempenho
JO 0 14:40:07.257 Especialistas especialista FX_Money_Flow_v1_06 (EURUSD,M2) carregado com sucesso
O Expert Advisor escreve os valores indicadores na última e penúltima barra:
OF 0 14:40:11.540 FX_Money_Flow_v1_06 (EURUSD,M2) O valor do indicador TF1: -1.#QNAN -1.#QNAN
já no bar seguinte os dados estão correctos:
NJ 0 14:41:46.622 FX_Money_Flow_v1_07 (EURUSD,M2) valor do indicador TF1: -0,02798411604597126 -0,04893498839583753
2) Segundo reinício às 19:55:
CO 0 19:55:06.918 Terminal
RO 0 19:55:28.399 Terminal MetaTrader 5 Alfa-Forex x64 construção 930 iniciada
OP 0 19:55:28.992 Terminal OpenCL não encontrado, instalar o último driver OpenCL para um melhor desempenho
RD 0 19:55:29.507 especialistas especialista FX_Money_Flow_v1_07 (EURUSD,M2) carregado com sucesso
Mais uma vez a mesma canção:
PQ 0 19:55:38.168 FX_Money_Flow_v1_07 (EURUSD,M2) valor indicador TF1: -1.#QNAN -1.#QNAN

Mas não funciona correctamente o tempo todo:

KF 0 23:59:51.987 FX_Money_Flow_v1_07 (EURUSD,M2) Valor do factor TF1 indicador: -1.#QNAN -1.#QNAN


O gráfico M3 está aberto neste momento e há nele um indicador que mostra tudo correctamente:
(a diferença de tempo entre o terminal e os registos é de 5 horas, a imagem do ecrã refere-se ao segundo reinício)
Arquivos anexados:
 
OBJ_LABEL não parece apoiar a UNICODE em MT4? Alterei o valor tanto programticamente como a partir do diálogo de propriedades do rótulo: o símbolo é inserido e exibido correctamente no diálogo, mas no gráfico aparece como um ponto de interrogação (?). A fonte é unicode, e no diálogo das propriedades da etiqueta é correctamente seleccionada na lista pendente com as fontes.
 
stringo:

Leia aqui https://www.mql5.com/ru/docs/basis/types/casting parágrafo "Conversão de dados de tipos de estrutura simples".

Este é exactamente o seu caso. Os duplos têm uma precisão muito inferior em _número_ de caracteres do que os longos. É por isso que se obtém este resultado com uma simples tarefa.

Mas pode utilizar totalmente 64 bits da variável global para armazenar _qualquer_ informação 64 bits de comprimento (como cordas curtas de 8 bytes de comprimento, para não mencionar longas)

Sim, já o li, obrigado.