Fragen von einem "Dummy" - Seite 69

 
rlx:

Alles wird korrekt und fehlerfrei konvertiert

Im Abschnitt"MQL5 Referenz / Grundlagen der Sprache / Datentypen / Typkonvertierung" werden zwei Dinge erwähnt:

1) Die Konvertierung long=>double kann zu einem Verlust an Genauigkeit führen;

2) Der Typ datetime ist anstelle von long erlaubt (sie benötigen 8 Bytes).

Ich komme zu dem Schluss, dass die Konvertierung datetime =>double im Idealfall auch zu einem Verlust an Genauigkeit führen kann. Aber ich kann kein Beispiel nennen.

rlx:

Warum nicht datetime in indic......or-Puffern vom Typ double speichern

Es werden viele Punkte hinzugefügt, oder es erscheint eine Art Hinweis.

Es ist einfacher, ein zusätzliches Leerzeichen zwischen die beiden Wörter zu setzen: "Indikatorpuffer" (zwei Leerzeichen).

 
Yedelkin:

Im Abschnitt"MQL5 Referenzhandbuch / Grundlagen der Sprache / Datentypen / Typkonvertierung " werden zwei Dinge erwähnt:

1) Die Konvertierung long=>double kann zu einem Verlust an Genauigkeit führen;

2) Der Typ datetime ist anstelle des Typs long zulässig (beide benötigen jeweils 8 Byte).

Ich komme zu dem Schluss, dass die Konvertierung datetime =>double im Idealfall auch zu einem Verlust an Genauigkeit führen kann. Aber ich kann kein Beispiel nennen.

Es ist einfacher, ein zusätzliches Leerzeichen zwischen zwei Wörter zu setzen: "Indikatorpuffer" (zwei Leerzeichen).

Schreiben Sie einen einfachen Konversionstest und Sie werden es selbst sehen. Und Sie können es dem Rest von uns später erzählen.

 
Vladix:

Schreiben Sie einen einfachen Transformationstest, und Sie werden sich selbst davon überzeugen. Und Sie können es allen anderen später erzählen.

Haben Sie eine substanzielle Antwort?

Ein "einfacher Umrechnungstest" wurde bereits von rlx durchgeführt. Die Zweifel, die sich aus dem Referenzmaterial ergeben, sind oben dargelegt. Wenn es ein Beispiel für eine fehlerhafte datetime =>double Konvertierung gibt, fragen Sie bitte nach.

 
Yedelkin:

Gibt es eine substanzielle Antwort?

Ein "einfacher Umrechnungstest" wurde bereitsvon rlx durchgeführt. Die Zweifel, die sich aus dem Referenzmaterial ergeben, sind oben dargelegt. Wenn es ein Beispiel für eine fehlerhafte datetime =>double Konvertierung gibt, senden Sie es mir bitte zu.

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

Dies ist ein Beispiel dafür, wann Probleme auftreten können, aber es ist definitiv nicht Ihr Fall

 
Vladix:

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

Dies ist ein Beispiel dafür, wann Probleme auftreten können, aber es ist definitiv nicht Ihr Fall

Herzlichen Glückwunsch! Lebe und lerne!
 
Vladix:

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

Dies ist ein Beispiel dafür, dass es ein Problem geben könnte, aber es ist definitiv nicht Ihr Fall

Ein nicht ganz korrektes Beispiel, wie man so schön sagt: Schwachkopf für 20 Minuten (nicht über dich, sondern über die, die es benutzen werden)

Der aktuelle Datumswert ist 1316816136 die 10 Stellen, das sind 40 Jahre, Mantisse double hat 16 Stellen,

Der Überlauf des Mantis-Double und die anschließende fehlerhafte Konvertierung von datetime in double erfolgt daher in 6*40=240 Jahren.

Ich denke, wir werden Zeit haben, sie zu nutzen.

 
Yedelkin:
Bäder! Man lebt und lernt lange Zeit!

Ich habe jetzt ein Beispiel für Sie zusammengestellt. Die Ausgabe lautet wie folgt:

datetime type ist definiert bis 31.12.3000 23:59:59, es ist32535215999

der Typ double ist bis zu1.7976931348623158e+308 definiert

Es stellt sich heraus, dass bei der Konvertierung des maximal möglichen Wertes von datetime in double noch ein Spielraum bei der Anzahl der signifikanten Ziffern vorhanden ist.

Die Schlussfolgerung ist also, dass es in allen Fällen korrekt funktioniert.

Urain:

Dies ist kein sehr korrektes Beispiel, da es zu einem Narren mit einem gläsernen Schwanz für 20 Minuten gesagt wird.

Das ist keine gute Analogie.

Dies ist nur ein Beispiel für die Notwendigkeit, die Grenzwerte von Werten bei der Angabe von Typen zu überprüfen, nur als Hinweis. Aber auch hier gilt: Das ist nicht der Fall.

 

Die vorherigen Berechnungen habe ich nicht korrekt durchgeführt, genauer gesagt hier: 15 Stellen werden verwendet, denn wenn die 16. vorhanden ist, gibt es einen Umrechnungsfehler

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

bis zu 31711762 Jahr datetime to double wird korrekt konvertiert

So schlafen wir gut bis zum 31 Millionsten Jahr.

 

Aufruf von importierten Funktionen aus der ex5-Bibliothek.

Bitte erklären Sie das. Lesen Sie https://www.mql5.com/ru/docs/runtime/imports

Systembibliotheken (DLLs) werden nach den Regeln des Betriebssystems geladen. Wenn die Bibliothek bereits geladen ist (z. B. von einem anderen Expert Advisor und sogar von einem anderen parallel laufenden Client-Terminal), geht der Aufruf an die bereits geladene Bibliothek.

Wie werden ex5-Bibliotheken geladen?Wenn die Bibliothek bereits geladen ist (z. B. durch einen anderen Expert Advisor oder sogar von einem anderen Client-Terminal, das parallel läuft),

Für den Test habe ich die Bibliothek

lib.mq5.

#property library
int      i=0;

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

Kompilieren von lib.mq5 in lib.ex5

Erstellt Expert Advisor

Experte.mq5

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

Hat es zusammengestellt.

Ich habe den Expert Advisor auf EURUSD gesetzt.

Es druckt

0

1

2

3

4

5

Einsetzen eines Expertenberaters (optional) für GBPUSD

Drucke

6 --- von EURUSD Expert Advisor

0 --- von GBPUSD Expert Advisor.

7 --- von EURUSD Expert Advisor

1 --- vom GBPUSD-Berater.

8 --- vom EURUSD-Berater

2 --- vom GBPUSD-Berater.

D.h. eine weitere Kopie der lib.ex5 Bibliothek wird für den GBPUSD Expert Advisor heruntergeladen.

Weiß jemand, wie man die

6 --- von EURUSD Expert Advisor

7 --- von GBPUSD Expert Advisor.

8 --- von EURUSD Expert Advisor.

9 --- vom GBPUSD-Berater.

10 --- EURUSD-Berater

11 --- vom GBPUSD-Berater.

Nur die Möglichkeiten von MT5 nutzen

PS// Oder vielleicht muss ich die Bibliothek auf eine besondere Weise anschließen.

///// D.h. diese ex5-Bibliothek muss einmal geladen werden.

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

Hallo. Können Sie mir das bitte sagen? Warum haben Orders und Trades ein Ticket, Positionen aber nicht?

Und was ist der Unterschied zwischen einem Ticket und einer Kennung?