Comment faire pour passer une énumération de manière cohérente ? - page 4

 
fxsaber:
Presque quatre fois plus rapide que NormalizeDouble standard (build 1395)... est une béquille des développeurs.

Qu'est-ce qui est presque quatre fois plus rapide ? Montrez-moi le code !
 
Je suis aussi surpris par les 4 fois...
Et on ne sait pas vraiment comment les tableaux ou les commutateurs se situent dans ce contexte. Ce sont des mathématiques pures.
 
Dmitry Fedoseev:
Qu'est-ce qui est presque quatre fois plus rapide ? Donnez-moi le code !
Il n'y a pas moyen de savoir combien de jours dans le codebase pour l'inspection. Le vérificateur doit être en vacances.
 
fxsaber:
Dans le kodobaza pour une inspection pendant un nombre de jours inconnu. L'inspecteur est probablement en vacances.
Je pense qu'ils ont commencé à le poster aujourd'hui. Peut-être qu'ils viendront à nous aussi ))))
 
Ihor Herasko:
Je crois qu'ils ont commencé à l'afficher aujourd'hui. Peut-être qu'ils nous atteindront aussi ))))
Tu l'as. Je ne le fais pas.
 
Dmitry Fedoseev:
Qu'est-ce qui est presque 4 fois plus rapide ? Le code, s'il vous plaît !

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

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

Soyez prudent lorsque vous utilisez cette fonction, elle fonctionnera correctement sur une gamme de valeurs plus petite que NormalizeDouble.

Je ne vais pas expliquer pourquoi - devinez par vous-même.

La fonction NormalizeDouble fonctionne :

  1. La partie entière est sélectionnée - I
  2. La partie fractionnaire est sélectionnée - F
  3. F = F * 10^chiffres
  4. F = F (+ ou - selon le signe) 0,5
  5. F = (partie entière de F) / 10^chiffres
  6. résultat = I + F
 
Dans l'ensemble, il n'y a eu aucune sensation.
 
Ilyas:

Soyez prudent lorsque vous utilisez cette fonction, elle fonctionnera correctement sur une gamme de valeurs plus petite que NormalizeDouble.

Je ne vais pas expliquer pourquoi - devinez par vous-même.

La fonction NormalizeDouble fonctionne :

  1. La partie entière est détectée - I
  2. La partie fractionnaire est sélectionnée - F
  3. F = F * 10^chiffres
  4. F = F (+ ou -, selon le signe) 0,5
  5. F = (partie entière de F) / 10^chiffres
  6. résultat = I + F

La description de la fonction contient la note suivante

Lesvaleurs calculées de StopLoss et TakeProfit, ainsi que les valeurs des prix ouverts pour les ordres en attente doivent être normalisées avec la précision qui peut être obtenue parDigits().

Cela n'est vrai que pour les symboles qui ont un échelon de prix minimum de 10^N, où N est un nombre entier et non positif. Si le pas de prix minimum a une valeur différente, alors la normalisation des niveaux de prix avant l'envoi d'un ordre est une opération dénuée de sens, qui dans la plupart des cas aboutira au renvoi d'un faux ordre.


Il est bon de corriger les représentations périmées dans l'aide.

NormalizeDouble est complètement discrédité. Non seulement l'implémentation est retardée, mais elle n'a aucun sens sur les symboles d'échange multiples (par exemple RTS, MIX, etc.).

Quant à la mise en œuvre alternative présentée, elle est aussi précise que l'original, tant pour les aspects positifs que négatifs. Et il effectue les arrondis de la même manière. Seulement, il fonctionne 4 fois plus vite.

 
fxsaber:

Cela n'est vrai que pour les caractères dont l'échelon de prix minimum est de 10^N, où N est un nombre entier et non positif. Si le pas de prix minimum a une valeur différente, alors la normalisation des niveaux de prix avant l'envoi d'un ordre est une opération dénuée de sens qui, dans la plupart des cas, entraînera le renvoi d'un faux ordre.

Pourquoi le devrait-elle ?