Статьи по MQL4
Поиск экстремумов цены

Поиск экстремумов цены


например, forex

Одни трейдеры в своей торговле опираются на показания индикаторов, другие отвергают индикаторы и говорят, что лучший индикатор – это цена. Но и те и другие считают важным использование в своей торговле разнообразных уровней. Одним из самых распространенных методов является выявление максимальной и минимальной цены на определенном временном интервале. В MQL-IV для этих целей есть функции Highest() и Lowest().

Предположим, что 20 октября 2006 года нам необходимо знать максимальную цену за 26 последних часов. Для этого я нанес на график фигуру Прямоугольник, чтобы визуально видеть нужный мне диапазон свечей.

Рис. 1
Рис. 1

Для того, чтобы нанести объект «Прямоугольник» на график, я сделал следующее: выбрал Меню «Вставка» - «Фигура» - «Прямоугольник».

Рис. 2
Рис. 2

Левой кнопкой мыши отметил верхний левый угол Прямоугольника, и не отпуская кнопки довел до правого нижнего угла желаемого Прямоугольника. Кроме того, я через свойства объекта задал (правой кнопкой мышки на выделенном объекте) установил цвет Прямоугольника.

Рис. 3
Рис. 3

Чтобы получить точную копию моего Прямоугольника, вы можете задать его координаты:

Рис. 4
Рис. 4

Много полезных сведений о возможностях терминала вы можете почерпнуть из статей на сайте разработчиков:
Секреты клиентского терминала MetaTrader 4
Секреты клиентского терминала MetaTrader 4: Система оповещений
Секреты клиентского терминала MetaTrader 4: Индикаторы
Секреты клиентского терминала MetaTrader 4: Библиотека файлов в MetaEditor'е

Из рисунка видно, что в Прямоугольник не попала часовая свеча со временем открытия 20-00 19 октября 2006 года. Это я сделал специально, чтобы разобраться с синтаксисом функции Highest(). Справочная система MetaEditor сообщает

Рис. 5
Рис. 5

Функция соответствует требованиям для практически всех функций в MQL-IV: сначала идет символ, для которого применяется функция, затем период (тайм-фрейм). То есть, эта функция позволяет вычислить значение на «неродном» символе и «неродном тайм-фрейме» - привычные уже для МТ4 универсальность и удобство. Дальше – указатель таймсерии, ведь мы можем искать не только самый высокий High[], но и самый высокий Close[], или даже самый высокий Low[]. Следующий параметр – count – указывает на какой выборке ищется значение. Последний параметр start – с какого бара мы смотрим искомую выборку.

Попробуем написать скрипт, который нарисует нам такой же объект «Прямоугольник» на часовом графике EURUSD. Прямоугольник охватывает 26 баров, его вверх будет проходить по максимальной цене за 26 баров, низ прямоугольника будет равен минимальной цене за 26 баров, правый край находится на нулевом баре(индекс бара равен нулю), левый край находится на 26 баре с индексом равным 25 (не забываем про это!). Через функцию Highest() мы найдем индекс того бара, который имеет максимальную цену High[], для этого мы напишем Highest(Symbol(),Period(),MODE_HIGH, 26,0). Мы указали на поиск бара с самым высоким High[] на протяжении 26 баров начиная с нулевого. Или надо было написать 25?

Сделаем скрипт TestHighestLowest.mq4 и посмотрим. Сначала мы вручную добавим нужные внешние параметры.

Рис. 6
Рис. 6

Вы видите, что я ввел новую переменную типа color, это позволит нам в будущем указывать цвет прямоугольника, а также переменную backGround булевого типа, ее мы будем использовать при задании желаемого типа отображения – будет прямоугольник иметь заливку или нет. Значение firstBar подставляется как параметр start для функции Highest() и Lowest().

Дописываем функцию start():

Рис. 7
Рис. 7

Необходимо разобраться, почему именно так вычисляется время первой координаты time1. А также почему время открытия firstBar оказалось временем второй координаты при создании объекта прямоугольник (OBJ_RECTANGLE).

Кроме того, мы не просто пытаемся создать объект прямоугольник, но и анализируем результат этой попытки. Часто пишут однозначный код, который не предусматривает непредвиденного поведения программы, если это станет привычкой, то в будущем гарантирует многие часы в поисках ошибок в своих программах. Обработка непредвиденной ситуации (в нашем случае неудачной попытки создания прямоугольника) называется обработкой исключения, сами ситуации – исключениями. В данном примере мы просто выводим в лог сообщение с кодом ошибки.

Код готов, запускаем его на нашем графике и немного меняем входной параметр:

Рис. 8
Рис. 8

Получаем следующий результат:

Рис. 9
Рис. 9

Видим, что наш скрипт действительно показывает максимальную и минимальную цену за 26 последних баров начиная от нулевого. Жмем Ctrl+B, выбираем наш прямоугольник и смотрим его свойства:

Рис. 10
Рис. 10

Я специально для примера выбирал пограничный случай, попробуем теперь исполнить скрипт со значением countBars=27. Запускаем, но ничего не происходит:

Рис. 11
Рис. 11

Вот и обработка ошибки пригодилась, значение кода ошибки можно посмотреть в справке MetaEditor’а. Удалим прямоугольник, созданный при первом запуске скрипта и заново запустим скрипт:

Рис. 12
Рис. 12

Видим, что максимум цены за 27 баров увеличился, значит мы правильно поняли назначение параметров. Необходимо только иметь ввиду, что если в искомой выборке окажутся два бара с одинаковыми экстремумами, функции Highest() и Lowest() вернут указание на тот бар, который имеет больший индекс, то есть укажут на более старый бар. В некоторых алгоритмах это может иметь большое значение.

У нашего скрипта есть одно неудобство – нам нужно указывать начальный бар (firstBar) числовым значением. Если нам нужно будет нарисовать такой прямоугольник где-то в глубине истории, то выяснение индекса нужного бара станет практически невозможным или придется придумывать средства для выяснения индекса этого бара. Существует целый класс задач, когда скрипту нужно передать индекс необходимого бара программным путем, для этого в MQL-IV есть специальные функции PriceOnDropped() и TimeOnDropped():

Рис. 13
Рис. 13

Введем функцию init() и добавим переменные прямо из примера, а также добавим вывод многострочного комментария:

Рис. 14
Рис. 14

Комбинация "косая черта и n" означает перевод строки, и ее наличие позволяет делать многострочные комментарии. Компилируем новый вариант скрипта и бросаем его на график (все остальные объекты я удалил):

Рис. 15
Рис. 15

Если мы просто выполним скрипт (не бросая на график, а двойным кликом мышки как обычно), то получим другую картинку:

Рис. 16
Рис. 16

Видно, что мы можем определить и способ запуска скрипта и координаты точки на графике, куда он был брошен. Используем новые знания и назовем новый вариант скрипта как TestHighestLowest2.mq4.

Рис. 17
Рис. 17

Запускаем новый вариант скрипта и получаем желаемый результат:

Рис. 18
Рис. 18

На этом знакомство с четырьмя новыми функциями можно считать законченным. Скрипты доступны на форуме


Перейти к статье «Некоторые способы постройки каналов».
 
+7 (495) 710-76-76
8 (800) 200-01-31
по России бесплатно

закрыть

Вход в личный кабинет

Для счета alpari.classic введите номер счета (буква и 4 цифры) и пароль в ЛК.

Для счетов alpari.micro и alpari.partner введите логин и пароль в МТ.

Зарегистрироваться!Забыли пароль?

 
Rambler's Top100