Getting values from imacd

 
Hi, 

i trie to get values from the macd indicator, but my recieved values are not the same with the values in the data-window - what i doeing wrong?

   int ea_indicator_macd_M1;
   int ea_indicator_macd_M5;
   double MACD_SIGNAL_M1_Data_Array[11];   
   double MACD_SIGNAL_M5_Data_Array[11];   
   double MACD_M1_Data_Array[11];   
   double MACD_M5_Data_Array[11]; 

int OnInit()
{ 
      ea_indicator_macd_M1=iMACD(_Symbol,PERIOD_M1,12,26,9,PRICE_CLOSE);
      ea_indicator_macd_M5=iMACD(_Symbol,PERIOD_M5,12,26,9,PRICE_CLOSE);

      ArraySetAsSeries(MACD_M1_Data_Array,true);
      ArraySetAsSeries(MACD_M5_Data_Array,true);
}

void OnTick()
{  
        bool new_candle_M1 = helper_isNewCandle(PERIOD_M1);
        bool new_candle_M5 = helper_isNewCandle(PERIOD_M5);


   if(new_candle_M1==true)
   {
      CopyBuffer(ea_indicator_macd_M1,0,0,11,MACD_M1_Data_Array);   
      CopyBuffer(ea_indicator_macd_M1,1,0,11,MACD_SIGNAL_M1_Data_Array);   
      
      Print("test [1] (last closed candle): "+DoubleToString(MACD_M1_Data_Array[1],6));  
      ArrayPrint(MACD_M1_Data_Array);      
      ArrayPrint(MACD_SIGNAL_M1_Data_Array);      
      Print("");
   }

   if(new_candle_M5==true)
   {
      CopyBuffer(ea_indicator_macd_M5,0,0,11,MACD_M5_Data_Array);  
      CopyBuffer(ea_indicator_macd_M5,1,0,11,MACD_SIGNAL_M5_Data_Array);        
   }
}


   struct struct_lastbar_timeopen
   {
      ENUM_TIMEFRAMES timeframe;
      datetime lastbar_timeopen;      
   };
   struct_lastbar_timeopen lastbar_timeopen[];
 
bool helper_isNewCandle(ENUM_TIMEFRAMES other_period=false)
{
   ENUM_TIMEFRAMES timeframe;
   if(other_period!=false){timeframe=other_period;}else{ timeframe=zeiteinheit;}

   int lastbar_timeopen_key=WRONG_VALUE;
   for(int i=0;i<ArraySize(lastbar_timeopen);i++)
   {
      if(lastbar_timeopen[i].timeframe==timeframe)
      {
         lastbar_timeopen_key=i;
         break;
      }
   }
   if(lastbar_timeopen_key==WRONG_VALUE)
   {
      ArrayResize(lastbar_timeopen,ArraySize(lastbar_timeopen)+1);
      lastbar_timeopen_key=ArraySize(lastbar_timeopen)-1;
      lastbar_timeopen[lastbar_timeopen_key].timeframe=timeframe;
   }
   datetime currbar_time=iTime(handelssymbol,timeframe,0);
   if(lastbar_timeopen[lastbar_timeopen_key].lastbar_timeopen!=currbar_time)
   {  
      lastbar_timeopen[lastbar_timeopen_key].lastbar_timeopen=currbar_time;
      return (true);
   }
   return (false);
}
As you can see in the datawindow is a macd value of 0.000011
In my Array i miss that value.

 
Was, wenn du 

MACD_M1_Data_Array[0] printest? Sehe nicht genau, welchen Wert du abfragen willst, bin am Handy..
 

Ein MACD-EA ist bereits auf Deinem Terminal (...\MQL5\Experts\Examples\MACD), dort wird das so gemacht:

...
//--- create MACD indicator
   if(m_handle_macd==INVALID_HANDLE)
      if((m_handle_macd=iMACD(NULL,0,12,26,9,PRICE_CLOSE))==INVALID_HANDLE)
        {
         printf("Error creating MACD indicator");
         return(false);
        }
...
   if(CopyBuffer(m_handle_macd,0,0,2,m_buff_MACD_main)  !=2 ||
      CopyBuffer(m_handle_macd,1,0,2,m_buff_MACD_signal)!=2 ||
...
   m_macd_current   =m_buff_MACD_main[0];
   m_macd_previous  =m_buff_MACD_main[1];
   m_signal_current =m_buff_MACD_signal[0];
   m_signal_previous=m_buff_MACD_signal[1];
...

 
Hallo :-)

Vorab: Ich muss mal gerade blöd fragen weil ich nicht durchblicke wo/wann schreibt man hier in englisch und wann in deutsch. Immer wenn ich in deutsch geschrieben habe wurden meine EInträge gelöscht!?

Zur Sache
Ich möchte die letzten 11 Werte jeweils dann abfragen wenn eine neue Kerze beginnt (ist hier vielleicht schon ein Gedankenfehler von mir am Werk?)
CopyBuffer(ea_indicator_macd_M5,0,0,11,MACD_M5_Data_Array);  

[0] müsste der aktuell, laufende Wert der aktuellen Kerze sein, 1,2,3...die dann der geschlossenen Kerzen - oder hab ich das falsch verstanden?

@Claudius Marius Walter
Hier siehst du das Ergebnis der gewünschten Ausgabe


Was ist nicht verstehe, ist, dass im Datenfenster jedoch zuletzt um 00:20h folgende Macd Werte angezeigt werden



Nachtrag
Ich habe nun einmal zusätzlich einen weiteren Test gemacht,
double testAr[];
      CopyBuffer(ea_indicator_macd_M1,0,0,2,testAr);
      Print("testArt[0]:"+testAr[0]+" [1]"+testAr[1]);


im Ergebnis 

Das scheint mir richtig und ich glaube das ganze könnte sich in Wohlgefallen auflösen auch wenn ich irgendwie beim Blick auf die oben gezeigte situation immer noch sehr irritiert bin.
Hier erhalte ich nun die kompletten Nachkommastellen, was bei entsprechender Aufrundung nun auch zu den angezeigten Werten im Datenfenster passt.

In meinem Array erhalte ich aber nur auf die letzten 5 Stellen gerundete Werte - warum ist das so und wie kann ich das ändern. Ich vermute nämlich dass ich schon längst mit den richtigen Werten (zumindest teilweise) hantiere...
 

ganz einfach,

rechts oben hast du die Auswahl der Sprache.

deutsches Forum deutsche Sprache

englisches Forum englische Sprache

......

 
  1. Double-Werte sind Hochkommazahlen:
    troubles with the doubles
    Double Werte werden dargestellt in der Form x = sm2^e (https://de.wikipedia.org/wiki/IEEE_754) dargestellt.
    Das ändert sich sich auch nicht durch NormalizeDouble(). Intern kann man mit NormalizeDouble() den nächsten,
    gültigen Wert ermitteln ähnlich dem Runden. Für die textliche Ausgabe, auch in csv-Dateien, muss man allerdings PrintFormat() oder StringFormat() oder DoubleToString() verwenden.
    Bsp: https://www.mql5.com/ru/forum/363680/page20#comment_21483982

  2. Auch NormalizeDouble ändert das nicht nur (für die Darstellung) DoubleToString().

  3. Die MQ5 urls auf deutsch haben ein: ../de/.., engl.: ../en/.. und so weiter
    Man kann sich aber alles mit DE im Kopf des jew. Posts sich übersetzen lassen,
    oder, siehe amando, rechts oben die Sprache ändern.

  4. Schau Dir unbedingt die Zugriffsrichtung der Arrays an und lerne das zu verstehen bzw. überprüfe es immer: Ist [0] der ältetste oder der letzte Wert im Array von CopyBuffer()!

  5. Die Anzahl der im Datenfenster dargestellten Dezimalstellen kann im Indikator festgelegt werden.

Новая версия платформы MetaTrader 5 build 2815: Доступ к стакану цен из Python, улучшения в отладчике и профилировщике - Заполните вкладку в терминале.
Новая версия платформы MetaTrader 5 build 2815: Доступ к стакану цен из Python, улучшения в отладчике и профилировщике - Заполните вкладку в терминале.
  • 2021.03.24
  • www.mql5.com
После повторного перезапуска Терминала - меньше секунды. Нижние три строки на две минуты позже сообщения об optimization done. Только после появления этих строк Stop перешла в Start. теперь можно отключить неиспользуемые вкладки наконец-то