Господа! Может у кого нибудь есть индикатор "средней величины" бара ? - страница 5

 
r772ra:



Вот эти 2 строчки, или удалите, или сделайте так как на рисунке. 



Oh, Great!
Замечательно! Всё получилось. Я вижу, что вы понимаете то что делаете. Это очень  гууд!
А вы бы не могли вшить в этот индикатор мувинг, который бы отображал среднее арифметическое показаний этого индикатора за определённый период. То есть, чтобы не добавлять мувинг в ручную каждый раз, а он находился бы внутри индикатора? 

 
lifewood:



Oh, Great!
Замечательно! Всё получилось. Я вижу, что вы понимаете то что делаете. Это очень  гууд!
А вы бы не могли вшить в этот индикатор мувинг, который бы отображал среднее арифметическое показаний этого индикатора за определённый период. То есть, чтобы не добавлять мувинг в ручную каждый раз, а он находился бы внутри индикатора? 

Пользуйтесь и процветайте.
//+------------------------------------------------------------------+
//|                                                    Barmed_MA.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DarkGreen
#property indicator_color2 Red
#property indicator_width1 2


extern int       Shift=0;
extern int       NumBars=1;
extern int       PeriodMA=20;

double ExtMapBuffer1[];
double ExtMapBuffer2[];

int init()
  {
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
  // for(int i=1;i<11;i++)   
  //    SetLevelValue(i, 5*i);
  }

int deinit(){}

int start()
  {
   int limit=Bars-IndicatorCounted();
   double prec=1.0;
   if(5.0-MarketInfo("EURUSD",MODE_POINT)>0.5) prec=10.0;
   for(int i=0; i<limit; i++){
      double sum=0.0;
      for(int z=0; z<NumBars; z++) sum+=High[i+z+Shift]-Low[i+z+Shift];
      ExtMapBuffer1[i]=sum/NumBars/MarketInfo(Symbol(),MODE_POINT)/prec;
      }
   for( i=0; i<limit; i++){
       ExtMapBuffer2[i]=iMAOnArray(ExtMapBuffer1,0,PeriodMA,0, MODE_SMA, i);
      }    
  }

 
r772ra:
Пользуйтесь и процветайте.


Оооо! Так вы кудесник?! Огромное спасибище. Дай вам Бог здоровья!
И вот ещё на сам конец, для полного комфортабельного использования этого индикатора, скажите, а можете ли вы исправить величину показаний этого замечательного индикатора с "абсолютных величин" на "относительные величины"? То есть, чтобы показания индикатора выходили в процентах. Необходимо показания мувинга принять за 100%, а показания гистограммы принимать уже относительно этих ста процентов (относительно мувинга). Для удобства можно принять показания мувинга обозначить как 1 (единицу), тогда показания гистограммы будут соответственно или больше единицы 1.хх если гистограмма превышает показания мувинга (100%), или меньше единицы 0.хх если показания гистограммы ниже показаний мувинга (100%). 

 Если сделать эти изменения, то этот индикатор можно считать полностью законченным индикатором и включить его в набор стандартных индикаторов Метатрейдера. 

Спасибо за вашу помощь. 

 
r772ra:
Пользуйтесь и процветайте.

if(5.0-MarketInfo("EURUSD",MODE_POINT)>0.5) prec=10.0;

Может здесь вот так?

if(5.0-MarketInfo("EURUSD",MODE_DIGITS)>0.5) prec=10.0;

 А то будет работать только для пятизнаков. С 4-знаками - беда.

 

Будьте проще: 

if( Digits%2>0.5 ){
         Points*=0.1;
         Speed*=0.1;
      }
 
taraБудьте проще:  

   Не получится, на выходе этой функции только интежер
 
FAQ:

   Не получится, на выходе этой функции только интежер

А как же тогда сделать? Как получится?
 
lifewood:

А как же тогда сделать? Как получится?

  Правильно сделать.
 
FAQ:

  Правильно сделать.

Так а как же сделать правильно?! 
 
//+------------------------------------------------------------------+
//|  Возвращает множитель для 4\5 знаков                             |
//|  Gets the multiplier for the 4 / 5 digits                        |
//+------------------------------------------------------------------+
double mno(){if(Digits==3||Digits==5){return(10);}else{return(1);}}