Скачать MetaTrader 5

Индикаторы: Канал Дончиана.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
182659
MetaQuotes Software Corp.  

Канал Дончиана.:

Классический вариант индикатора со средней линией.

Author: Лёха

MQL4 Comments
16319
MQL4 Comments  

Полезно, спасибо! Было бы здорово видеть не только среднюю линию, но и промежуточные (условно 75% и 25%).

П.С. С вашего позволения добавил сам:

// ---------------------------------------------------------------------------
// Классический канал Дончиана - по экстремумам за N дней.
//
// Буферы индикатора:
// 0 - Верхняя граница.
// 1 - Нижняя граница.
// 2 - Середина канала.
// 3 - Верхняя четверть канала.
// 4 - Нижняя четверть канала.
// ---------------------------------------------------------------------------

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Blue
#property indicator_color2 Blue
#property indicator_color3 DarkViolet
#property indicator_style3 STYLE_DOT
#property indicator_color4 DarkViolet
#property indicator_style4 STYLE_DOT
#property indicator_color5 DarkViolet
#property indicator_style5 STYLE_DOT

// Длина рассматриваемой истории.
extern int HISTORY_DEPTH = 24;

// Буферы индикатора.
double buf_up[], buf_dn[], buf_md[], buf_um[], buf_dm[];

// Инициализация.
int init() {
IndicatorShortName(StringConcatenate(
"AZZX - DONCHIAN CHANNEL v1.1 (", HISTORY_DEPTH, ")"));
IndicatorDigits(Digits);

SetIndexBuffer(0, buf_up);
SetIndexBuffer(1, buf_dn);
SetIndexBuffer(2, buf_md);
SetIndexBuffer(3, buf_um);
SetIndexBuffer(4, buf_dm);

SetIndexLabel(0, "UPPER BOUND");
SetIndexLabel(1, "LOWER BOUND");
SetIndexLabel(2, "MIDDLE LINE");
SetIndexLabel(3, "UP_MIDDLE LINE");
SetIndexLabel(4, "DOWN_MIDDLE LINE");

return(0);
}

// Главный цикл.
int start() {
int i;

for(i = Bars - IndicatorCounted() - 1; i >= 0; i--) {
buf_up[i] = High[iHighest(NULL, 0, MODE_HIGH, HISTORY_DEPTH, i)];
buf_dn[i] = Low [iLowest (NULL, 0, MODE_LOW, HISTORY_DEPTH, i)];
buf_md[i] = 0.5 * (buf_up[i] + buf_dn[i]);
buf_um[i] = 0.5 * (buf_up[i] + buf_md[i]);
buf_dm[i] = 0.5 * (buf_dn[i] + buf_md[i]);
}

return(0);
}

Лёха
1264
Лёха  

Для промежуточных, которые мне тоже регулярно хочется видеть (хоть бы раз пригодилось!) использую такой простой индикатор, цепляемый "поверх" этого:

// ---------------------------------------------------------------------------
//  Вспомогательный индикатор, показывающий уровни внутри канала Дончиана.
// ---------------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1  Violet
#property indicator_color2  Violet
#property indicator_style1  STYLE_DOT
#property indicator_style2  STYLE_DOT
// Имя основного индикатора.
#define IND_NAME "azzx_donchian_1_0"
// Параметры индикатора.
extern int    CHANNEL_LENGTH  = 16;
// Расстояние от центра до границ.
extern double SIZE_MULTIPLIER = 0.75;
// Буферы индикаторов.
double buf_up[], buf_dn[];
// Рабочий период индикатора.
int    work_period;
// Инициализация.
int init() {
  IndicatorShortName(StringConcatenate("_donchian_levels v1.0 (", 
    CHANNEL_LENGTH, ")"));
    
  SetIndexBuffer(0, buf_up);
  SetIndexBuffer(1, buf_dn);
  
  SetIndexEmptyValue(0, -1);
  SetIndexEmptyValue(1, -1);
  
  work_period = Bars - CHANNEL_LENGTH;
  return(0);
}
// Главный цикл.
int start() {
  int    i;
  double u, d, m;
  
  for(i = Bars - IndicatorCounted() - 1; i >= 0; i--) {
    if(i < work_period) {
      u = iCustom(NULL, 0, IND_NAME, CHANNEL_LENGTH, 0, i);
      d = iCustom(NULL, 0, IND_NAME, CHANNEL_LENGTH, 1, i);
      m = iCustom(NULL, 0, IND_NAME, CHANNEL_LENGTH, 2, i);
      
      u = 0.5 * SIZE_MULTIPLIER * (u - d);
      
      buf_up[i] = m + u;
      buf_dn[i] = m - u;      
    } else {
      buf_up[i] = -1;
      buf_dn[i] = -1;
    }    
  }
  return(0);
}
MQL4 Comments
16319
MQL4 Comments  

как это нет в кодебазе? один из самых первых на сайте, и вариаций за это время появилось масса

http://codebase.mql4.com/ru/446

просто его обычно называют по другому.

Лёха
1264
Лёха  
SouthAlex:

как это нет в кодебазе? один из самых первых на сайте, и вариаций за это время появилось масса

http://codebase.mql4.com/ru/446

просто его обычно называют по другому.


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

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

Alexandr Bryzgalov
29640
Alexandr Bryzgalov  

уж очень похоже на PriceChannel

ЗЫ: ГЫЫЫ, он и есть )

ЗЫЗЫ: не за горами изобретение индикатора ишимоку )

Лёха
1264
Лёха  
sanyooooook:

уж очень похоже на PriceChannel

ЗЫ: ГЫЫЫ, он и есть )

ЗЫЗЫ: не за горами изобретение индикатора ишимоку )


Угу. Назвать тока как-то надо по своему. :)
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий