Нужна помощь с индикатором

 

Всем привет.

Индикатор 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);
   }
//+------------------------------------------------------------------+

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

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

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

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

Donchian Channels
Donchian Channels
  • 2007.09.20
  • John Smith
  • www.mql5.com
Концепция системы: В системах следованию тренду большой популярностью пользуются каналы Дончина.
 
MakarFX:

Всем привет.

Индикатор Donchian Channel

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

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

Помогите кто понимает. Пожалуйста.
Уточните свои требования. Пока код, который Вы предоставили им соответсвует
 
barabashkakvn:

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

Индикатор я взял из Code Base и добавил

      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];
 
Действительно, без Вашего добавления работает. А теперь еще раз сформулируйте, что Вы хотите обозначать стрелочками?
 
Vinin:
Уточните свои требования. Пока код, который Вы предоставили им соответсвует

Я хотел, чтобы появлялась точка над последней закрытой свечей свечей, если она закрывается выше максимума или

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

Код который я выложил отображается так


 

Сформулируйте, пожалуйста Ваше условие внятно. 

 

Попробуйте так:

     

 
barabashkakvn:

Сформулируйте, пожалуйста Ваше условие внятно. 

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

возьмем классику Donchian Channel

есть линия максимума и линия минимума

эти линии меняется когда новая свеча пересекает их границу, даже если это тень.

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


 
barabashkakvn:

Попробуйте так:

      if(i>3)

        {

         if(Close[i]>Close[i-3])

            upper2[i]=High[i];

         if(Close[i]<Close[i-3])

            lower2[i]=Low[i];

        } 

мне нужно пересечение уровня Donchian Channel, а не Close третей свечи
 
MakarFX:
мне нужно пересечение уровня Donchian Channel, а не Close третей свечи
Свечи не пересекают канал, потому что канал и так строится по максимумам. Нужно другое условие.