Moving Average

moving-average

Добрый день, уважаемые читатели и подписчики ресурса 4exlab.ru . Сегодня темой поста будет написание индикатора Moving Average, который стоит по умолчанию в дистрибутиве торгового терминала MetaTrader 4 и 5. В принципе, им можно воспользоваться в любой момент, не правда ли?

А Вы сможете его написать?

Сейчас научим !

Для начала необходимо знать, что же такое индикатор Moving Average и принцип его работы, а уже затем браться за его написание. Не волнуйтесь – этот процесс не долгий. Будет интересно.

Торговый индикатор MA (Moving Average) это – скользящая средняя, которую мы так часто используем в техническом анализе на рынке Forex. Эту линию прорисовывают прямо на ценовом графике. По положению скользящей средней на графике относительно графика цен (выше/ниже), определяют степень недооценки/переоценки валюты, вследствие чего трейдер принимает решение – покупать или продавать.

Чувствительность подобного индикатора регулируется его периодом. Чем меньше период линии Moving Average, тем чувствительней будет наш индикатор. Соответственно, если мы пропишем большой период, то и на высокую точность Moving Average по тренду можно не рассчитывать.


Естественно, что для написания правильного индикатора Moving Averag, по которому можно торговать, необходимо учитывать множество тонкостей в написании кода. Но напомню, что главной задачей данного поста является написать собственными руками и без ошибок действующий индикатор, что мы сейчас и сделаем!

Открываем редактор MetaEditor 4 и войдем с помощью «файл» – «создать» в «Мастер создания советника». Смело выставляем кнопку «Пользовательский индикатор». Жмем далее.

Прописываем Имя, Автор, Ссылку (это не так важно). Важно указать в Общих параметрах пользовательского индикатора изменяемые параметры.

Per – это период нашей скользящей средней. Ставим ей значение любой из Фибо–уровня (3,5,8,13,21,34,55,89,144,233,377….). Мы выбрали 21.

Shift – смещение Moving Average относительно графика цен на указанное нами количество баров. В данном случае это значение равно 8. В принципе, Вы можете указывать любое целое значение, даже отрицательное, только не удивляетесь, почему линия Moving Average сместилась назад по отношению к графику цен J.

Method – метод вычисления скользящего среднего. Она может быть вычислена обычным способом (значение 0), экспоненциально (значение 1), сглажено (значение 2), линейно–взвешанно (значение 3).

master-moving-average

Если Вы все сделали как на картинке выше, то можем приступать к следующему шагу. Кликаем «Далее» и попадаем в следующее окно. Если наш индикатор будет размещен непосредственно на графике, галочку «Индикатор в отдельном окне» не ставим. Добавляем индекс тип-«Line» и цвет поставим белый. Жмем «Готово».

line-moving-average

Теперь перед нашими глазами непосредственно код будущего индикатора. Разберем его и приступим к его доработке.

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

 

 

Означает, что индикатор будет изображен непосредственно на графике цен.

Забрасываем в буфер единичку. Это обозначает, что индикатор будет передавать только один элемент – это саму скользящую среднюю.

Прописываем цвет элемента. Здесь почему-то значение Blue прописано, хотя сам я прописывал White. Довольно странно…

Эти параметры мы уже объясняли при создании индикатора в мастере создания советников.

это значение прописывается для буферизации данных индикатора. Если на нашем графике присутствует только одна линия, то и запись будет только одна в виде ExtMapBuffer1[]. Смею заметить, что данные будут представлять собой массив, в котором будут храниться полученные параметры при вычислении для каждого бара!

Следом идет блок int init() в котором находится два значения:

В нем прописывается стиль нашего элемента. Нолик обозначает порядковый номер элемента, к которому будет присвоен параметр «Линия».

Необходима для связи переменной и массива, где ноль обозначает порядковый номер элемента. Так как у нас всего один элемент, то и значение будет просто 0 (ставим именно ноль, а не единичку, так как нумерация начинается с нолика).

Пропишем строку, которая устанавливает смещения линии Moving Average, непосредственно от начала графика. По-прежнему 0 обозначает порядковый номер линии. Нам же не за что волноваться, мы ничего не перепутаем, поэтому смело ставим 0, так как линия у нас одна.

После блока int init() следует блок int deinit(), который мы пропускаем, так как записи делать никаких в нем не нужно. Можно даже этот блок просто удалить.

Переходим в блок int start() и пропишем в него следующее условие в котором выводим непосредственно саму линию Moving Average, вызвав функцию iMA.


iMA.

В этой функции первый параметр – это имя инструмента, для которого производятся вычисления. В нашем случае необходимо вывести линию на любой график, который мы пожелаем. Поэтому ставим в поле значение NULL.

Второй параметр – 0. Это период текущего графика. Именно он нам и нужен.

Третий параметр – Per. Мы сами задали его, присвоив ему значение 21. Именно это значение и будет подставляться в iMA. Мы использовали такую замену потому, что нам в будущем возможно будет необходимо поменять значение периода. В этом случае нам не придется искать исходник и переставлять там значения периода, компилировать, а просто поменять эти значения в свойствах индикатора. Согласитесь, так намного удобнее!

Четвертый параметр – Shift. Мы условились обозначать им сдвиг скользящей средней и подобно третьему параметру, мы произвели замену для удобства пользования будущим Moving Average.

Пятый параметр – Method. Опять же производится по замене. Это метод усреднения. Выберем значение 1, а в последующем, сможем поменять значение этого параметра также легко, как третий и четвертый параметр.

Шестой параметр – PRICE_MEDIAN. Ценовая константа. Обозначает, что основой для вычисления Moving Average будет средняя цена (самая верхняя цена бара(тень)/самая нижняя цена бара(тень)/2). В принципе это значение можно было бы поставить какую–нибудь переменную, заменив её значение цифрой (что тоже правильно!).

Седьмой параметр – это i. Это индекс значение из индикаторного буфера. Обязательный параметр.

Теперь нам остается только скомпилироваться код в файл и применить его непосредственно на графике цен любой валютной пары. Если вы сделали всё, как в данной инструкции, то перед вашими глазами, как и перед моими на данный момент, появилась работающая Moving Average. Я буду очень рад, если индикатор, написанный вами только что, окажется Вашим первым индикатором. Поздравляю Вас!

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


Всего доброго. Профита Вам!

Код индикатора moving-average

24.10.2010 · Группа авторов · комментариев 9
Метки: , , , , , , , , ,  · Рубрика: MetaEditor

комментариев 9

  1. юрий - 25.02.2012

    Кто поможет правильно написать график Moving Average в программе Meta Trader

  2. Группа авторов - 26.02.2012

    Помогите этому человеку кто-нить! как-нить

  3. рома - 25.04.2013

    привет коллеги,скажите а можно ли сделать так чтобы МА показывала свою среднюю цену соответственно,как например в терминалах на фондовой бирже?

  4. Группа авторов - 27.04.2013

    Рома, задай вопрос более понятно. Что означает «свою среднюю цену»? какой «терминал на фондовой бирже» ты имеещь ввиду?

  5. рома - 27.04.2013

    вобщем так,цепляешь МА к графику и вот там где на графике текущая цена рядом показывает уровень цены самой МА. просто я на форексе совсем новичок,и в програмирование совсем алеша. Если это возможно реализовать то бол.спасибо.

  6. Группа авторов - 27.04.2013

    Рома, я тебя все равно не понимаю.
    Почему ушел с фонодой биржи? Там что плохо?

  7. рома - 27.04.2013

    нет там не плохо,и я не ушел меня мягко говоря попёрли оттуда,но это совсем другая запутанная история.
    такие МАшки стоят в штатных индюках на MetaStock, TradeStation,Quik.
    Просто я хочу потренировать своего сына(12 лет) ,и так было бы гораздо проще объяснить,что к чему и что почем,в буквальном смысле.

  8. рома - 28.04.2013

    забыл дописать то что вернее во всех этих платформах в свойствах МА есть функция-ПОКАЗЫВАТЬ ПОСЛЕДНЕЕ ЗНАЧЕНИЕ.

  9. Группа авторов - 28.04.2013

    при наведенни курсора в область последнего сформировавшегося значения MA, альтом высветится вся необходимая информация. только я не понимаю, как это может помочь в объяснении буквального смысла мувинга….
    Я на тех платформах не работал ни разу. только на ninja trader

Комментировать