|
|
|
|
|
|
|
|
Многие трейдеры используют значение максимумов и минимумов за определенный период времени для создания торговой системы. Из известных - это торговая система Черепашек и каналы Дончиана. Мы рассмотрим алгоритм создания таких каналов с использованием функции iHighest() и iLowest() . Общепринятое название такого канала PriceChannel (ценовой канал), так и назовем индикатор. Наш индикатор будет показывать текущие уровни максимума и минимума за период N баров в виде линий. Вызываем «Мастер создания советников» и заполняем нужные поля.
|
|
|
|
|
В данном случае я выбрал значение 20 – именно период в двадцать дней использовался в системе Черепах для торговли на прорывах.
|
|
|
|
|
Так как мы должны видеть уровни канала, то индикатор будет рисоваться на графике цен. Одна линия будет показывать максимум, другая минимум.
|
|
|
|
|
Я немного дописал код для лучшего понимания и пользования. Осталось только написать код заполнения буферов значениями.
|
|
|
|
|
Функции iHighest() и iLowest() заменили устаревшие функции Highest() и Lowest().
Код получился очень простой, компилируем и прикрепляем к графику.
|
|
|
|
|
Через окно DataWindow мы можем посмотреть значения любого буфера индикатора на нужную дату. Единственный недостаток данного индикатора (на мой взгляд) – отсутствие визуального подтверждения прорыва 20-дневного диапазона. Чтобы исправить этот недостаток, мы немного изменим код индикатора и назовем его PriceChannel-2.mq4.
|
|
|
|
|
Новая версия индикатора выглядит более наглядно.
|
|
|
|
|
Разница между двумя версиями видна при их сравнении.
|
|
|
|
|
Есть множество стратегий, которые основываются на пробитии некоторого диапазона.
|
|
|
|
|
Причем, как трендовые, так и контртрендовые, основанные на ложных пробитиях. Недостатком данного индикатора является фиксированный период, за который ищутся экстремумы. Существуют разные способы приспособить индикаторы данного типа под текущую рыночную ситуацию. Было бы интересно, если бы в фазе флэта (консолидации) период нашего индикатора увеличивался, а при развитии тренда – уменьшался. Таким образом, мы были бы немного застрахованы от ложного прорыва флэта и преждевременного выхода из позиции по тренду.
Одним из таких способов является использование индикатора ADX(). Популярным значением периода для этого индикатора является значение в 14 дней. Если присмотреться к этому индикатору, то видно, что во флете его значения очень малы, а при тренде нередко превышают значения 40.
|
|
|
|
|
На одном из форумов я услышал про использование значения 150/ADX(14) в качестве переменного периода для индикатора PriceChannel. Изменим код нашего индикатора и назовем его ADXChannell.mq4.
|
|
|
|
|
Характер ценового канала изменился.
|
|
|
|
|
Можно придумать правила открытия позиций по тренду при касании ценой противоположной стороны канала.
Пока мы рассматривали только индикаторы, рисующие две линии – границы канала. Но иногда трейдеры добавляют третью линию, которая находится точно посередине между верхней и нижней границей канала. Назовем ее ватерлинией или нулевой линией (или линией баланса). Сделаем третью версию индикатора – PriceChannel3.mq4. Для этого достаточно добавить третий буфер и код для расчета его значений.
|
|
|
|
|
Набросим новый индикатор на график.
|
|
|
|
|
Тут можно спорить – получили ли мы дополнительную информацию от добавления средней линии или нет. Но я хочу обратить внимание на другое – в данном случае мы вычислили среднюю линию канала на основании его границ. Но есть индикаторы, которые строятся наоборот – берется некая линия (это может быть некая скользящая средняя) и от нее строятся границы канала по каким-то правилам.
Кроме обычных средних, в качестве средней линии могут быть использованы сложные алгоритмы, например адаптивная скользящая средняя Кауфмана - АМА ( Adaptive Moving Average by Perry Kaufman ). Этот индикатор достаточно хорошо знаком многим трейдерам, найти его несложно. Поэтому в качестве примера я решил взять другой индикатор – FRAMA. Прочитать о нем можно здесь - Fractal Adaptive Moving Average by John Ehlers . Сам код индикатора можно написать и по-другому, мой вариант не является классическим.
Можно сравнить среднюю линию PriceChannel и FRAMA.
|
|
|
|
|
Единственное достоинство, которое мы видим на глаз сразу – более плавный ход FRAMA по сравнению со средней линией PriceChannel. Попробуем построить канал от FRAMA. Для этого нам необходимо правило, по которому мы будем откладывать границы канала от FRAMA. Предлагаю для этого использовать отклонения цены закрытия Close от значения FRAMA. А точнее, стандартное отклонение этого распределения.
Итак, имеем:
1. значения индикатора FRAMA, которое мы будем показывать
2. отклонения цены Close от FRAMA, которые мы не будем показывать
3. верхняя граница канала, которую мы будем показывать
4. нижняя граница канала, которую мы будем показывать.
Значит, наш индикатор должен выводить (рисовать) три буфера и иметь один скрытый (вспомогательный) буфер для расчетов. МТ4 легко позволяет это, но нужно помнить, что неотображаемые буферы должны быть последними (иметь максимальный индекс).
|
|
|
|
|
Для того, чтобы построить границы канала, сначала мы должны в цикле посчитать значения FRAMA и отклонения, и только потом в отдельном цикле мы можем вычислять границы канала.
|
|
|
|
|
Для примера я использовал одну из функций, которая рассчитывается на массиве значений – iStdDevOnArray(). Полученный индикатор со значениями по умолчанию выглядит так.
|
|
|
|
Все индикаторы находятся здесь .
|
|