[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 318

 
okvseok:

c'è una funzione "double MathRound( double value)", ma ho bisogno dell'arrotondamento ad una frazione decimale più grande, e se il numero è intero o già decimale, allora lascia perdere.

Per esempio: 1) 0,744 arrotondato a 0,8; 1,233 arrotondato a 1,3

2) 0,9 o 3 o 1,5 non toccare.

double MathRoundDec(double dValue) 
 {
  if (dValue == NormalizeDouble(dValue, 1)) return(dValue);
  return(MathRound(10 * dValue) / 10);  
 }
Non ho controllato, ma è più o meno così.
 
Zhunko:
Non l'ho controllato, ma in qualche modo.


Gesto completamente inutile abbastanza doppio res=NormalizeDouble(res,1) gestisce ancora matematicamente doppio res = 3; o doppio res = 3.0;

La differenza sarà visibile solo nella stampa (grafico), ma questo non è nella descrizione del problema da parte dell'autore.

 
FAQ:


Gesto completamente inutile abbastanza doppio res=NormalizeDouble(res,1) gestisce ancora matematicamente doppio res = 3; o doppio res = 3.0;

La differenza sarà visibile solo nella stampa (grafico), ma questo non è nella descrizione del problema da parte dell'autore.

Bene, potete farlo in questo modo:

double MathRoundDec(double dValue) 
 {
  return(MathRound(10 * dValue) / 10);  
 }
Penso che la prima variante sia migliore. Funzionerà più velocemente.
 
Zhunko:

Beh, si potrebbe fare così:

Penso che la prima opzione sia la migliore. Funzionerà più velocemente.


Questa opzione.

 double res=NormalizeDouble(res,1);

dovrebbe essere il più veloce

 
Grazie a tutti. Riferirò lunedì - proverò tutte le opzioni!
 
La versione di Vadim è più veloce del 20-25%, ma l'effetto inizia a mostrarsi costantemente quando il numero di iterazioni supera il milione. (controllato)
 
FAQ:
La versione di Vadim è più veloce del 20-25%, ma l'effetto inizia a mostrarsi costantemente quando il numero di iterazioni supera il milione. (controllato)

Mostrami il codice, come l'hai controllato
 
FAQ:
La versione di Vadim è più veloce del 20-25%, ma l'effetto inizia a mostrarsi costantemente quando il numero di iterazioni supera il milione. (testato)
Grazie mille!
 
okvseok:

il modo corretto di scriverlo: if (OrderSelect (OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY) == OrderTakeProfit() == OrderClosePrice()) Stop=false // cioè se l'ultimo ordine dalla fine ha chiuso a Take Profit (prendendo profitto al raggiungimento di un certo livello), lo Stop=false? (Stop alle variabili globali)

questa domanda è sorta perché l'ordine si apre con una condizione if((iClose(NULL,0,1)<ma) && Stop==True)...

 

Mai confrontare, prese non normalizzate, inutili. E a proposito, il prezzo di chiusura di un ordine take può essere diverso dal prezzo take (reale/demo (online))

Quindi sarebbe più corretto misurare il modulo della differenza di prezzo, confrontandolo con il valore di prova.

if(MathAbs(OrderTakeProfit()-OrderClosePrice())<2*Point){Stop=false;}