[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 318

 
okvseok:

es gibt eine Funktion "double MathRound( double value)", aber ich brauche die Rundung auf einen größeren Dezimalbruch, und wenn die Zahl ganzzahlig oder bereits dezimal ist, dann lasse ich sie in Ruhe.

Zum Beispiel: 1) 0,744 gerundet auf 0,8; 1,233 gerundet auf 1,3

2) 0,9 oder 3 oder 1,5 nicht berühren.

double MathRoundDec(double dValue) 
 {
  if (dValue == NormalizeDouble(dValue, 1)) return(dValue);
  return(MathRound(10 * dValue) / 10);  
 }
Ich habe es nicht überprüft, aber das war's auch schon.
 
Zhunko:
Ich habe es nicht überprüft, aber irgendwie.


Völlig nutzlos Geste genug double res=NormalizeDouble(res,1) mathematisch noch behandeln double res = 3; oder double res = 3.0;

Der Unterschied wird nur im Ausdruck (Diagramm) sichtbar, aber das steht nicht in der Problembeschreibung des Autors.

 
FAQ:


Völlig nutzlos Geste genug double res=NormalizeDouble(res,1) mathematisch noch behandeln double res = 3; oder double res = 3.0;

Der Unterschied wird nur im Ausdruck (Diagramm) sichtbar, aber das steht nicht in der Problembeschreibung des Autors.

Nun, Sie können es so machen:

double MathRoundDec(double dValue) 
 {
  return(MathRound(10 * dValue) / 10);  
 }
Ich denke, die erste Variante ist besser. Es wird schneller funktionieren.
 
Zhunko:

Nun, man könnte es so machen:

Ich halte die erste Option für die beste. Es wird schneller gehen.


Diese Option.

 double res=NormalizeDouble(res,1);

sollte die schnellste sein

 
Ich danke Ihnen allen. Ich werde am Montag Bericht erstatten - ich werde alle Optionen ausprobieren!
 
Vadims Version ist 20-25 % schneller, aber der Effekt wird erst ab einer Million Iterationen sichtbar. (überprüft)
 
FAQ:
Vadims Version ist 20-25 % schneller, aber der Effekt wird erst ab einer Million Iterationen sichtbar. (überprüft)

Zeigen Sie mir den Code, wie haben Sie ihn überprüft?
 
FAQ:
Vadims Version ist 20-25 % schneller, aber der Effekt wird erst ab einer Million Iterationen sichtbar. (getestet)
Herzlichen Dank!
 
okvseok:

die richtige Schreibweise: if (OrderSelect (OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY) == OrderTakeProfit() == OrderClosePrice()) Stop=false // d.h. wenn der letzte Auftrag vom Ende bei Take Profit (Gewinnmitnahme bei Erreichen eines bestimmten Niveaus) geschlossen wurde, ist der Stop=false? (Stopp in globalen Variablen)

diese Frage ist aufgekommen, weil die Order durch eine Bedingung if((iClose(NULL,0,1)<ma) && Stop==True) eröffnet wird...

 

Niemals vergleichen, nicht normierte Aufnahmen, nutzlos. Übrigens: Der Schlusskurs einer Take-Order kann sich vom Take-Kurs unterscheiden (real/demo (online))

Daher wäre es korrekter, das Preisdifferenzmodul zu messen und es mit dem Testwert zu vergleichen.

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