Come si fa a passare un'enumerazione in modo coerente? - pagina 4

 
fxsaber:
Quasi quattro volte più veloce di NormalizeDouble standard (build 1395)... è una stampella degli sviluppatori.

Cos'è quasi quattro volte più veloce? Mostrami il codice!
 
Anch'io sono sorpreso delle 4 volte...
E non è molto chiaro come cadano gli array o gli switch, è pura matematica.
 
Dmitry Fedoseev:
Cos'è quasi quattro volte più veloce? Dammi il codice!
Non si sa quanti giorni nel codebase per l'ispezione. Il controllore deve essere in vacanza.
 
fxsaber:
Nella kodobaza per un'ispezione per un numero sconosciuto di giorni. L'ispettore è probabilmente in vacanza.
Credo che abbiano iniziato a pubblicarlo oggi. Forse verranno anche da noi ))))
 
Ihor Herasko:
Credo che abbiano iniziato a pubblicarlo oggi. Forse raggiungeranno anche noi ))))
Ci siamo capiti. Io no.
 
Dmitry Fedoseev:
Cos'è quasi 4 volte più veloce? Codice, per favore!

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

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

Fate attenzione quando usate questa funzione, funzionerà correttamente su una gamma di valori più piccola di NormalizeDouble.

Non vi spiegherò perché - indovinate da soli.

La funzione NormalizeDouble funziona:

  1. Si seleziona la parte intera - I
  2. La parte frazionaria è selezionata - F
  3. F = F * 10^digit
  4. F = F (+ o - a seconda del segno) 0,5
  5. F = (parte intera di F) / 10^digit
  6. risultato = I + F
 
Tutto sommato, non c'era nessuna sensazione.
 
Ilyas:

Fate attenzione quando usate questa funzione, funzionerà correttamente su una gamma di valori più piccola di NormalizeDouble.

Non vi spiegherò perché - indovinate da soli.

La funzione NormalizeDouble funziona:

  1. La parte intera viene rilevata - I
  2. La parte frazionaria è selezionata - F
  3. F = F * 10^digit
  4. F = F (+ o -, a seconda del segno) 0,5
  5. F = (parte intera da F) / 10^digit
  6. risultato = I + F

La descrizione della funzione contiene la seguente nota

Ivalori di StopLoss e TakeProfit calcolati, così come i valori dei prezzi aperti per gli ordini pendenti devono essere normalizzati con la precisione che può essere ottenuta daDigits().

Questo è vero solo per i simboli che hanno un passo di prezzo minimo di 10^N, dove N è un intero e non positivo. Se la fase di prezzo minimo ha un valore diverso, allora la normalizzazione dei livelli di prezzo prima di OrderSend è un'operazione senza senso, che nella maggior parte dei casi si tradurrà in un ritorno di OrderSend falso.


È una buona idea correggere le rappresentazioni obsolete nell'aiuto.

NormalizeDouble è completamente screditato. Non solo l'implementazione è ritardata, ma è anche senza senso su più simboli di scambio (ad esempio RTS, MIX, ecc.).

Per quanto riguarda l'implementazione alternativa presentata, è accurata come l'originale sia in positivo che in negativo. E fa l'arrotondamento allo stesso modo. Solo che funziona 4 volte più velocemente.

 
fxsaber:

Questo è vero solo per i personaggi che hanno un passo di prezzo minimo di 10^N, dove N è un intero e non positivo. Se il livello di prezzo minimo ha un valore diverso, allora la normalizzazione dei livelli di prezzo prima di OrderSend è un'operazione senza senso, che nella maggior parte dei casi causerà il ritorno di OrderSend falso.

Perché dovrebbe?