Fehler, Irrtümer, Fragen - Seite 2939

 
x572intraday:
Alle Preise werden mit fünf Dezimalstellen angezeigt, und einer in der gleichen Liste nimmt es aus irgendeinem Grund so: Warum? Handelt es sich um einen Fehler oder sollte meine Ausgabe so bearbeitet werden, dass sie ein einheitliches Aussehen hat? Nun, sagen wir, ich werde es mit PrintFormat oder fprint kämmen, aber im Prinzip ist es keine falsche Darstellung der Zahl?

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

Nikolai Semko, 2020.01.05 21:41

Ich habe immer diese Frage.
Ständig reden alle über den IEEE-Standard 754, aber die Menschen oft, wenn sie auf Wikipedia gehen - sei es wegen der Komplexität, oder wegen der Faulheit verlassen, ohne die Bedeutung des Standards zu verstehen.

Ich werde ein wenig Zeit darauf verwenden, diese Norm so kurz wie möglich und in einfachen Worten zu erläutern, um auf diesen Beitrag weiter hinzuweisen.


Der Typ double bestehtalso aus 8 Bytes = 64 Bits.(Float 4 Bytes = 32 Bits)

Und die Zahlendarstellung vondouble und float besteht aus 3 Komponenten:Vorzeichen, Exponent und Mantisse


DOPPEL:


FLOAT:

Natürlich gibt es in diesem Format keine dezimale Darstellung von Zahlen, sondern nur eine binäre.

  • Das Vorzeichen ist 1 Bit. Bei 0 ist es + (plus), bei 1 ist es - (minus).
  • Der Exponent speichert den Grad für die Zahl 2. Kann im Bereich von -12610 bis 12710 für Float und -1022 10 bis 102310 für Double liegen
  • Die Mantisse ist der Bruchteil der Zahl selbst in binärer Form, reduziert auf eine Form, in der das Komma nach der ersten Einheit steht, ohne Rücksicht auf diese erste Einheit und das Komma


Ein wenig Verständnis für die binäre Darstellung von Zahlen und ihre Beziehung zu Dezimalzahlen:

2 4= 100002 = 1610

2 3= 10002 = 810

2 2= 1002 = 4

2 1=102= 2

2 0=12=110

2 -1= 0.12 =(1/2)10= 0.510

2 -2= 0.012 = (1/4)10= 0.2510

2 -3= 0.0012 = (1/8)10= 0.12510

2 -4= 0.00012 = (1/16)10= 0.062510

2 -5= 0.000012 = (1/32)10= 0.0312510

2 -6= 0.0000012 = (1/64)10= 0.01562510

2 -7= 0.00000012 = (1/128)10= 0.007812510

2 -8= 0.000000012 = (1/256)10= 0.0039062510

2 -9= 0.0000000012 = (1/512)10= 0.00195312510

2 - 10= 0.00000000012 = (1/1024)10= 0.000976562510

2 - 11= 0.000000000012 = (1/2048)10= 0.0004882812510

2 - 12= 0.0000000000012 = (1/4096)10= 0.00024414062510

2 - 13= 0.00000000000012 = (1/8192)10= 0.000122070312510

Schauen wir uns Beispiele für das Doppelte an:

Beispiel #1

Wir haben eine Dezimalzahl: 891677.4025191

Diese Zahl kann in binärer Form dargestellt werden:

1101100110110001110101.0110011100001011010101111111111000101000001111111010001110
(wer will kann das überprüfen)))

Wir extrahieren die Mantisse der gegebenen Zahl, indem wir das Komma 19 Stellen nach links verschieben (in diesem Fall), so dass es nach der ersten Einheit kommt.

1.1011001101100011101011001110000101101111101111000101000001111101110001110* 2 19

Aber wir haben eine Mantisse von nur 52 Bit. Wir nehmen also die ersten 52 signifikanten Bits

Мантисса = 1011001101100011101011001110000101101111101111000101

Exponent = (19+1023)10 = 100000100102(da der Exponent eine vorzeichenbehaftete Zahl ist und der Exponent negativ sein kann (z.B. wenn wir 0,0000042132 haben), müssen wir 1023 zu 10 addieren(01111111111112), 011111111112 ist Null, alles darüber hinaus ist positiv, weniger ist negativ. Mit anderen Worten: Um den umgekehrten Wert des Exponenten zu erhalten, müssen wir 1023 von dem 11-Bit-Wert des Exponenten abziehen.

Insgesamt sieht unsere Nummer 891677.4025191 indoppelterSchreibweise wie folgt aus:

0100000100101011001101100011101011001110000101101111101111000101

Da es sich aber um eine binäre Darstellung handelt, müssen wir sie genau in Dezimalzahlen umwandeln:

das wäre891677.40251909999996425211429595947265625


Beispiel #2

Wir haben eine Dezimalzahl: -0.00000145258556224114

Diese Zahl kann in binärer Form dargestellt werden:

-0.000000000000000000011000010111101100111010110111010011010101001111001110

Wählen Sie die Mantisse dieser Zahl, indem Sie das Komma einfach um 20 Stellen nach rechts verschieben, so dass es nach der ersten Einheit steht.

1.1000010111101100111010110111010011010101001111001110 * 2 -20

Мантисса = 1000010111101100111010110111010011010101001111001110

Exponent = (-20+1023)10=011111010112

Minuszeichen, also ist das erste Bit 1.

Unsere Gesamtzahl -0,00000145258556224114 wird in der doppelten Ausführung wie folgt aussehen:

1011111010111000010111101100111010110111010011010101001111001110

genau in Dezimalzahlen umrechnen:

это будет -0.00000145258556224113991124017968015191826225418481044471263885498046875



In Ihrem Fall tritt das Problem mit der Zahl 0,01 auf, da sie im Double-Typ in der Form dargestellt wird:

0 01111111000 0100011110101110000101000111101011100001010001111011

was, umgerechnet in das Dezimalsystem, 0,0100000000000000000000208166817117216858513294309377670288085937510 entspricht

Bei der Vertretung

310 = 1.5*2 = 1.12*2 1

510 = 2.5*2 = 10.12*2 1

610 = 1.5*4 = 1.12*2 2

710 = 3.5*2 = 11.12*2 1

kein Problem.

Warum ist die doppelte Zahl 0,01 wirklich größer als 0,01?

Hier ist der Grund dafür:

0 01111111000 0100011110110101110100001010111101011101001010001111011 - 0.0100000000000000000000000020816681711721685132943093776702880859375 Fehler = 0.000 000 000 000 000 000 000 208166817...

0 01111111000 01000111101101011100001010001111010 - 0.009999999999999999984747344334114097569175064563751220703125 Fehler = - 0.000 000 000 000 000 001 5265566...

Um diesen chemischen Prozess zu verstehen, können Sie mit diesen Rechnern herumspielen:
https://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html

https://baseconvert.com/ieee-754-floating-point


https://baseconvert.com/ieee-754-floating-point


 

Vielen Dank für die Informationen. Nun, im Grunde genommen hätten MQs aber unterkorrigiert werden müssen oder wurde die Entscheidung dem Nutzer überlassen?

 

Hm. Gibt es eine Funktion oder eine andere zusätzliche Funktionalität (Bibliothek, Code) zum Speichern von EA-Parametern?

Die Aufgabe besteht darin, einen Ondeinit-Code einzubauen, der z.B. beim Ausführen des EA auf einem Symbol (Zusatzfunktion ist auch die Periodenanalyse) die eingestellte Einstellungsdatei speichert.

Zum Beispiel - EA-Name-Symbol-Punkt.

Datei mit der Möglichkeit zum Überschreiben - nur die letzten Einstellungen für das Symbol.

So werden z. B. die Standardeinstellungen des Testers für den letzten Lauf gespeichert.

 
Guten Tag, ich habe das Problem, dass ich von einem entfernten Computer aus nicht auf die MQL5-Website zugreifen kann, so dass ich den Indikator, den ich gekauft habe, nicht herunterladen kann. Ich kann nicht auf die MQL5-Website zugreifen und kann daher den Indikator, den ich gekauft habe, nicht herunterladen.
 
Slava Botalov:
Hallo, ich habe ein Problem auf einem entfernten Computer, ich kann nicht auf die MQL5-Website zugreifen und daher kann ich den Indikator, den ich gekauft habe, nicht herunterladen. Ich kann den Indikator nicht herunterladen, also kann ich ihn nicht verwenden.


sondern ein entfernter Computer auf Zomro?

 
x572intraday:

Vielen Dank, sehr informativ. Nun, im Grunde genommen, sollte MQs haben, aber unter-korrigiert, oder ist die Entscheidung überlassen, um den Benutzer zu beurteilen?

Sie haben es also nicht verstanden.
Es gibt keine Fehler.
Alles ist so, wie es sein soll.
 
Vladislav Andruschenko:


sondern ein entfernter Computer auf Zomro?

Ja

 
Slava Botalov:
Guten Tag, ich habe das Problem, dass ich von einem entfernten Computer aus nicht auf die MQL5-Website zugreifen kann, so dass ich den Indikator, den ich gekauft habe, nicht herunterladen kann. Ich kann den Indikator nicht herunterladen, also kann ich ihn auch nicht auf der MQL5-Website installieren.
Vladislav Andruschenko:


sondern ein entfernter Computer auf Zomro?

Slawa Botalow:

Ja


Dieser Anbieter wird wegen groben Fehlverhaltens gesperrt:

Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

Warum ist der Zugang zu www.mql4.com blockiert?

Renat Fatkhullin, 2020.11.17 12:16

***

Der gesamte Zomro-Anbieter mit Subnetzen wird wegen massiver betrügerischer Aktivitäten aus seinen Subnetzen gesperrt.

***
 
Nikolai Semko:
Sie verstehen es also nicht.
Es gibt überhaupt keine Fehler.
Alles ist so, wie es sein soll.

Das ist nicht der Punkt. Die Frage ist, wo kann es nützlich sein, insbesondere für Händler, nicht für Programmierer? Solche Zahlen habe ich im Terminal nie gesehen, weder in der Preisskala noch im Auftragserteilungsfenster; dort ist alles überall gleich (irgendwo fünfstellig, irgendwo anders).

 
Vladimir Karputov:


Dieser Anbieter wurde wegen groben Fehlverhaltens gesperrt:

Schade, dann müssen wir auf ein anderes Modell umsteigen. Haben Sie einen Vorschlag?

Grund der Beschwerde: