Индикатор встроить в советник

 

Всем здравия! Есть индикатор

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 2
#property indicator_color2 Lime
#property indicator_width2 2

extern int SignalGap = 4;

int dist=24;
double b1[];
double b2[];

int OnInit()
  {
   SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1);
   SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1);
   SetIndexArrow(1,233);
   SetIndexArrow(0,234);
   SetIndexBuffer(0,b1);
   SetIndexBuffer(1,b2);
   return(INIT_SUCCEEDED);
  }

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 i,limit,hhb,llb;
   if(prev_calculated<0) { return(rates_total); }
   limit=rates_total-1-MathMax(dist,prev_calculated);
   for (i=limit; i>=0; i--)
     {
      hhb = iHighest(NULL,0,MODE_HIGH,dist,i-dist/2);
      llb = iLowest(NULL,0,MODE_LOW,dist,i-dist/2);

      if (i==hhb) { b1[i]=High[hhb]+SignalGap*Point; }
      if (i==llb) { b2[i]=Low[llb] -SignalGap*Point; } 
     }
   return(rates_total);
  }

Подскажите,  как его вставить в советник в виде функции

 
sportoman:

Всем здравия! Есть индикатор

Подскажите,  как его вставить в советник в виде функции

Есть три варианта:

1. Заказать выполнение Ваших намерений на Фриланс

2. Подключить индикатор к советнику

3. Использовать математику индикатора в советнике.

Выбирайте ;)

 
Renat Akhtyamov #:

Есть три варианта:

1. Заказать выполнение Ваших намерений на Фриланс

2. Подключить индикатор к советнику

3. Использовать математику индикатора в советнике.

Выбирайте ;)

понятно что математику, но воппрос с функцией 

OnCalculate

Что туда передавать

 
sportoman #:

понятно что математику, но воппрос с функцией 

Что туда передавать

смотря где сигнал находится

вот вся математика в приницпе

   for (i=limit; i>=0; i--)
     {
      hhb = iHighest(NULL,0,MODE_HIGH,dist,i-dist/2);
      llb = iLowest(NULL,0,MODE_LOW,dist,i-dist/2);

      if (i==hhb) { b1[i]=High[hhb]+SignalGap*Point; }
      if (i==llb) { b2[i]=Low[llb] -SignalGap*Point; } 
     }
но если Вам это ни о чем не говорит, то только вариант №1
 
Renat Akhtyamov #:

смотря где сигнал находится

вот вся математика в приницпе

но если Вам это ни о чем не говорит, то только вариант №1

а где взять значения rates_total и prev_calculated

 limit=rates_total-1-MathMax(dist,prev_calculated);
 
sportoman #:

а где взять значения rates_total и prev_calculated

если сигнал на нулевом баре, то не надо

есть функция iBars вместо  rates_total 

prev_calculated - это чтобы повторно не просчитывать то же самое кроме нулевого бара

но МТ5 настолько быстрый, что ему не составит труда посчитать еще раз ;)

 
Renat Akhtyamov #:

если сигнал на нулевом баре, то не надо

есть функция iBars вместо  rates_total 

prev_calculated - это чтобы повторно не просчитывать то же самое кроме нулевого бара

но МТ5 настолько быстрый, что ему не составит труда посчитать еще раз ;)

а если сигнал на предыдущем баре - советник на 0 смотрит был ли на предыдущем сигнал

 
sportoman #:
iBars
iBars используйте
 
спасибо
Причина обращения: