Perguntas de um "boneco" - página 69

 
rlx:

Tudo é correctamente convertido sem erros

Na secção"MQL5 Reference / Language Basics / Data Types / Type conversion", são mencionadas duas coisas:

1) long=>double conversion may lead to loss of accuracy;

2) o tipo de data/hora é permitido em vez do tipo longo (cada um leva 8 bytes).

Chego à conclusão de que, idealmente, a data de conversão =>double pode também levar à perda de precisão. Mas não posso dar um exemplo.

rlx:

Porque não armazenar data/hora em indicat...... ou buffers de tipo duplo

São adicionados muitos pontos, ou aparece algum tipo de referência.

É mais fácil colocar um espaço extra entre as duas palavras: 'amortecedores indicadores' (dois espaços).

 
Yedelkin:

Na secção"MQL5 Reference Guide / Language Basics / Data Types / Type conversion ", são mencionadas duas coisas:

1) long=>double conversion can lead to loss of accuracy;

2) o tipo de data/hora é permitido em vez do tipo longo (cada um leva 8 bytes).

Chego à conclusão de que, idealmente, a data de conversão =>double pode também levar à perda de precisão. Mas não posso dar um exemplo.

É mais fácil colocar um espaço extra entre duas palavras: "amortecedores indicadores" (dois espaços).

Escreva um simples teste de conversão e verá por si mesmo. E pode dizer-nos o resto mais tarde.

 
Vladix:

Escreva um simples teste de transformação e verá com os seus próprios olhos. E pode dizer a todos os outros mais tarde.

Tem uma resposta substantiva?

Um "teste de conversão simples" já foi dado pelo rlx. Parece funcionar correctamente. As dúvidas baseadas no material de referência são delineadas acima. Se houver um exemplo de data/hora incorrecta =>conversão dupla, por favor pergunte.

 
Yedelkin:

Existe uma resposta substantiva?

Um "teste de conversão simples" já foi dadopelo rlx. Parece funcionar correctamente. As dúvidas baseadas no material de referência são expostas acima. Se houver um exemplo de data/hora incorrecta =>conversão dupla, por favor enviem-mo.

void OnStart()
  {   
   double vDbl = 1.7976931348623158 e+308;
   datetime vTime = (datetime)vDbl;
   
   Print((double)vTime);  
  }

2011.09.25 16:24:38 teste (EURUSD,H1) -9.22337203636854776e+018

Este é um exemplo de quando podem ocorrer problemas, mas definitivamente não é o seu caso

 
Vladix:

2011.09.25 16:24:38 teste (EURUSD,H1) -9.22337203636854776e+018

Este é um exemplo de quando podem ocorrer problemas, mas definitivamente não é o seu caso

Parabéns! Viver e aprender!
 
Vladix:

2011.09.25 16:24:38 teste (EURUSD,H1) -9.22337203636854776e+018

Este é um exemplo de quando pode haver um problema, mas definitivamente não é o seu caso

Este não é um exemplo muito correcto, pois o tolo diz que a pila de vidro durante 20 minutos (não se trata de si, mas daqueles que a vão usar)

O valor actual da data/hora é 1316816136 esses 10 dígitos, ou seja 40 anos, mantissa duplo tem 16 dígitos,

daí o transbordamento do duplo mantis e a subsequente conversão incorrecta da data para o dobro ocorrerá em 6*40=240 anos.

Penso que teremos tempo para a utilizar.

 
Yedelkin:
Spas! Vive e aprende muito tempo!

Agora, juntei um exemplo só para si. A produção é a seguinte:

o tipo de data/hora é definido até 31.12.3000 23:59:59, é32535215999

o tipo duplo é definido até1.7976931348623158e+308

Acontece que quando se converte o valor máximo possível de data/hora para o dobro, ainda existe uma margem permissível no número de dígitos significativos.

Por conseguinte, a conclusão é que funcionará correctamente em todos os casos.

Urain:

Este não é um exemplo muito correcto, como se diz a um idiota com uma pila de vidro durante 20 minutos.

Não é uma boa analogia.

É apenas um exemplo da necessidade de verificar os valores limite dos valores ao dar tipos, tal como uma nota lateral. Mas mais uma vez, não é este o caso.

 

Os cálculos anteriores que não fiz correctamente, mais precisamente aqui: são utilizados 15 dígitos, porque se o 16º estiver presente, há um erro de conversão

   long i,l;double d;
   for(i=0;i<999999999999999;i+=365*86400){d=(double)i;l=(long)d;if(i!=l)break;}
   Print("до ",(1970+i/(365*86400))," года datetime в double преобразуется верно");

até 31711762 ano a data de data é convertida para o dobro correctamente

Por isso, dormimos bem até ao 31 milionésimo ano.

 

Chamada de funções importadas da biblioteca do ex5.

Explique, por favor. Leia https://www.mql5.com/ru/docs/runtime/imports

As bibliotecas do sistema (DLLs) são carregadas de acordo com as regras do sistema operativo. Se a biblioteca já estiver carregada (por exemplo, por outro Expert Advisor ou mesmo a partir de outro terminal cliente a funcionar em paralelo), a chamada vai para a biblioteca já carregada.

Como são carregadas as ex5 bibliotecas?Se a biblioteca já estiver carregada (por exemplo, por outro Expert Advisor, e mesmo de outro terminal de cliente, funcionando em paralelo),

Para o teste, criei a biblioteca

lib.mq5.

#property library
int      i=0;

int Get(void) export {return(i++);}

Compilou a lib.mq5 em lib.ex5

Consultor Especialista Criado

expert.mq5

#import "lib.ex5"
  int Get(void);
#import
void OnTick()
  {
   Print(Get());
  }

Compilou-o.

Coloco o Consultor Especialista no EURUSD.

Imprime

0

1

2

3

4

5

Colocar um consultor especializado (opcional) em GBPUSD

Impressões

6 --- do EURUSD Expert Advisor

0 --- de GBPUSD Expert Advisor.

7 --- do EURUSD Expert Advisor

1 --- do conselheiro GBPUSD.

8 --- do conselheiro EURUSD

2 --- do conselheiro GBPUSD.

Isto é, outra cópia da biblioteca da lib.ex5 é descarregada para GBPUSD Expert Advisor.

Alguém sabe como imprimir

6 --- do EURUSD Expert Advisor

7 --- de GBPUSD Expert Advisor.

8 --- do EURUSD Expert Advisor.

9 --- do conselheiro GBPUSD.

10 --- conselheiro EURUSD

11 --- do conselheiro GBPUSD.

Apenas utilizando as capacidades do MT5

PS/// Ou talvez eu precise de ligar a biblioteca de uma forma especial.

///// Isto é, preciso que esta ex5 biblioteca seja carregada uma vez.

Документация по MQL5: Программы MQL5 / Вызов импортируемых функций
Документация по MQL5: Программы MQL5 / Вызов импортируемых функций
  • www.mql5.com
Программы MQL5 / Вызов импортируемых функций - Документация по MQL5
 

Olá. Poderia dizer-me, por favor? Porque é que as ordens e os negócios têm um bilhete mas as posições não?

E qual é a diferença entre um bilhete e um identificador?