Multitimeframe Indicator

 

Hallo,


hab da mal eine Frage zu Indikatoren

Ich bekomme in einem Indikator nur die Daten von kleineren Timeframes, das aktuelle Timeframe und die höheren nimmt er als EmptyValue

ist das ein normales Verhalten, oder hab ich da einen Fehler?

Geladen wird der Indicator richtig, es kommen keine Fehler, weder beim Kompelieren, noch beim Debuggen oder Laden.

Er zeigt nur nix an.

//+------------------------------------------------------------------+
//|                                                 MACrossHisto.mq5 |
//|                                                           amando |
//|                                                                  |
//+------------------------------------------------------------------+


#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 14
#property indicator_plots   1
//--- plot Diff
#property indicator_label1  "MA Cross Histo"
#property indicator_type1   DRAW_COLOR_HISTOGRAM

//#property indicator_style1  STYLE_SOLID
#property indicator_width1  3
#property indicator_color1  clrGreen, clrTomato, clrGray


#property indicator_level1 0
#property indicator_levelcolor clrDarkGray
#property indicator_levelwidth 1
#property indicator_levelstyle STYLE_DOT

//--- indicator buffers

int Hdl_MA1, Hdl_MA2, Hdl_MA3, Hdl_MA4, Hdl_MA5, Hdl_MA6, Hdl_MA7, Hdl_MA8;
double DiffBuffer[];
double DiffBufferColor[];
double MA1[], MA2[], MA3[], MA4[], MA5[], MA6[], MA7[], MA8[];
double Diff1[], Diff2[], Diff3[], Diff4[];



input ENUM_APPLIED_PRICE Price_MA1 = PRICE_CLOSE;
input ENUM_APPLIED_PRICE Price_MA2  = PRICE_OPEN;

input ENUM_TIMEFRAMES Timeframe1 = PERIOD_M5;
input ENUM_TIMEFRAMES Timeframe2 = PERIOD_H1;
input ENUM_TIMEFRAMES Timeframe3 = PERIOD_H4;
input ENUM_TIMEFRAMES Timeframe4 = PERIOD_D1;

input int Periode_MA1 = 5;
input int Periode_MA2 = 5;

input ENUM_MA_METHOD Mode_MA1 = MODE_LWMA;
input ENUM_MA_METHOD Mode_MA2 = MODE_LWMA;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,DiffBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,DiffBufferColor,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2,MA1,INDICATOR_CALCULATIONS);
   SetIndexBuffer(3,MA2,INDICATOR_CALCULATIONS);
   SetIndexBuffer(4,MA3,INDICATOR_CALCULATIONS);
   SetIndexBuffer(5,MA4,INDICATOR_CALCULATIONS);
   SetIndexBuffer(6,MA5,INDICATOR_CALCULATIONS);
   SetIndexBuffer(7,MA6,INDICATOR_CALCULATIONS);
   SetIndexBuffer(8,MA7,INDICATOR_CALCULATIONS);
   SetIndexBuffer(9,MA8,INDICATOR_CALCULATIONS);

   SetIndexBuffer(10,Diff1,INDICATOR_CALCULATIONS);
   SetIndexBuffer(11,Diff2,INDICATOR_CALCULATIONS);
   SetIndexBuffer(12,Diff3,INDICATOR_CALCULATIONS);
   SetIndexBuffer(13,Diff4,INDICATOR_CALCULATIONS);

//Specify colors for each index
   PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);


   Hdl_MA1 = iMA(_Symbol,Timeframe1,Periode_MA1,0,Mode_MA1,Price_MA1);
   Hdl_MA2 = iMA(_Symbol,Timeframe1,Periode_MA2,0,Mode_MA2,Price_MA2);

   Hdl_MA3 = iMA(_Symbol,Timeframe2,Periode_MA1,0,Mode_MA1,Price_MA1);
   Hdl_MA4 = iMA(_Symbol,Timeframe2,Periode_MA2,0,Mode_MA2,Price_MA2);

   Hdl_MA5 = iMA(_Symbol,Timeframe3,Periode_MA1,0,Mode_MA1,Price_MA1);
   Hdl_MA6 = iMA(_Symbol,Timeframe3,Periode_MA2,0,Mode_MA2,Price_MA2);

   Hdl_MA7 = iMA(_Symbol,Timeframe4,Periode_MA1,0,Mode_MA1,Price_MA1);
   Hdl_MA8 = iMA(_Symbol,Timeframe4,Periode_MA2,0,Mode_MA2,Price_MA2);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {


//---
   int start;

   int limit=rates_total-prev_calculated,
       count=(limit>1 ? rates_total : 1),
       cop1=0, cop2=0, cop3=0, cop4=0, cop5=0, cop6=0, cop7=0, cop8=0;

   cop1 = CopyBuffer(Hdl_MA1,0,0,count,MA1);    // MA1
   cop2 = CopyBuffer(Hdl_MA2,0,0,count,MA2);    // MA2
   cop3 = CopyBuffer(Hdl_MA3,0,0,count,MA3);    // MA3
   cop4 = CopyBuffer(Hdl_MA4,0,0,count,MA4);    // MA4
   cop5 = CopyBuffer(Hdl_MA5,0,0,count,MA5);    // MA5
   cop6 = CopyBuffer(Hdl_MA6,0,0,count,MA6);    // MA6
   cop7 = CopyBuffer(Hdl_MA7,0,0,count,MA7);    // MA7
   cop8 = CopyBuffer(Hdl_MA8,0,0,count,MA8);    // MA8

   if(cop1!=count || cop2!=count || cop3!=count || cop4!=count || cop5!=count || cop6!=count || cop7!=count || cop8!=count)
      return 0;


   if(prev_calculated==0)
      start=0;
   else
      start=prev_calculated-1;


   for(int i=start; i<rates_total  && !IsStopped(); i++)
     {


      Diff1[i] = MA1[i] - MA2[i];
      Diff2[i] = MA3[i] - MA4[i];
      Diff3[i] = MA5[i] - MA6[i];
      Diff4[i] = MA7[i] - MA8[i];


      if(i == 1)
         Print(" MA1: ",MA1[i],", MA2: ",MA2[i], ", MA3: ", MA3[i], ", MA4: ", MA4[i], ", MA5: ", MA5[i], ", MA6: ", MA6[i], ", MA7: ", MA7[i], ", MA8: ", MA8[i]);

               if(Diff1[i] > 0
                  && Diff2[i] > 0
                  && Diff3[i] > 0
                  && Diff4[i] > 0
                 )
               DiffBuffer[i] = 1;
               else
               if(
                  Diff1[i] < 0
                  && Diff2[i] < 0
                  && Diff3[i] < 0
                  && Diff4[i] < 0
               )
               DiffBuffer[i] = -1;

               else
               DiffBuffer[i] = 0;


               if(DiffBuffer[i] > 0)
        {
         DiffBufferColor[i]
            = 0;
        }      //Assign color with index=zero (0)
      else
        {
         DiffBufferColor[i] = 1;
        }       //Assing color with index=one (1)

      //DiffBuffer[i] = MA1[i] - MA2[i];
     }


//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+


lg

Amando

Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Indikatorkonstanten / Typen der Indikatoren
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Indikatorkonstanten / Typen der Indikatoren
  • www.mql5.com
Typen der Indikatoren - Indikatorkonstanten - Konstanten, Enumerationen und Strukturen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 

Schau Dir an, wie hier die Parameter der jew. CopyBuffer-Aufrufe bestimmt werden. Jew. vor dem Aufruf: https://www.mql5.com/de/articles/2837

MTF-Indikatoren als Werkzeuge der technischen Analyse
MTF-Indikatoren als Werkzeuge der technischen Analyse
  • www.mql5.com
Die meisten Händler sind sich einig, dass eine Zustandsanalyse des aktuellen Marktes mit der Bewertung höherer Zeitrahmen beginnt. Die Analyse wird nach unten auf niedrigere Zeitrahmen bis zu demjenigen durchgeführt, in dem der Handel durchgeführt wird. Diese Analysemethode scheint ein obligatorischer Bestandteil des professionellen Ansatzes für einen erfolgreichen Handel zu sein. In diesem Artikel werden wir Indikatoren auf mehreren Zeitrahmen (multi-timeframe, MTF) und ihre Erstellungswege diskutieren, sowie Codebeispiele für MQL5 liefern. Neben der allgemeinen Bewertung von Vor- und Nachteilen werden wir einen neuen Indikatoransatz mit dem MTF-Modus vorschlagen.
Grund der Beschwerde: