/*
//+------------------------------------------------------------------+ 
//|                                              TrendSignalSupr.mqh | 
//|              TrendSignal: Copyright © 2006,     Nikolay Kositsin | 
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+------------------------------------------------------------------+ 
##property copyright "Copyright © 2006, Nikolay Kositsin"
#property link "farria@mail.redcom.ru" 
//---- отрисовка индикатора в главном окне
#property indicator_chart_window 
//---- количество индикаторных буферов
#property indicator_buffers 2 
//---- цвета индикатора
#property indicator_color1 Magenta
#property indicator_color2 Yellow
*/
//---- ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА ----------------------------------------+
extern int Swing   = 10; // вертикальный cдвиг индикатора в пунктах
extern int Shift   = 0; // cдвиг индикатора вдоль оси времени  
//---- ---------------------------------------------------------------------+
//---- индикаторные буферы
double Ind_Buffer1[];
double Ind_Buffer2[];
double Vel_Buffer [];
//----
double SWING;
//+------------------------------------------------------------------+ 
//| TrendSignal indicator initialization function                    | 
//+------------------------------------------------------------------+ 
int init() 
{ 
//---- определение стиля исполнения графика
SetIndexStyle(0,DRAW_ARROW); 
SetIndexStyle(1,DRAW_ARROW); 
SetIndexArrow(0, Simbol1);
SetIndexArrow(1, Simbol2);
//---- 3 индикаторных буфера использованы для счёта
IndicatorBuffers(3);
SetIndexBuffer(0,Ind_Buffer1);
SetIndexBuffer(1,Ind_Buffer2); 
SetIndexBuffer(2,Vel_Buffer); 
//---- горизонтальный сдвиг индикатора
SetIndexShift (0, Shift); 
SetIndexShift (1, Shift); 
//---- установка значений индикатора, которые не будут видимы на графике
SetIndexEmptyValue(0,EmptyValue); 
SetIndexEmptyValue(1,EmptyValue); 
//---- установка номера бара, начиная с которого будет отрисовываться индикатор  
int drow_begin=COUNT_begin()+Shift+2;  
SetIndexDrawBegin(0,drow_begin);
SetIndexDrawBegin(1,drow_begin); 
//---- имена для окон данных и лэйбы для субъокон
IndicatorShortName(""+Label+""+"TrendSigmnal");
SetIndexLabel(0,"Up_Trend");
SetIndexLabel(1,"Up_Trend");
//----
IndicatorDigits(digits());
//---- инициализация переменной
SWING=Swing*Point;
//---- завершение инициализации
return(0); 
} 

//+------------------------------------------------------------------+ 
//| TrendSigmnal iteration function                                  | 
//+------------------------------------------------------------------+  
int start() 
{ 
//----+ Введение переменных с плавающей точкой  
double trend1,trend0,JurX,Error,Price;
//----+ Введение целых переменных и получение уже посчитанных баров
int reset,MaxBar,limit,bar,counted_bars=IndicatorCounted(); 
//---- проверка на возможные ошибки
if (counted_bars<0)return(-1);
//---- последний посчитанный бар должен быть пересчитан 
if (counted_bars>0) counted_bars--;
//---- определение номера самого старого бара, начиная с которого будет произедён пересчёт новых баров
limit=Bars-counted_bars-1; 
MaxBar=Bars-1-COUNT_begin()-2;           
//---- Загрузка значений исходного индикатора в буфер
for(bar=limit; bar>=0; bar--)Vel_Buffer[bar]=INDICATOR(bar);

//----+ инициализация нуля
if (limit>MaxBar)   
 {
  for(bar=MaxBar;bar>=MaxBar;bar--)
   {
    Ind_Buffer1[bar]=0;
    Ind_Buffer2[bar]=0;
   }
  limit=MaxBar;
 }  
//----+ ОСНОВНОЙ ЦИКЛ ВЫЧИСЛЕНИЯ ИНДИКАТОРА 
for(bar=limit;bar>=0;bar--)
 { 
 
  Ind_Buffer1[bar]=0;
  Ind_Buffer2[bar]=0; 
   
  trend1=Vel_Buffer[bar+1]-Vel_Buffer[bar+2];
  trend0=Vel_Buffer[bar+0]-Vel_Buffer[bar+1];
  
  if      ((trend1>=0)&&(trend0<0))Ind_Buffer1[bar]=High[bar]+SWING;
  else if ((trend1<=0)&&(trend0>0))Ind_Buffer2[bar]=Low [bar]-SWING;   
 }

//---- завершение вычислений значений индикатора
return(0); 
} 
//+------------------------------------------------------------------------+


