SYMBOL_PRICE_CHANGE liefert nur 0.00

 

Hallo @community,


ich beschäftige mich seit erst einer Woche mit der Programmierung im MetaEditor. Ich versuche mittels

Comment("prozent>>"+string(NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_PRICE_CHANGE), _Digits)));

den Startwert in % im Vergleich zum Vortag anzuzeigen. Wenn ich nun mittels Strategietester mal so 3-4 Tage laufen lasse, ändert sich nie der Wert. Was muss ich da noch angeben?

 

Das kann an Vielem liegen. Auch daran, dass die Darstellung im Visualizer zeitlich verzögert ist - wegen der Ausführungsgeschwindikeit gibt es wenige Aktualisierungen des Bildes. Zeig mal den ganzen Code, nicht nur die Zeile. Übrigens um reelle Zahlen mit genau n-Nachkommastellen darzustellen muss man StringFormat(), PrintFormat() oder DoubleToString() verwenden: https://www.mql5.com/en/articles/1561.

Ist zwar for MQ4 gilt aber auch für MQ5.

Druck das mal ins Log mit PrintFormat()

Arbeiten mit Doubles in MQL4
Arbeiten mit Doubles in MQL4
  • www.mql5.com
Die MQL Programmierung eröffnet neue Möglichkeiten für das automatisierte Trading, viele Menschen auf der ganzen Welt schätzen es bereits. Wenn wir einen Expert Advisor für das Trading schreiben, müssen wir sicher sein, dass er korrekt arbeitet. Viele Neulinge haben oft ein paar Fragen, wenn die Ergebnisse einiger mathematischer Berechnungen...
 

Mhh, das hat nichts geändert. In der Konsole steht immer 0.00. Mein Code macht noch nichts außer ASK und BID anzeigen. Das geht auch soweit. Also habe ich den nächsten Schritt probiert - nämlich den %-Wert im Vergleich zum Vortag zu holen...

// Ask Preis

double ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK), _Digits);

// Bid Preis

double bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID), _Digits);

void OnTick()

{

   Comment("Prozent: "+string(NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_PRICE_CHANGE), _Digits))+"%");
   PrintFormat(DoubleToString(NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_PRICE_CHANGE), _Digits),2));
}

Log:

2020.10.09 22:09:58.235 2020.10.07 22:58:31   0.00


 

Vielleicht gibt es diesen Wert nur für Optionen und nicht bei CFDs, wegen der nachfolgenden Werte wie , SYMBOL_PRICE_VOLATILITY?, SYMBOL_PRICE_THEORETICA, ...?

Wen Du den Wert braucht müsstest Du ihn wohl selber berechnen.

 
Carl Schreiber:

Vielleicht gibt es diesen Wert nur für Optionen und nicht bei CFDs, wegen der nachfolgenden Werte wie , SYMBOL_PRICE_VOLATILITY?, SYMBOL_PRICE_THEORETICA, ...?

Wen Du den Wert braucht müsstest Du ihn wohl selber berechnen.

Hallo Rene,

ich habe das so gelöst...

Prozent=NormalizeDouble((((iClose(Symbol(),PERIOD_D1,0)-iClose(Symbol(),PERIOD_D1,1))/iClose(Symbol(),PERIOD_D1,1))*100),4);

Gruß Uwe

 

Hallo Uwe,

deine Lösung funktioniert bestens. Ich bin zwar noch nicht ganz dahinter gestiegen, wie was funktioniert, aber ich bin dran ;)

Besten Dank jedenfalls :)

 
Arr Hol #:
Comment("Prozent: "+string(NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_PRICE_CHANGE), _Digits))+"%");

Hallo,

es ist schon sehr lange her, dass hier gepostet wurde.

Trotzdem platziere ich die richtige Abrundung des Nachkommazahlen.

// Statt das
Comment("Prozent: "+string(NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_PRICE_CHANGE), _Digits))+"%");

// Das
Comment("Prozent: "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_PRICE_CHANGE), _Digits)+"%");

Und jetzt eine Erklärung.

Sie haben beim Comment string() benutzt und das mach alles ungenau.

Weil Comment() ein String ist, sollte man auch den Preis als String definieren.

Statt NormalizeDouble ,    DoubleToString !!

Gruß Igor

Grund der Beschwerde: