Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Документация доступна в CHM и PDF. Скачай в удобном тебе виде!
MetaQuotes Software Corp.
Модератор
181269
MetaQuotes Software Corp. 2007.10.12 10:06 

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

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

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

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

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

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

Author: Antoniuk Oleg

Victor Nikolaev
Модератор
14506
Victor Nikolaev 2007.10.12 13:45  
Moriarty:
Ошибочка:

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


Да, согласен - уровни - горизонтальные уровни.
Rosh
93
Rosh 2007.10.12 14:05  
Пофиксено.
Antoniuk Oleg
205
Antoniuk Oleg 2007.10.12 19:31  
дауж, как я так ...
MQL4 Comments
16319
MQL4 Comments 2008.12.13 10:28  
banderass писал(а):дауж, как я так ...

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

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

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

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

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

Гриша.

alderru
104
alderru 2009.06.23 14:21  

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

Если - 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
16319
MQL4 Comments 2010.08.14 13:23  
greg21:
banderass писал(а):дауж, как я так ...

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

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

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

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

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

Гриша.


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

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

  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
16319
MQL4 Comments 2011.03.28 13:16  
Дело в том что индикаторы приведеные в примере пересчитывают 2 последних бара ...
Merck
37
Merck 2013.07.18 16:43  
Подскажите а как поменять размер стрелок, и цвет например?
Merck
37
Merck 2013.07.18 16:44  

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

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