Помогите найти ошибку в индикаторе (или то, почему он не работает)

 

Добрый день, форумчане.

Помогите, пожалуйста, разобраться. Индикатор почему-то не отображается на графике - где ошибка, непонятно.

В общем, на графике он должен отображаться вот так:






Но у меня в окне этого индикатора просто пустота. МТ 4-й.

Вот код индикатора. Ошибка в коде или в чём-то ещё?

 

//+------------------------------------------------------------------+
//|                                                        Bands.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Blue
#property indicator_color2 Yellow
#property indicator_color3 Red
//---- indicator parameters
extern int    BandsPeriod=50;
extern int    BandsShift=0;
extern double BandsDeviations=2.0;
extern int    TrendBars = 10;
extern bool EnableTextDisplay = true;
//---- buffers
double MovingBuffer[];
double UpperBuffer[];
double LowerBuffer[];
double HighTrend[];
double LowTrend[];
double MidTrend[];

//bool DisplayText = false;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MovingBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,UpperBuffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,LowerBuffer);
   SetIndexBuffer(3,HighTrend);
   SetIndexBuffer(4,LowTrend);
   SetIndexBuffer(5,MidTrend);
   
//----
   SetIndexDrawBegin(0,BandsPeriod+BandsShift);
   SetIndexDrawBegin(1,BandsPeriod+BandsShift);
   SetIndexDrawBegin(2,BandsPeriod+BandsShift);
//----
   if(EnableTextDisplay)
   {
      DisplayLabel_1();
      DisplayLabel_2();
      DisplayLabel_3();
   }
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Bollinger Bands                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    i,k,counted_bars=IndicatorCounted();
   double deviation;
   double sum,oldval,newres;
//----
   if(Bars<=BandsPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=BandsPeriod;i++)
        {
         MovingBuffer[Bars-i]=EMPTY_VALUE;
         UpperBuffer[Bars-i]=EMPTY_VALUE;
         LowerBuffer[Bars-i]=EMPTY_VALUE;
        }
//----
   int limit=Bars-counted_bars;
   if(counted_bars>0) limit++;
   for(i=0; i<limit; i++)
      MovingBuffer[i]=iMA(NULL,0,BandsPeriod,BandsShift,MODE_SMA,PRICE_CLOSE,i);
//----
   i=Bars-BandsPeriod+1;
   if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;
   while(i>=0)
     {
      sum=0.0;
      k=i+BandsPeriod-1;
      oldval=MovingBuffer[i];
      while(k>=i)
        {
         newres=Close[k]-oldval;
         sum+=newres*newres;
         k--;
        }
      deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);
      UpperBuffer[i]=oldval+deviation;
      LowerBuffer[i]=oldval-deviation;
      i--;
     }
//----

   double TestVal1 = 0;
   double TrendValueHigh = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = UpperBuffer[i] - UpperBuffer[1+1];
         TrendValueHigh = TrendValueHigh - TestVal1;

   }
   double TrendValueLow = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = LowerBuffer[i] - LowerBuffer[1+1];
         TrendValueLow = TrendValueLow - TestVal1;

   }   
   double TrendValueMid = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = MovingBuffer[i] - MovingBuffer[1+1];
         TrendValueMid = TrendValueMid - TestVal1;

   }  
   
   
   MidTrend[0] = TrendValueMid * 1000;
   HighTrend[0] = TrendValueHigh * 1000;
   LowTrend[0] = TrendValueLow * 1000;


   if(EnableTextDisplay)
   {
      ObjectSetText("Label_Message1","High " + DoubleToStr(HighTrend[0], 2),14,"Arial",Yellow);
      ObjectSetText("Label_Message2","Mid " + DoubleToStr(MidTrend[0], 2),14,"Arial",Yellow);
      ObjectSetText("Label_Message3","Low " + DoubleToStr(LowTrend[0], 2),14,"Arial",Yellow);
   }


   return(0);
  }
  
  int  DisplayLabel_1()  
{
   ObjectCreate("Label_Message1", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message1", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message1", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message1", OBJPROP_YDISTANCE, 15);// Y coordinate

   ObjectSetText("Label_Message1","",14,"Arial",White);
   
   return(0);      
}
int  DisplayLabel_2()  
{
   ObjectCreate("Label_Message2", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message2", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message2", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message2", OBJPROP_YDISTANCE, 35);// Y coordinate

   ObjectSetText("Label_Message2","",14,"Arial",White);
   
   return(0);      
}
int  DisplayLabel_3()  
{
   ObjectCreate("Label_Message3", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message3", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message3", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message3", OBJPROP_YDISTANCE, 55);// Y coordinate

   ObjectSetText("Label_Message3","",14,"Arial",White);
   
   return(0);      
}

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

Вроде нормально рисует. Только не то что вы указали

 

М-да, странно как-то это. А должно быть как на рисунке. Вообще по объяснению авторов, этот индикатор должен показывать направление и силу тренда:

Зеленая точка - сильный бычий тренд

Светло-зеленая - слабый бычий

Розовая - слабый медвежий

Красная - сильный медвежий.

 Т.е. нужен только для удобства и экономии времени, чтобы на взгляд не высматривать силу и интенсивность тренда на данный момент. Может, кто знает другой индикатор, выполняющий аналогичную функцию?

 

Вы скорее всего прислали код не того индикатора, который вам дали.

Указанный вами код соответствует индикатору Полосы Болинджера https://www.mql5.com/ru/code/7818

Так что проверьте еще раз. Может вы не от того индикатора код выслали.

Просто интересно взглянуть на индикатор который отображается на вашей картинке. с зелеными, розовыми и красными точками.

Или, если есть возможность, скиньте пожалуйста ссылку где вы его скачали.

 

Он шел в комплекте с одним обучающим курсом, выложенным здесь:
http://www.avaxhome.ws/ebooks/business_job/CanonburyPublishingTheFinancialFixeOddsrofitsCourse.html 

Видимо, там что-то было перепутано, раз под именем этого индикатора лежал другой. 

 

Ох... там нужно 3,55 ГБ качать.

Если не затруднит скиньте в личку или сюда архив (только с индикаторами, **.mq4).

Я постараюсь вычислить что есть что и пришлю вам результат.

Может и себе что то полезное возьму.

Спасибо.

 

Был только вот этот архив: http://file.karelia.ru/wwtvj8/

 
Я правильно понял, что тот индикатор, о котором я завел речь - это модифицированный\упрощенный BB MACD, на который вы дали ссылку?
 

Наврятли...

Индикаторы которые в вашем архиве- не один ничего не рисует.

Кроме МаркеДирекшион. Но это маркетдиректшион -- просто копия индикатора Полосы Болинджера.

Для ваших целей - быстрой оценки состояния рынка

Можно присмотреться к FanSimple

Вот часть из описания:

Индикатор FanSimple показывает правильность разворота веера средних на разных таймфреймах. Индикатор включает в себя четыре скользящих средних с значениями 5, 21, 55, 233, которые отражаются на графике. В верхнем правом углу графика находятся 6 значков в виде синих стрелок вверх, красных вниз или серых ромбиков, соответственно для таймфреймов М1, М5, М15, Н1, Н4, D1

Синяя стрелка вверх показывает, что на этом ТФ веер средних раскрыт правильно вверх, красная вниз-веер раскрыт правильно вниз, серый ромбик-нет правильного раскрытия веера средних на этом таймфрейме. Зелёный кружок выше или ниже стрелок и ромбиков показывает где находится цена- выше или ниже веера.

Взято от сюда http://forum.masterforex-v.org/index.php?showtopic=3147

 
Спасибо, присмотрюсь.