Скачать MetaTrader 5

Примеры: Язык MQL4 для "чайников". Пользовательские индикаторы (часть 1)

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

New article Язык MQL4 для "чайников". Пользовательские индикаторы (часть 1) has been published:

Это четвертая статья из цикла "Язык MQL4 для 'чайников'". Сегодня мы будем учиться писать пользовательские индикаторы. Мы изучим классификацию свойств индикаторов, посмотрим, как эти свойства влияют на сам индикатор, узнаем про новые функции и оптимизацию, и наконец-то напишем несколько своих индикаторов. Кроме того, в конце статьи вас ждут советы по стилю программирования. Если это первая статья "для чайников", которую вы читаете, то, пожалуйста, прочитайте предыдущие статьи, чтобы у вас не возникало никаких вопросов. Кроме того убедитесь, что вы хорошо разобрались в старом материале, так как в этой статье я не буду объяснять основы.

Какие бывают индикаторы?

Сейчас я покажу вам какие бывают индикаторы. Конечно, вы и сами видели их достаточно, но сейчас я хочу обратить ваше внимание на свойства и параметры индикаторов, чтобы сделать таким образом небольшую классификацию свойств и параметров. Это поможет вам в дальнейшем писать пользовательские индикаторы. Итак, первый простенький индикатор:

Это Скользящее Среднее (Moving Average, MA), часто используемый технический индикатор. Обратите внимание на следующие важные вещи:

  • индикатор рисуется в окне самого графика
  • индикатор выводит лишь один показатель
  • диапазон значений индикатора никак не ограничен и зависит от текущих цен
  • линия рисуется определенным цветом, толщиной и стилем (сплошная линия)

Author: Antoniuk Oleg

Victor Nikolaev
Модератор
15632
Victor Nikolaev  
Moriarty:
Ошибочка:

Уровни - это вертикальные линии, которые рисуются индикатором определенным стилем, цветом и толщиной.


Да, согласен - уровни - горизонтальные уровни.
Rosh
93
Rosh  
Пофиксено.
Antoniuk Oleg
205
Antoniuk Oleg  
дауж, как я так ...
MQL4 Comments
16316
MQL4 Comments  
banderass писал(а):дауж, как я так ...

Мой вопрос наверное примитивный,но у меня тяжелые неувязки с функцией:IndicatorCounted-не доходит.

Если посмотреть какое значение она возвращает,к примеру в алерте,то это -1.

А это совсем не то что написано в статье "количество посчитанных индикатором баров".

И еще там говорится про какую-то функцию IndicatorBars() .Опечатка,наверное..

Если ответите-век не забуду!!

Гриша.

alderru
104
alderru  

Тоже чего то не догнал...

Если - counted_bars=IndicatorCounted() - это число неизменённых баров (или посчитанных индикатором), то после повторного запуска start: IndicatorCounted() - а следовательно и counted_bars будет уже чему-то равно. Зачем тогда исполнять строку: if(counted_bars>0) counted_bars--; это же обнулит counted_bars и тогда: limit=Bars-counted_bars - то есть станет равен Bars. И индикатор по новой начнёт пересчитывать все бары??

Где я ошибаюсь, плз, подскажите.

P.S. (может и здесь подскажете?) я использую ДЕЛЕНИЕ на значение из предыдущего бара, при запуске индикатора появлялось деление на НОЛЬ, поэтому сейчас приходиться использовать такую конструкцию:

Counted_bars=IndicatorCounted();
if (Counted_bars==0)

i=Bars-Bars2-1;
while (i>=0)

{ ..... }

i--;

При появлении нового бара Counted_Bars уже не расматривается и i становится =0, в цикле while происходит только одна иттерация только для нового бара.

Может есть вариант попроще??

MQL4 Comments
16316
MQL4 Comments  
greg21:
banderass писал(а):дауж, как я так ...

Мой вопрос наверное примитивный,но у меня тяжелые неувязки с функцией:IndicatorCounted-не доходит.

Если посмотреть какое значение она возвращает,к примеру в алерте,то это -1.

А это совсем не то что написано в статье "количество посчитанных индикатором баров".

И еще там говорится про какую-то функцию IndicatorBars() .Опечатка,наверное..

Если ответите-век не забуду!!

Гриша.


автор забросил эту статью? а вопрос для новичков не "примитивный". И эти статьи читают и до сих пор...
MQL4 Comments
16316
MQL4 Comments  

Здравствуйте, помогите пожалуйста разобраться вот в этом:

  int counted_bars=IndicatorCounted(),
limit;

if(counted_bars>0)
counted_bars--;

limit=Bars-counted_bars;

for(int i=0;i<limit;i++)
-----------

if(counted_bars>0)
counted_bars--;

limit=Bars-counted_bars;

if(limit>barsToProcess)
limit=barsToProcess;

-----------
я запутался в этих конструкциях,  limit=Bars-counted_bars; это будет равно 2 или 1? а во второму случае зачем проверять условие и делать limit=barsToProcess; почему его сразу не присвоить без проверки условия? я пробовал, на индикаторе в данном случае отображается кривая за период barsToProcess а дальше на графике пусто, а как например работает Moving Average, у нее есть период, но прорисовывается от начала до конца?

Спасибо

MQL4 Comments
16316
MQL4 Comments  
Дело в том что индикаторы приведеные в примере пересчитывают 2 последних бара ...
Merck
37
Merck  
Подскажите а как поменять размер стрелок, и цвет например?
Merck
37
Merck  

а то ничего не видно на графике

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