Для начала я предлагаю создать индикаторы для ТС Сидуса. Имеется приличная ветка форума ("Система Сидуса"), посвящённая этой системе, вот ей в помощь мы и начнём работать.
Для создания индикатора нужно сначала немного продумать нашу стратегию.
В ТС Сидуса используются четыре мувинга - значит будет 4 линии, затем для каждой линии нужно определить период и цвет.
Итак, у нас будут четыре внешних (extern) переменных и четыре цвета линий.
Открыть редактор вы сможете теми же способами, которые были описаны в "Создание библиотек". Таким же способом, как там указано, вы создадите новый индикатор, только в приглашающем окне нужно будет:
- выбрать опцию "Пользовательский индикатор"
- указать наименование индикатора, например, "Индикатор Сидуса"
- определить все переменные
Для этого на следующей странице окна нужно определить их:
Как вы видите, я определил четыре внешних переменных (или 4 входных параметра индикатора) со значениями по умолчанию 5, 12, 18, 28. В готовом индикаторе эти параметры каждый пользователь сможет менять соглано его собственной стратегии. - определить количество и цвет линий
Переходим "Далее" и определяем количество и цвет линий индикатора:
Обратите внимание, что бы не стояла галочка у "Индикатор в отдельном окне" (обведено красным), т.к. сам индикатор должен накладываться на график цен.
Вы можете видеть, что основа модуля уже создана: имеются определения линий препроцессора (т.е. то, что будет обработано ещё перед компилляцией), имеются объявления и назначения внешних параметров и объявление массивов-линий, имеется функции init() и start(). Нам остаётся только сделать расчёт значений линий и назначений этих данных в массивы-линии.
Расчёты делаются для каждого бара, присутствуюшего на графике. Для чего в цикле мы будем проходить все бары. В виду того, что в MQL отсутствуют условные циклы, мы будем пользоваться безусловным циклом for():
// вычисления
}
Эта конструкция обозначает следующее: "для целой переменной i равной числу баров на графике делать вычисления пока i будет больше или равна нулю с уменьшением i на единицу". Фигурные скобки называются операторными скобками и указывают, что всё, что заключено в них будет обрабатываться в этом цикле. Если бы там была одна единственная формула для расчёта, то операторные скобки были бы не нужны.
А теперь маленькое отступление. Если с приходом каждого тика будут проходиться в цикле все бары графика, то это может создать "неплохие" тормоза в работе терминала. Для одного графика это ещё не очень заметно, но для нескольких графиках на разных валютных парах терминал начинает серьёзно тормозить!
К счастью, разработчики MQL об этом подумали. Имеется встроенная функция [color="#993399"]IndicatorCounted[/color](), которая будет выдавать только то количество баров, которые неизменились после последнего тика. Получается, что при каждом тике надо будет пересчитать и перерисовать только 1 бар - последний. Кстати, мастер создания модуля сразу подготовил именно эту функцию и вы можете её увидеть в функции start().
Теперь наш цикл будет выглядеть так:
[color=blue;font-weight:bold]int[/color] counted_bars=[color=violet;font-weight:bold]IndicatorCounted[/color]();
[color=blue;font-weight:bold]for[/color]([color=blue;font-weight:bold]int[/color] i=counted_bars;i>=0;i--){
[color=grey]/* вычисления */[/color]
}
[color=blue;font-weight:bold]return[/color](0);
}
Сообщение изменено: Liv, 12 Июнь 2007 - 01:18 .