Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нужна мобильная версия MetaTrader 5? Скачивай и торгуй!
MakarFX
555
MakarFX 2014.11.16 20:53 

Всем привет.

Индикатор Donchian Channel

//+------------------------------------------------------------------+
//|                                                 Donchian Channel |
//+------------------------------------------------------------------+
#property  copyright "Donchian"
#property  link      "Donchian"
//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 5
#property  indicator_color1  DodgerBlue
#property  indicator_color2  Gold
#property  indicator_color3  Crimson
#property  indicator_color4  DodgerBlue
#property  indicator_color5  Gold
#property  indicator_width1  1
#property  indicator_width2  1
#property  indicator_width3  1
#property  indicator_width4  1
#property  indicator_width5  1
//---- indicator parameters
extern int  periods  =  50;
//---- indicator buffers
double     upper[];
double     lower[];
double     meder[];
double     upper2[];
double     lower2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
   {
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexArrow(3,159);
   SetIndexStyle(4,DRAW_ARROW);
   SetIndexArrow(4,159);
//---- indicator buffers mapping
   SetIndexBuffer(0,upper);
   SetIndexBuffer(1,lower);
   SetIndexBuffer(2,meder);
   SetIndexBuffer(3,upper2);
   SetIndexBuffer(4,lower2);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("Donchian Channel("+periods+")");
   SetIndexLabel(0,"Upper");
   SetIndexLabel(1,"Lower");
   SetIndexLabel(2,"Meder");
   SetIndexLabel(3,"Upper2");
   SetIndexLabel(4,"Lower2");
//---- initialization done
   return(0);
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
   {
   int limit;
   int counted_bars=IndicatorCounted();
   double high,low;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- calculate values
   for(int i=0; i<limit; i++) 
      {
      high=iHigh(Symbol(),Period(),iHighest(Symbol(),Period(),MODE_HIGH,periods,i));
      low=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,periods,i));
      upper[i]=high;
      lower[i]=low;
      meder[i]=(high+low)/2;
      if(Close[1] > upper[i-3]) 
         upper2[i]= High[1];
      if(Close[1] < lower[i-3]) 
         lower2[i]= Low[1];
      }
   return(0);
   }
//+------------------------------------------------------------------+

Хотел сделать так чтоб индикатор отмечал свечи закрытые выше максимума и ниже минимума...

НЕ ПОЛУЧИЛОСЬ(((

Помогите кто понимает. Пожалуйста.

Boris
3881
Boris 2014.11.16 21:41  
MakarFX:

Всем привет.

Индикатор Donchian Channel

Хотел сделать так чтоб индикатор отмечал свечи закрытые выше максимума и ниже минимума...

НЕ ПОЛУЧИЛОСЬ(((

Помогите кто понимает. Пожалуйста.

Закрытие может произойти на хае или лоу, но не как не выше или ниже, на то они "макси" и "мини"! Потому попробуйте так: 

      if(Close[1] >= upper[i-3]) 
         upper2[i]= High[1];
      if(Close[1] <= lower[i-3]) 
         lower2[i]= Low[1];
      
MakarFX
555
MakarFX 2014.11.17 05:37  
borilunad:

Закрытие может произойти на хае или лоу, но не как не выше или ниже, на то они "макси" и "мини"! Потому попробуйте так: 

Я знаю, поэтому беру значение максимума и минимума на три бара назад

      if(Close[1] > upper[i-3]) 
         upper2[i]= High[1];
      if(Close[1] < lower[i-3]) 
         lower2[i]= Low[1];
Alexey Viktorov
5174
Alexey Viktorov 2014.11.17 05:57  
MakarFX:

Я знаю, поэтому беру значение максимума и минимума на три бара назад

Ну тогда обрати внимание на направление индексации динамического массива.
MakarFX
555
MakarFX 2014.11.17 06:03  
AlexeyVik:
Ну тогда обрати внимание на направление индексации динамического массива.

Это для меня слишком умная фраза.

Я не программист, изменения в индикатор вносил логически.

В связи с этим и прошу помощи.

Alexey Viktorov
5174
Alexey Viktorov 2014.11.17 06:09  

Тогда просто поменяй минусы на плюсы и 1 на i+1.

      if(Close[i+1] > upper[i+3]) 
         upper2[i]= High[i+1];
      if(Close[i+1] < lower[i+3]) 
         lower2[i]= Low[i+1];


MakarFX
555
MakarFX 2014.11.17 06:12  
AlexeyVik:
Тогда просто поменяй минусы на плюсы.

Безрезультатно

      if(Close[1] > upper[i+3]) 
         upper2[i]= High[1];
      if(Close[1] < lower[i+3]) 
         lower2[i]= Low[1];

Точки строят линии

Если

      if(Close[i+1] > upper[i+3]) 
         upper2[i]= High[i+1];
      if(Close[i+1] < lower[i+3]) 
         lower2[i]= Low[i+1];

Точки есть на каждом баре


MakarFX
555
MakarFX 2014.11.17 06:45  
AlexeyVik:

Тогда просто поменяй минусы на плюсы и 1 на i+1.

На счет плюсов спасибо, действительно не в ту сторону смотрел
MakarFX
555
MakarFX 2014.11.17 19:47  

С кодом разобрался(помогли)

выглядит так...

      if(i<Bars-2)
        {
         if(Close[i]>upper[i+2]&&Close[i+1]>upper[i+2]&&Close[i+2]<upper[i+2])
            upper2[i]=High[i];
         if(Close[i]<lower[i+2]&&Close[i+1]<lower[i+2]&&Close[i+2]>lower[i+2])
            lower2[i]=Low[i];
        }

отображается так...


Подскажите, как добавить Alert?

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