moving average zeichnet nicht bei anderem Timeframe

 

Hallo,

ich habe einen Moving average Indikator erstellt (nach einen Tutorial). Der funktioniert auch super. Ich würde jetzt gern aber eine ander Zeitperiode einstellen. Mache ich das und nehme nicht PERIOD_CURRENT , zeichnet er mir den MA nicht mehr. Könnte mir jemand erklären wieso das so ist bzw. wie ich das fixen kann.Vielen Dank vorab


Also das funktioniert


SlowMaHandle = iMA(_Symbol,PERIOD_CURRENT,InpSlowMaPeriod,0,InpSlowMaMode,PRICE_CLOSE);


Das funktioniert nicht mehr


SlowMaHandle = iMA(_Symbol,PERIOD_M15,InpSlowMaPeriod,0,InpSlowMaMode,PRICE_CLOSE);




kompletter Code:

//+------------------------------------------------------------------+
//|                                                          iMA.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

#property indicator_buffers     1                                                                                       //      How many data buffers are we using
#property indicator_plots               1       

#property indicator_type1 DRAW_LINE
#property indicator_label1 "slowMA"
#property indicator_color1 clrGray
#property indicator_style1 STYLE_SOLID
#property indicator_width1 4


input int InpSlowMaPeriod = 13;                          // Slow Moving Average Period
input ENUM_TIMEFRAMES InpSlowMaTime = PERIOD_M15;  // Fast Moving Average TimeFrame
input ENUM_MA_METHOD InpSlowMaMode = MODE_EMA;   // Slow Moivng Average Method


double BufferSlowMa[];
double BufferFastMa[];

int MaxPeriod;
int SlowMaHandle;
int FastMaHandle;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   
   SetIndexBuffer(0, BufferSlowMa,INDICATOR_DATA);
   
   MaxPeriod = 13;
   
   SlowMaHandle = iMA(_Symbol,PERIOD_M15,InpSlowMaPeriod,0,InpSlowMaMode,PRICE_CLOSE);
   
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,MaxPeriod);
   
   return(INIT_SUCCEEDED);
  }
  
  
void OnDeinit(const int reason)
  {
    if(SlowMaHandle != INVALID_HANDLE) IndicatorRelease(SlowMaHandle);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
  
   // respect the stop flag
   if(IsStopped()) return(0);
   
   // check that we have enough bars to calculate
   if(rates_total < MaxPeriod) return(0);
   
   // check that the moving averages have been all calculated
   if(BarsCalculated(SlowMaHandle) < rates_total) return(0);
   if(BarsCalculated(FastMaHandle) < rates_total) return(0);
   
   int copyBars = 0;
   
   // we do not want to calculate all bars from the beginning again
   if(prev_calculated > rates_total || prev_calculated <= 0) {
      copyBars = rates_total;
   }
   else {
      copyBars = rates_total - prev_calculated; 
      if(prev_calculated > 0) copyBars++;
   }
   
   // respect the stop flag
   if(IsStopped()) return(0);
   
   if(CopyBuffer(SlowMaHandle,0,0,copyBars,BufferSlowMa) <= 0) return(0);
   
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
street-sweeper:

Hallo,

ich habe einen Moving average Indikator erstellt (nach einen Tutorial). Der funktioniert auch super. Ich würde jetzt gern aber eine ander Zeitperiode einstellen. Mache ich das und nehme nicht PERIOD_CURRENT , zeichnet er mir den MA nicht mehr. Könnte mir jemand erklären wieso das so ist bzw. wie ich das fixen kann.Vielen Dank vorab


Also das funktioniert



Das funktioniert nicht mehr





kompletter Code:

 Ultitimeframe indis kann man nicht so einfach erstellen

suche mal in der codebase, da gibts einige 

 
amando:

 Ultitimeframe indis kann man nicht so einfach erstellen

suche mal in der codebase, da gibts einige 

Danke für die Infos. Kannst du mir vielleicht noch sagen wieso man das nicht so einfach darsellen kann bzw was das Problem ist? Danke
 
Die Charts sind balken-orientiert und da passt ein anderer Zeitrahmen nicht so ohne weiteres 'drauf' Aber das alles siehst Du wenn Du Dir Beispiele suchtst und anschaust.
 
Carl Schreiber:
Die Charts sind balken-orientiert und da passt ein anderer Zeitrahmen nicht so ohne weiteres 'drauf' Aber das alles siehst Du wenn Du Dir Beispiele suchtst und anschaust.
Ok vielen Dank für die Antwort.
 
Ganz einfach, es geht um Zeiträume.

30 Perioden in M5 sind das gleiche wie 10 Perioden in M15.

Also erhälst du auch nur 10 Werte aus der CopyBuffer Funktion.

Wo kommend die fehlenden Werte her?

Und außerdem:
https://www.mql5.com/de/forum/371141#comment_22833226





 
Dominik Egert:
Ganz einfach, es geht um Zeiträume.

30 Perioden in M5 sind das gleiche wie 10 Perioden in M15.

Also erhälst du auch nur 10 Werte aus der CopyBuffer Funktion.

Wo kommend die fehlenden Werte her?

Und außerdem:
https://www.mql5.com/de/forum/371141#comment_22833226





das stimmt so nicht ganz, das stimmt nur bei der SMA Berechnung, bei allen anderen MA's werden die Werte dann falsch dargestellt

 
Darf ich fragen, was nicht stimmt?

Ich sehe den Bezug nicht und kann daher nicht nachvollziehen, was genau nicht stimmt.


 
Dominik Egert:
Darf ich fragen, was nicht stimmt?

Ich sehe den Bezug nicht und kann daher nicht nachvollziehen, was genau nicht stimmt.


Ganz einfach

ein ema 10 auf h4 ist nicht der ema40 auf h1

 
street-sweeper:

Hallo,

ich habe einen Moving average Indikator erstellt (nach einen Tutorial). Der funktioniert auch super. Ich würde jetzt gern aber eine ander Zeitperiode einstellen.

Also auf DER bekannten Videoplattform gibt es ein Tutorial von Orchard Forex, wo er einen Indikator erstellt, der einen MA aus einem höheren Timeframe abbildet. Dann kannste die Beiden Vorschläge mal vergleichen. Der aus dem höheren TF wird auf jeden Fall stufiger sein.

(Nachtrag: kann das beim EMA durch die exponentielle Gewichtung sein? Wird die bei mehr Bars anders verteilt? Gleich mal nachschauen.)
Gruß.
 
amando:

Ganz einfach

ein ema 10 auf h4 ist nicht der ema40 auf h1

Oh... Ihr habt völlig Recht, der Gedanke kam mir auch noch gar nicht. Theoretisch müsste aber auch ein SMA 10 auf H4 was Anderes sein als ein SMA 40 auf H1.

Bei PRICE_CLOSE ist es ganz klar: Nicht alle Schlusspreise von H1 sind in H4 repräsentiert, werden jedoch bei jeder neuen Kerze als Berechnungsgrundlage herangezogen, so lange sie sich innerhalb der Periode befinden. Puh... noch nie genau drauf geachtet...

Stellt man bei Beiden PRICE_MEDIAN ein könnte etwas Ähnlicheres rauskommen, aber da die Kerzen bei der 10er anders aus dem Array rausfallen wenn sie die Periode überschreiten, wird es wohl auch nicht das Selbe sein.

Grund der Beschwerde: