Скачать MetaTrader 5

Вопрос по коду индикатора - где я не прав?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Есть вопросы к автору программы - задай их в разделе Обсуждение
Egor Murikov
1008
Egor Murikov 2013.09.28 18:53 

Занят сейчас написанием индюка для анализа ценовых рядов на некоторую глубину в барах. Для примера взял объемы и теста для пытаюсь менять цвет индикатора относительно умолчательного (нулевого) без условий - всегда.

Проблема: цвет индикатора не меняется, не могу понять в чем дело - весь мозг вывихнул, хотя код простейший. К сожалению, пока не хватает ни опыта, ни знания тонкостей по написанию индикаторов, чтобы увидеть ошибку.

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

Заранее большущее спасибо!!!

Код:

#include <MovingAverages.mqh>

#property indicator_separate_window

#property indicator_buffers 3
#property indicator_plots   2

#property indicator_type1   DRAW_LINE
#property indicator_color1  clrMaroon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3
#property indicator_label1  "line1MA"
#property indicator_minimum 0

#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrRed,clrDodgerBlue,clrYellow,clrGreen,clrWhite,clrMagenta
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2
#property indicator_label2  "line1"

//--- input parameters
input int Depth=20;              // Depth of analyzis
input int MAPeriod = 100;        // MA period

//--- indicator buffers
double    VMA[];
double    VHist[];
double    VCol[];

double max,min;
int clr, min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- Инициализация переменных начала отсчёта данных
   min_rates_total=MathMax(Depth,MAPeriod);

   SetIndexBuffer(0,VMA,INDICATOR_DATA);
   SetIndexBuffer(1,VHist,INDICATOR_DATA);
   SetIndexBuffer(2,VCol,INDICATOR_COLOR_INDEX);
 
   IndicatorSetInteger(INDICATOR_DIGITS,0);
   PlotIndexSetInteger(0,PLOT_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_SHIFT,0);

   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);

   string shortname;
   StringConcatenate(shortname,"( Depth:", string(Depth),", MAPeriod:",string(MAPeriod),")");
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
 
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,PLOT_EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,PLOT_EMPTY_VALUE);

  }

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 &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int limit;

   if(rates_total<min_rates_total)
      return(0);

   if(prev_calculated>rates_total || prev_calculated<=0)
      limit=min_rates_total;
   else limit=prev_calculated-1;

   for(int i=limit;i<rates_total && !IsStopped();i++)
     {
      clr = 2;
      VHist[i]=TickVolume[i];
      VCol[i]=clr;
     }
     ExponentialMAOnBuffer(rates_total,prev_calculated,0,MAPeriod,VHist,VMA);

//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
Aleksey Lebedev
6057
Aleksey Lebedev 2013.09.29 00:37  
#property indicator_type2   DRAW_HISTOGRAM
наверно DRAW_COLOR_HISTOGRAM
Egor Murikov
1008
Egor Murikov 2013.09.29 07:11  

вот спасибо большущее!!!

лопухнулся как дите... знал же - тонкости какие-то у меня не закреплены.

главное - рисовал и раскрашивал уже гистограммы и сравнивал с теми вариантами код, а вот написание свойства - не сравнил (( наука будет.


еще раз спасибо!!!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий