Простой индикатор сделать мультитаймфреймовым - страница 2

 
я думаю мы друг друга не правильно поняли....Ярким примером для решения моей проблемы в понимании мультитаймфрейменности будет показать пример как сделать индикатор фрактал мульттаймфрейменным. а именно что я хочу - на графике М1 видеть фракталы М5. Все просто...ничего не усложняем.... таймфрейм м5 я задаю в параметрах индикатора. Как это реализовать?
 
Tango_X:
я думаю мы друг друга не правильно поняли....Ярким примером для решения моей проблемы в понимании мультитаймфрейменности будет показать пример как сделать индикатор фрактал мульттаймфрейменным. а именно что я хочу - на графике М1 видеть фракталы М5. Все просто...ничего не усложняем.... таймфрейм м5 я задаю в параметрах индикатора. Как это реализовать?

К сожалению вы правы, мы не понимаем друг друга. Думаю, на форуме найдутся ребята которые смогут вам помочь.

Удачи! 

 
Farkhat Guzairov:

К сожалению вы правы, мы не понимаем друг друга. Думаю, на форуме найдутся ребята которые смогут вам помочь.

Удачи! 

Спасибо за попытку помочь!
 
Попробую еще раз обьяснить может кто поможет....


Привожу пример простого индикатора, который при пересечении MACD и 0 выводит стрелки на графике цены.

В индикаторе использую множитель для таймфрейма

 input int      Faktor=4;

Если кинуть этот индикатор на минутный график, то по умолчанию он показывает пересечение MACD и 0 на М4, я просто умножаю показания индикатора MACD на 4

Handle=iMACD(NULL,0,12*Faktor,26*Faktor,9*Faktor,PRICE_CLOSE);

Проблема следующая - если сравнить пересечение MACD и 0 с М1 и М4 то на М1 будет смещение на 3-7 баров вперед, что показано на рисунке.



Как исправить это смещение по времени на М1??

 

Код индикатора

//+------------------------------------------------------------------+
//|                                                       Proba4.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int      Faktor=4; //Множитель ТФ
//--- indicator buffers
double         Label1Buffer[];
//-- служебные массивы
double         SignalBuffer[];

int Handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
  
   Handle=iMACD(NULL,0,12*Faktor,26*Faktor,9*Faktor,PRICE_CLOSE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   int to_copy,limit;
   if(prev_calculated==0)
     {
      limit=1;
      to_copy=rates_total-1;
      if(CopyBuffer(Handle,1,0,rates_total,SignalBuffer)<=0)
        {
         Print("Getting MACD is failed! Error",GetLastError());
         return(0);
        }
     }
     else
     {
      limit=prev_calculated-1;
      to_copy=rates_total-1;
      if(CopyBuffer(Handle,1,0,rates_total,SignalBuffer)<=0)
        {
         Print("Getting MACD is failed! Error",GetLastError());
         return(0);
        }
     }
    
    for(int i=limit; i<to_copy;i++)
     if(SignalBuffer[i-1] < 0 && SignalBuffer[i] > 0)
        Label1Buffer[i]=high[i];//пересечение на графике
      else
        Label1Buffer[i]=EMPTY_VALUE; //пустое значение
    //--- return value of prev_calculated for next call
  
   return(rates_total);
  }
//+------------------------------------------------------------------+
Причина обращения: