Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1294

 
ANDREY:

Guten Tag an alle!

Ich versuche, von mql4 auf mql5 zu wechseln.

Frage: Warum berechnet und zeigt mql5 einen mir unbekannten Ausdruck an, wie z.B. 2.99999999 - (minus) 05 anstatt der Differenz zwischen dem aktuellen Preis und dem Wert der Hay-Variable, die <1 sein sollte (wie in mql4)?

Wie kann ich mql5 dazu bringen, die Differenz zwischen diesen Werten korrekt zu berechnen? Ich normalisiere alle Werte mit NormalizeDouble(), aber die oben genannten Werte

Werte werden unverändert angezeigt. Dies ist für mich seltsam, da beide Werte vom doppelten Typ sind

Ich danke Ihnen allen für Ihre Hilfe.


2,9999999999 -(minus)05= 2,99999999 / 100000 = 0,000029999999999. So wird es in der Mathematik gemacht.

-(minus)05 ist die Division durch 10 hoch fünf.

 
IndependentMK:

Hallo noch mal.
Bitte achten Sie auf die Frage eines Neulings.
Ich muss auf Fehler im Code hinweisen, denn im Tester öffnet der EA keine Aufträge...
Der Compiler zeigt keine Fehler oder Warnungen an, und auch im Journal gibt es keine Fehler...

Es lässt sich nicht öffnen, weil eine der Bedingungen nicht erfüllt ist.

Sie lautet
.

while(MA_Smoth_B > MA_Smoth_S)

oder dies

if(MA_Simpl_B_Op < MA_Simpl_S_Op && MA_Simpl_B_Cl > MA_Simpl_S_Cl)

Kommentieren Sie die beiden Blitze aus // und Sie werden sehen, welcher es ist. So werden Sie den Fehler finden.

 
Александр:

2,9999999999 -(minus)05= 2,99999999 / 100000 = 0,00002999999999999. So wird es in der Mathematik gemacht.

-(minus)05 ist die Division durch 10 hoch fünf.

Danke für die Antwort, aber warum berechnet das Programm nicht die Differenz zwischen dem Preis 1,33671 und Hay 1,33664 anstelle des Ausdrucks, der 0,00007 sein sollte, sondern gibt stattdessen den Ausdruck aus?

Wenn ich die Hay-Variable mit 1,33664 durch die Konstante 1,33664( SymbolInfoDouble(Symbol(),SYMBOL_BID) - 1,33664 ) ersetze, berechnet das Programm die tatsächliche Differenz zwischen diesen Werten, nämlich 0,00007. Die Hay-Variable im Code nimmt den Eröffnungskurswert der Order des vorherigen Ticks auf, also den doppelten Wert von 1,33664.

Ich danke Ihnen im Voraus für Ihre Hilfe.

 
ANDREY:

Danke für die Antwort, aber warum berechnet das Programm nicht die Differenz zwischen dem Kurswert 1,33671 und Hay 1,33664 anstelle des Ausdrucks, der 0,00007 sein sollte, sondern gibt stattdessen den Ausdruck aus?

Vielen Dank im Voraus für den Tipp.

DoubleToString(). Hier geht es nicht um MQL5, sondern um die falsche Ausgabe von realen Werten im Protokoll. Dies gilt auch für MQL4.

Документация по MQL5: Преобразование данных / DoubleToString
Документация по MQL5: Преобразование данных / DoubleToString
  • www.mql5.com
[in]  Формат точности. Если значение digits лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой. Если значение digits лежит в диапазоне от -1 до -16, то...
 
Artyom Trishkin:

DoubleToString(). Und es geht nicht um MQL5, sondern um Ihre fehlerhafte Ausgabe von realen Werten im Protokoll. Dies gilt auch für MQL4.

Ich hab's. Ich danke Ihnen. Solche Probleme habe ich noch nie gehabt. Jetzt werde ich es wissen.

Ich bin mir nicht ganz sicher, was das Präzisionsformat im Zusammenhang mit meinem Code bedeutet. Es scheint mir die Anzahl der Dezimalstellen zu sein.
Aber in MT4, in genau dem gleichen Code (mit Ausnahme von OrderSend), wenn ich mich richtig erinnere, gibt die Print-Funktion immer den realen Wert der Differenz zwischen zwei Kurswerten aus, nämlich die Zahl kleiner als 1 (0,00000) mit 5 Dezimalstellen nach 0.

 
ANDREY:

Ich hab's. Ich danke Ihnen. Das ist mir noch nie begegnet. Jetzt werde ich es wissen.

Ich bin mir noch nicht ganz sicher, was das Genauigkeitsformat in Bezug auf meinen Code bedeutet. Es scheint mir die Anzahl der Dezimalstellen zu sein.
Aber in MT4, in genau dem gleichen Code (mit Ausnahme von OrderSend), wenn ich mich richtig erinnere, gibt die Print-Funktion immer den realen Wert der Differenz zwischen zwei Kurswerten aus, nämlich die Zahl kleiner als 1 (0,00000) mit 5 Dezimalstellen nach 0.

Die tatsächlichen Datenwerte werden überall ausgedruckt. Es handelt sich lediglich um ein anderes Format für die Darstellung reeller Zahlen. Wenn das Terminal kein Ausgabeformat angibt, entscheidet es selbst, welches Format am besten geeignet ist. Dies setzt natürlich voraus, dass Sie alle Formate der Zahlendarstellung kennen.

Es ist alles in der Hilfe.

 
Artyom Trishkin:

Echte Datenwerte werden überall angezeigt. Es handelt sich lediglich um ein anderes Format für die Darstellung reeller Zahlen. Wenn das Terminal kein Ausgabeformat angibt, entscheidet es, welches Format am besten geeignet ist. Dies setzt natürlich voraus, dass Sie alle Zahlenformate kennen.

Alles steht in der Hilfe.

MT4 und MT5 haben also unterschiedliche Formate für die Darstellung von reellen Zahlen?
Was sollte ich in der mql5-Hilfe lesen, um diese Frage zu klären?

Vielen Dank für die Hilfe.

 
Michail_David:
Hallo, liebe Experten. Ich brauche Ihre Hilfe, um den Indikator zu korrigieren. Das Wesen des Indikators ist wie folgt. Berechnen Sie das Ausmaß des Preisanstiegs im Vergleich zum vorherigen Balken. Für Null nimmt einen Stern bar. Das heißt, der Eröffnungskurs ist gleich dem Schlusskurs. Beim Kompilieren keine Fehler, aber beim Testen ein Fehler in der Zeile 80 20 Zeichen. Auch die Signalleitung ist falsch gezeichnet. Aber ich denke, das ist der Grund für die falsche Berechnung des Hauptpuffers. Bitte helfen Sie mir, das Problem zu beheben.

Ja. Es sieht so aus, als ob nur einige wenige hier Hilfe bekommen.

 
Michail_David:

Ja. Es sieht so aus, als ob nur einige wenige hier Hilfe bekommen.

Versuchen Sie dies.

//--- typical price and its moving average
   for(i=0; i<rates_total-1; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
 
Vitaly Muzichenko:

Versuchen Sie dies.

Vielen Dank, Vitaly. Aber immer noch erhalte ich einen Fehler in Zeile ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); auf Element [i}.

Grund der Beschwerde: