SYMBOL_PRICE_CHANGE liefert nur 0.00

Rene Holstein
24
Rene Holstein  

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?

Carl Schreiber
Moderator
11026
Carl Schreiber  

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...
Rene Holstein
24
Rene Holstein  

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


Carl Schreiber
Moderator
11026
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.

Uwe Koeppe
278
Uwe Koeppe  
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

Rene Holstein
24
Rene Holstein  

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 :)