Wie gehe ich eine Aufzählung konsequent durch? - Seite 4

 
fxsaber:
Fast viermal schneller als Standard NormalizeDouble (Build 1395)... ist eine Krücke der Entwickler.

Was ist fast viermal so schnell? Zeigen Sie mir den Code!
 
Ich bin auch überrascht über die 4 Mal...
Und es ist nicht wirklich klar, wie Arrays oder Schalter dort hineinpassen. Das ist reine Mathematik.
 
Dmitry Fedoseev:
Was ist fast viermal so schnell? Gib mir den Code!
Es ist nicht abzusehen, wie viele Tage die Codebasis für die Inspektion benötigt. Der Prüfer muss im Urlaub sein.
 
fxsaber:
In der kodobaza für eine Inspektion für eine unbekannte Anzahl von Tagen. Der Inspektor ist wahrscheinlich im Urlaub.
Ich glaube, sie haben heute damit begonnen, sie zu veröffentlichen. Vielleicht werden sie auch zu uns kommen ))))
 
Ihor Herasko:
Ich glaube, sie haben heute damit begonnen, sie zu veröffentlichen. Vielleicht erreichen sie auch uns ))))
Sie haben es verstanden. Ich weiß es nicht.
 
Dmitry Fedoseev:
Was ist fast 4-mal schneller? Code, bitte!

https://www.mql5.com/ru/code/16169

// Почти в четыре раза быстрее соответствующей стандартной функции (build 1395)
#define NormalizeDouble PRICE_COMPARE::MyNormalizeDouble
Price_Compare
Price_Compare
  • Stimmen: 1
  • 2016.08.25
  • fxsaber
  • www.mql5.com
Изящное и шустрое сравнение double-значений "цены".
 

Seien Sie vorsichtig, wenn Sie diese Funktion verwenden, da sie bei einem kleineren Wertebereich als NormalizeDouble korrekt funktioniert.

Ich werde nicht erklären, warum - raten Sie selbst.

Die Funktion NormalizeDouble funktioniert :

  1. Der ganzzahlige Teil wird ausgewählt - I
  2. Bruchteil wird ausgewählt - F
  3. F = F * 10^Ziffern
  4. F = F (+ oder - je nach Vorzeichen) 0,5
  5. F = (ganzzahliger Teil von F) / 10^Ziffern
  6. Ergebnis = I + F
 
Alles in allem war es keine Sensation.
 
Ilyas:

Seien Sie vorsichtig, wenn Sie diese Funktion verwenden, da sie bei einem kleineren Wertebereich als NormalizeDouble korrekt funktioniert.

Ich werde nicht erklären, warum - raten Sie selbst.

Die Funktion NormalizeDouble funktioniert :

  1. Der ganzzahlige Teil wird erkannt - I
  2. Bruchteil wird ausgewählt - F
  3. F = F * 10^Ziffern
  4. F = F (+ oder -, je nach Vorzeichen) 0,5
  5. F = (ganzzahliger Teil von F) / 10^Ziffern
  6. Ergebnis = I + F

Die Funktionsbeschreibung enthält den folgenden Hinweis

Dieberechneten StopLoss- und TakeProfit-Werte sowie die Werte der offenen Preise für schwebende Aufträge sollten mit der Genauigkeit normalisiert werden, die mitDigits()erzielt werden kann.

Dies gilt nur für Symbole, die einen Mindestpreisschritt von 10^N haben, wobei N eine ganze Zahl und nicht positiv ist. Wenn der Mindestpreisschritt einen anderen Wert hat, dann ist die Normalisierung der Preisniveaus vor OrderSend eine sinnlose Operation, die in den meisten Fällen zu einem falschen OrderSend führt.


Es ist eine gute Idee, veraltete Darstellungen in der Hilfe zu korrigieren.

NormalizeDouble ist völlig diskreditiert. Nicht nur, dass die Umsetzung verzögert ist, sie ist auch bei mehreren Börsensymbolen (z. B. RTS, MIX usw.) sinnlos.

Die vorgestellte alternative Umsetzung ist sowohl im positiven als auch im negativen Sinne genauso genau wie das Original. Die Rundung erfolgt auf die gleiche Weise. Nur funktioniert es 4 Mal schneller.

 
fxsaber:

Dies gilt nur für Zeichen, die einen Mindestpreisschritt von 10^N haben, wobei N eine ganze Zahl und nicht positiv ist. Wenn der Mindestpreisschritt einen anderen Wert hat, dann ist die Normalisierung der Preisniveaus vor OrderSend eine sinnlose Operation, die in den meisten Fällen dazu führt, dass ein falscher OrderSend zurückgegeben wird.

Warum sollte sie?