Domande da un "manichino" - pagina 69

 
rlx:

Tutto viene convertito correttamente senza errori

Nella sezione"MQL5 Reference / Language Basics / Data Types / Type conversion" sono menzionate due cose:

1) la conversione long=>double può portare alla perdita di precisione;

2) il tipo datetime è permesso al posto del tipo long (prendono 8 byte ciascuno).

Sono giunto alla conclusione che, idealmente, la conversione datetime =>double può anche portare alla perdita di precisione. Ma non posso fare un esempio.

rlx:

Perché non memorizzare datetime in buffer indic......or di tipo double

Si aggiungono molti punti, o appare un qualche tipo di riferimento.

È più semplice mettere uno spazio in più tra le due parole: "buffer di indicatori" (due spazi).

 
Yedelkin:

Nella sezione"MQL5 Reference Guide / Language Basics / Data Types / Type conversion " vengono menzionate due cose:

1) la conversione long=>double può portare alla perdita di precisione;

2) il tipo datetime è permesso invece del tipo long (prendono 8 byte ciascuno).

Sono giunto alla conclusione che, idealmente, la conversione datetime =>double può anche portare alla perdita di precisione. Ma non posso fare un esempio.

È più facile mettere uno spazio extra tra due parole: "buffer di indicatori" (due spazi).

Scrivete un semplice test di conversione e lo vedrete voi stessi. E puoi dirlo al resto di noi più tardi.

 
Vladix:

Scrivete un semplice test di trasformazione e lo vedrete da soli. E puoi dirlo a tutti gli altri dopo.

Ha una risposta concreta?

Un "semplice test di conversione" è già stato dato da rlx. Sembra funzionare correttamente. I dubbi basati sul materiale di riferimento sono descritti sopra. Se c'è un esempio di conversione errata datetime =>double, chiedete pure.

 
Yedelkin:

C'è una risposta sostanziale?

Un "semplice test di conversione" è già stato datoda rlx. Sembra funzionare correttamente. I dubbi basati sul materiale di riferimento sono riportati sopra. Se c'è un esempio di conversione errata datetime =>double, inviatemelo per favore.

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

2011.09.25 16:24:38 test (EURUSD,H1) -9.223372036854776e+018

Questo è un esempio di quando potrebbero verificarsi dei problemi, ma non è sicuramente il tuo caso

 
Vladix:

2011.09.25 16:24:38 test (EURUSD,H1) -9.223372036854776e+018

Questo è un esempio di quando potrebbero verificarsi dei problemi, ma non è sicuramente il tuo caso

Congratulazioni! Vivi e impara!
 
Vladix:

2011.09.25 16:24:38 test (EURUSD,H1) -9.223372036854776e+018

Questo è un esempio in cui potrebbe esserci un problema, ma non è sicuramente il tuo caso

Questo non è un esempio molto corretto, come il pazzo dice cazzo di vetro per 20 minuti (questo non riguarda te ma quelli che lo useranno)

Il valore attuale di datetime è 1316816136 quelle 10 cifre, cioè 40 anni, mantissa doppia ha 16 cifre,

quindi l'overflow del double di mantis e la successiva conversione errata da datetime a double avverrà in 6*40=240 anni.

Penso che avremo il tempo di usarlo.

 
Yedelkin:
Terme! Si vive e si impara a lungo!

Ora ho messo insieme un esempio solo per voi. L'output è il seguente:

il tipo datetime è definito fino al 31.12.3000 23:59:59, è32535215999

il tipo doppio è definito fino a1,7976931348623158e+308

Si scopre che quando si converte il massimo valore possibile di datetime in double, c'è ancora un margine ammissibile nel numero di cifre significative.

Quindi, la conclusione è che funzionerà correttamente in tutti i casi.

Urain:

Questo non è un esempio molto corretto, visto che si dice a un pazzo con un cazzo di vetro per 20 minuti.

Non è una buona analogia.

È solo un esempio della necessità di controllare i valori limite dei valori quando si danno i tipi, solo come nota a margine. Ma di nuovo, non è questo il caso.

 

I calcoli precedenti non li ho fatti correttamente, più precisamente qui: si usano 15 cifre, perché se la 16esima è presente, c'è un errore di conversione

   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 преобразуется верно");

fino a 31711762 anno datetime a doppio è convertito correttamente

Quindi dormiamo bene fino al 31 milionesimo anno.

 

Chiamare funzioni importate dalla libreria ex5.

Per favore, spiega. Leggi https://www.mql5.com/ru/docs/runtime/imports

Le librerie di sistema (DLL) sono caricate secondo le regole del sistema operativo. Se la libreria è già caricata (per esempio, da un altro Expert Advisor e anche da un altro terminale client che gira in parallelo), la chiamata va alla libreria già caricata.

Come vengono caricate le librerie ex5?Se la libreria è già caricata (ad esempio da un altro Expert Advisor, e anche da un altro terminale client, che gira in parallelo),

Per il test, ho creato la libreria

lib.mq5.

#property library
int      i=0;

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

Compilato lib.mq5 in lib.ex5

Creata Expert Advisor

esperto.mq5

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

Compilato.

Ho messo l'Expert Advisor su EURUSD.

Stampa

0

1

2

3

4

5

Mettere un Expert Advisor (opzionale) su GBPUSD

Stampe

6 --- da EURUSD Expert Advisor

0 --- da GBPUSD Expert Advisor.

7 --- da EURUSD Expert Advisor

1 --- dal consulente GBPUSD.

8 --- dal consulente EURUSD

2 --- dal consulente GBPUSD.

Cioè un'altra copia della libreria lib.ex5 viene scaricata per GBPUSD Expert Advisor.

Qualcuno sa come stampare

6 --- da EURUSD Expert Advisor

7 --- da GBPUSD Expert Advisor.

8 --- da EURUSD Expert Advisor.

9 --- dal consulente GBPUSD.

10 --- Consulente EURUSD

11 --- dal consulente GBPUSD.

Utilizzando solo le capacità di MT5

PS// O forse devo collegare la biblioteca in un modo speciale.

///// Cioè ho bisogno che questa libreria ex5 sia caricata una volta.

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

Salve. Potresti dirmi per favore. Perché gli ordini e le compravendite hanno un biglietto ma le posizioni no?

E qual è la differenza tra un biglietto e un identificatore?

Motivazione: