|
|
|
|
|
|
|
|
Одни трейдеры в своей торговле опираются на показания индикаторов, другие отвергают индикаторы и говорят, что лучший индикатор – это цена. Но и те и другие считают важным использование в своей торговле разнообразных уровней. Одним из самых распространенных методов является выявление максимальной и минимальной цены на определенном временном интервале. В MQL-IV для этих целей есть функции Highest() и Lowest().
Предположим, что 20 октября 2006 года нам необходимо знать максимальную цену за 26 последних часов. Для этого я нанес на график фигуру Прямоугольник, чтобы визуально видеть нужный мне диапазон свечей.
|
|
|
|
|
Для того, чтобы нанести объект «Прямоугольник» на график, я сделал следующее: выбрал Меню «Вставка» - «Фигура» - «Прямоугольник».
|
|
|
|
|
Левой кнопкой мыши отметил верхний левый угол Прямоугольника, и не отпуская кнопки довел до правого нижнего угла желаемого Прямоугольника. Кроме того, я через свойства объекта задал (правой кнопкой мышки на выделенном объекте) установил цвет Прямоугольника.
|
|
|
|
|
Чтобы получить точную копию моего Прямоугольника, вы можете задать его координаты:
|
|
|
|
|
Много полезных сведений о возможностях терминала вы можете почерпнуть из статей на сайте разработчиков:
Секреты клиентского терминала MetaTrader 4
Секреты клиентского терминала MetaTrader 4: Система оповещений
Секреты клиентского терминала MetaTrader 4: Индикаторы
Секреты клиентского терминала MetaTrader 4: Библиотека файлов в MetaEditor'е
Из рисунка видно, что в Прямоугольник не попала часовая свеча со временем открытия 20-00 19 октября 2006 года. Это я сделал специально, чтобы разобраться с синтаксисом функции Highest(). Справочная система MetaEditor сообщает
|
|
|
|
|
Функция соответствует требованиям для практически всех функций в 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 и посмотрим. Сначала мы вручную добавим нужные внешние параметры.
|
|
|
|
|
Вы видите, что я ввел новую переменную типа color, это позволит нам в будущем указывать цвет прямоугольника, а также переменную backGround булевого типа, ее мы будем использовать при задании желаемого типа отображения – будет прямоугольник иметь заливку или нет. Значение firstBar подставляется как параметр start для функции Highest() и Lowest().
Дописываем функцию start():
|
|
|
|
|
Необходимо разобраться, почему именно так вычисляется время первой координаты time1. А также почему время открытия firstBar оказалось временем второй координаты при создании объекта прямоугольник (OBJ_RECTANGLE).
Кроме того, мы не просто пытаемся создать объект прямоугольник, но и анализируем результат этой попытки. Часто пишут однозначный код, который не предусматривает непредвиденного поведения программы, если это станет привычкой, то в будущем гарантирует многие часы в поисках ошибок в своих программах. Обработка непредвиденной ситуации (в нашем случае неудачной попытки создания прямоугольника) называется обработкой исключения, сами ситуации – исключениями. В данном примере мы просто выводим в лог сообщение с кодом ошибки.
Код готов, запускаем его на нашем графике и немного меняем входной параметр:
|
|
|
|
|
Получаем следующий результат:
|
|
|
|
|
Видим, что наш скрипт действительно показывает максимальную и минимальную цену за 26 последних баров начиная от нулевого. Жмем Ctrl+B, выбираем наш прямоугольник и смотрим его свойства:
|
|
|
|
|
Я специально для примера выбирал пограничный случай, попробуем теперь исполнить скрипт со значением countBars=27. Запускаем, но ничего не происходит:
|
|
|
|
|
Вот и обработка ошибки пригодилась, значение кода ошибки можно посмотреть в справке MetaEditor’а. Удалим прямоугольник, созданный при первом запуске скрипта и заново запустим скрипт:
|
|
|
|
|
Видим, что максимум цены за 27 баров увеличился, значит мы правильно поняли назначение параметров. Необходимо только иметь ввиду, что если в искомой выборке окажутся два бара с одинаковыми экстремумами, функции Highest() и Lowest() вернут указание на тот бар, который имеет больший индекс, то есть укажут на более старый бар. В некоторых алгоритмах это может иметь большое значение.
У нашего скрипта есть одно неудобство – нам нужно указывать начальный бар (firstBar) числовым значением. Если нам нужно будет нарисовать такой прямоугольник где-то в глубине истории, то выяснение индекса нужного бара станет практически невозможным или придется придумывать средства для выяснения индекса этого бара. Существует целый класс задач, когда скрипту нужно передать индекс необходимого бара программным путем, для этого в MQL-IV есть специальные функции PriceOnDropped() и TimeOnDropped():
|
|
|
|
|
Введем функцию init() и добавим переменные прямо из примера, а также добавим вывод многострочного комментария:
|
|
|
|
|
Комбинация "косая черта и n" означает перевод строки, и ее наличие позволяет делать многострочные комментарии. Компилируем новый вариант скрипта и бросаем его на график (все остальные объекты я удалил):
|
|
|
|
|
Если мы просто выполним скрипт (не бросая на график, а двойным кликом мышки как обычно), то получим другую картинку:
|
|
|
|
|
Видно, что мы можем определить и способ запуска скрипта и координаты точки на графике, куда он был брошен. Используем новые знания и назовем новый вариант скрипта как TestHighestLowest2.mq4.
|
|
|
|
|
Запускаем новый вариант скрипта и получаем желаемый результат:
|
|
|
|
|
На этом знакомство с четырьмя новыми функциями можно считать законченным. Скрипты доступны на форуме
Перейти к статье «Некоторые способы постройки каналов».
|
|