Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 154

 
paladin800:
Das heißt, Sie müssen 1,33182 in 1,3318 umrechnen? Sie würden einfach die 5. Stelle nach dem Komma abschneiden oder auf die 4. Stelle aufrunden, z. B. 1,3318 oder 1,3319 statt 1,33186?

Meine Frage ist, ob es einen Fehler gibt oder nicht. Bei der Umwandlung von double in int in meinem Beispiel ist das Ergebnis eins weniger. Bitte überprüfen Sie dies selbst.

   double max=NormalizeDouble(1.33182,4);  
   //double max=1.3318;
   Alert(int(max*10000));
DerAlert sollte 13318 ausgeben, aber er gibt 13317 aus. Wenn nicht auf int gerundet wird, ergibt dies korrekt 13318,0.
 

Sagen Sie mir, ob es einen Unterschied in den Ausdrücken gibt:

if(bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize && bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize)

и

if(( bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize) && ( bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize))
 
sgreen:

Sagen Sie mir, ob es einen Unterschied in den Ausdrücken gibt:

и

Wenn Sie den Verdacht haben, dass etwas nicht in Ordnung ist, machen Sie es wahr:

if(bufferclose[1]<= (  MaxLine(1)-m_open_bar_error*ticksize ) && bufferopen[1]<= (  MaxLine(1)-m_open_bar_error*ticksize ) )
 
Rorschach:

Meine Frage ist, ob es einen Fehler gibt oder nicht. Bei der Umwandlung von double in int in meinem Beispiel ist das Ergebnis eins weniger. Bitte überprüfen Sie das mit sich selbst.

Alert sollte 13318 ausgeben, gibt aber 13317 aus. Also wenn nicht auf int zu reduzieren, dann gibt korrekt 13318.0 aus
Alert gibt keine Fehlermeldung aus. Der Punkt ist, dass die Normalisierung einer Zahl zu einer binären Form führt, die dem gewünschten dezimalen Analogon am nächsten kommt, auch wenn sie (in Ihrem Fall) nicht mehr oder weniger mit ihm übereinstimmt. Denn was durch einen endlichen Dezimalbruch ausgedrückt wird, kann nicht immer durch einen endlichen binären Ausdruck ausgedrückt werden.
int(max*10000)

bewirkt, dass die Nachkommastellen verworfen und nicht gerundet werden (d. h. ähnlich wie bei MathFloor() statt MathRound()), und in Ihrem Fall könnte die normierte Zahl genau 13318, aber 13317,99999999999999997 lauten.

die bei der Ausgabe in Bruchform mit begrenzter Anzahl von Ziffern eine Rundung auf das richtige (erwartete) Ergebnis bewirkt, und wenn der Bruchteil von.... verworfen wird sehen Sie selbst.

Ich hoffe, ich habe mich klar ausgedrückt.

 
pronych:
Gibt es ein Analogon zum Sharp's Partial? oder wie kann man es machen?

Es gibt kein Analogon. Sie können einen Teil der Definition mit #include <partial_class_code.mqh> einbetten.

Manche Menschen imitieren auf diese Weise sogar die Mehrfachvererbung // Ich tue das nicht, ich habe mich daran gewöhnt, ohne sie auszukommen. :)

 
paladin800:

Wenn Sie den Verdacht haben, dass etwas nicht in Ordnung ist, sollten Sie es melden:

Das habe ich bereits. Ich bin nur neugierig.
 
sgreen:
Das habe ich bereits getan. Ich bin nur neugierig.

Ich verstehe. Um auf Ihre vorherige Frage zurückzukommen, kann die Essenz der Aufzeichnung zu diesem Vergleich herangezogen werden:

if (A<=B && C<=D)     // 1
if ((A<=B) && (C<=D)) // 2

Es gibt keinen Unterschied zwischen diesen Einträgen. Gleichzeitig empfehle ich, dass Sie mathematische Berechnungen in if-os einklammern:

if (A<=(B1+B2*B3) && C<=(D1-D2*D3))
Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
MetaDriver:
Die Meldung führt nicht zu einem Fehler. Der Punkt ist, dass die Normalisierung einer Zahl zu einer binären Form führt, die dem gewünschten dezimalen Analogon am nächsten kommt, während sie nicht unbedingt in einer größeren oder kleineren (in Ihrem Fall) Richtung mit ihm übereinstimmt. Da das, was durch einen endlichen Dezimalbruch ausgedrückt wird, nicht immer durch einen endlichen Binärbruch ausgedrückt werden kann . Expression

führt dazu, dass der Bruchteil verworfen und nicht gerundet wird (d.h. es sieht eher aus wie MathFloor() als MathRound()), und in Ihrem Fall könnte die normalisierte Zahl eher 13317.99999999999999997 als genau 13318 sein.

die bei der Ausgabe in Bruchform mit begrenzter Anzahl von Ziffern eine Rundung auf das richtige (erwartete) Ergebnis bewirkt, und wenn der Bruchteil von.... verworfen wird sehen Sie selbst.

Ich hoffe, ich habe mich klar ausgedrückt.

Danke, ich verstehe.

Noch eine Frage: Wie kann ich das bekämpfen, wenn ich nicht auf die Umwandlung in int verzichten kann?

 
Können Sie mir sagen, wie ich die Maklerprovisionen beim Testen eines EA berücksichtigen kann?
 
Rorschach:

Vielen Dank, ich verstehe.

Eine andere Frage: Wie gehen Sie damit um, wenn Sie nicht auf die Überweisung nach int verzichten können?

und man fügt ein paar Epsilons hinzu.

DBL_EPSILON

Die kleinste Zahl, für die die Bedingung 1.0+DBL_EPSILON != 1.0 erfüllt ist


Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов - Документация по MQL5
Grund der Beschwerde: