Индикаторы: MTF Moving Average - страница 2

 
igrun:

кто нить помогите мне написать мой индикатор : на графике часовика сделать ма того же часовика только со сдвигом на какое то количество минут, то есть допустим каждая свеча для расчета будет браться не с 00 а со сдвигом то есть в 05 каждого часа. так же можно и на часовике сделать четырех часовые ма ступеньками,но со сдвигом на какое то количество часов 0 1 2 3 .


На часвиках сдвиг в минутах не получится. Если отрисовывать на минутках то проблем нет
 

А получится ли сделать такие же ступеньки не для Ма, а для линейного тренда:

чтобы видеть уровень актуальной линии тренда с 240, 60 на 1-5 мин ???

 

А правильно так

 
costy_:

А правильно так


А где код потерялся? К чему тогда эта картинка без кода?
 
Aleks_Ivan:
costy_:

А правильно так


А где код потерялся? К чему тогда эта картинка без кода?

//+------------------------------------------------------------------+
//|                                 i-Moving_Average_all_TF_Real.mq4 |
//|                      Copyright © 2010, MetaQuotes Software Corp. |
//|                            "http://www.mql4.com/ru/users/costy_" |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.mql4.com/ru/users/costy_"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern   int tf = 240;
extern int MaPeriod=14;
extern int MaMethod=0;
extern int price=0;
double MaBuffer[], buf_arrey[];
datetime save_time;
int    i;
void init(){
   ArrayResize(buf_arrey,MaPeriod);
   if(tf<Period())tf=Period();
   switch(MaMethod){
     case 0:   string short_name="SMA("+TF()+", MaPeriod="+MaPeriod+")"; break;
     case 1:   short_name="EMA("+TF()+", MaPeriod="+MaPeriod+")"; break;
     case 2:   short_name="SMMA("+TF()+", MaPeriod="+MaPeriod+")"; break;
     case 3:   short_name="LWMA("+TF()+", MaPeriod="+MaPeriod+")"; break;
     default : short_name="XHA";
   }
   IndicatorShortName(short_name);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MaBuffer);
   SetIndexLabel(0,short_name);
}
//+------------------------------------------------------------------+
void start(){
   for(i=Bars-IndicatorCounted(); i>=0; i--){
     if(save_time!=iTime(0,tf, iBarShift(0,tf,Time[i]))){
        save_time =iTime(0,tf, iBarShift(0,tf,Time[i]));
        for(int j=MaPeriod-1;j>0;j--)
        buf_arrey[j]=iMA(0,tf,1,0,0,price,j+iBarShift(0,tf,Time[i]));
     }
     buf_arrey[0]=Price(price);
     MaBuffer[i]=iMAOnArray(buf_arrey,0,MaPeriod,0,MaMethod,0);
   }
}
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
/ функция double Price(price);
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
double Price(int price){
   switch(price){
      case 0 :  return (Close[i]);
      case 1 :  return (iMA(0,tf,1,0,0,1,iBarShift(0,tf,Time[i])));
      case 2 :  int kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time[i])))-i;
                if(kol_vo_pois==0) return ( High[i]);
                return ( High[iHighest(0,0,MODE_HIGH,kol_vo_pois,i)]);
      case 3 :  kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time[i])))-i;
                if(kol_vo_pois==0) return ( Low[i]);
                return ( Low[iLowest(0,0,MODE_LOW,kol_vo_pois,i)]);
      case 4 :  kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time[i])))-i;
                if(kol_vo_pois==0) return ( (High[i]+Low[i])/2);
                return ( (High[iHighest(0,0,MODE_HIGH,kol_vo_pois,i)]+Low[iLowest(0,0,MODE_LOW,kol_vo_pois,i)])/2);
      case 5 : Print("Price not valide"); Comment("Price not valide"); return(0);
      case 6 : Print("Price not valide"); Comment("Price not valide"); return(0);
    }
}
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// функция string TF();
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
string TF(){
  switch(tf) {
   case 1     : return("M1");    case 5     : return("M5");   case 15    : return("M15");
   case 30    : return("M30");   case 60    : return("H1");   case 240   : return("H4");
   case 1440  : return("D1");    case 10080 : return("W1");   case 43200 : return("MN1");
   default    : return("Current");
   }
}
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
 

Спасибо.

 
подскажите пожалуйста, меняется значение индикатора с поступлением новых данных?
 
Автору спасибо за индюк.....Но в его использовании я столкнулся с проблемой..... ступень определённого периода не закрепляется по его завершению.... а обновляется с графиком...т.е смотря на линии мувинга н1 на 5 мин. т.ф. то по окончанию часа мувинг должен закрепится образовав ступень...а этого не происходит.....ступень сдвигается.....давая не точность......Очень буду признателен автору если он обновит индикатор...
 
У индикатора есть 1 проблема - не сохраняет настройки толщины линии...
Можно это исправить?