пятница, 19 февраля 2016 г.



MQLabs: Осциллятор. Точка бифуркации.



Торговля в продолжительном и устойчивом тренде - это рай для трейдера. Но даже по самым оптимистичным подсчетам рынок проводит в таких состояниях не более 30% всего времени. Остальные 70% времени рынок проводит в состоянии флета или, как утверждают приверженцы трендов, в скоротечных неустойчивых трендах. Этот факт и является одной из основных причин, по которой абсолютное большинство трейдеров, использующих технический анализ, оказывается в проигрыше. Скоротечные тренды не дают возможности заработать тогда, когда они были идентифицированы. Причем неважно, какую тактику применяет трейдер: прямую (вход в направлении тренда) или реверсивную (заключение сделки в противоположном тренду направлении).
Исходя из вышесказанного, главнейшей задачей трейдера является не столько распознавание тренда в кратчайшие сроки, сколько нахождение точек, в которых вероятность окончания текущего движения рынка становится наиболее высокой. Для этой задачи, как нельзя хорошо подходят стандартные осцилляторы терминала Meta Trader 4. Рассмотрим действие осциллятора CCI.

Проблема стандартных осцилляторов
Существует два классических способа использования осциллятора CCI (равно, как и RSI). Первый способ заключается в следовании тренду в тот момент, когда индикатор указывает на вход рынка в состояние перекупленности или перепроданности. Но, как сказано выше, впрыгивание в последний вагон уходящего поезда оказывается губительной тактикой. Второй способ, на первый взгляд, кажется более подходящим. Он заключается в открытии сделки, противоположной по направлению текущему тренду, в тот момент, когда осциллятор указывает на выход рынка из состояния перекупленности или перепроданности (см. рис. 1).
Рис. 1. Точки разворота движения цены.
Красная вертикальная пунктирная линия указывает момент выхода линии индикатора из зоны перекупленности. Этот знак можно расценивать как окончание восходящего тренда и возможное начало противоположного, нисходящего, движения. Как видно на рис. 1, дальнейшие события развивались именно в таком ключе - цена упала более чем на 50 пунктов. Синяя вертикальная пунктирная линия указывает момент выхода линии индикатора из зоны перепроданности. Такое событие в классике расценивается как окончание нисходящего тренда и переход к восходящему движению рынка. Как итог - рост цены на 40 пунктов.
К сожалению, подобная тактика торговли также обречена на провал, т. к. частыми являются случаи быстрого возврата линии осциллятора в зону, из которой она только что вышла. И подобных дребезжаний линии вокруг уровня, определяющего начало той или иной зоны, на графике множество. Реакция на каждый выход линии из зоны смерти подобно. Поэтому, если не использовать дополнительные приемы определения разворотных точек рынка, такой способ торговли нельзя считать успешным.

Значимые и незначительные выходы линии осциллятора
Устранить дребезг линии осциллятора на уровне разграничения зон можно при помощи определения глубины и продолжительности вхождения линии в зону. Так, "на глазок", очень хорошо видны моменты, при которых не стоит реагировать на событие выхода линии из зоны. Такие моменты характеризуются непродолжительным или мелким погружением линии в зону (см. рис. 2).
Рис. 2. Быстрые и неглубокие погружения линии в зоны перекупленности или перепроданности.
Для создания полноценного торгового критерия нам "глазок" не подходит. Нужны четкие математические выкладки, которые бы явно отличали скоротечные и неглубокие входы линии в зоны от продолжительных и глубоких входов. Простейшим решением в этом случае могло бы стать задание двух параметров. Первый из параметров указывал бы минимальное количество баров, в течение которого линия осциллятора должна находиться в той или иной зоне. Второй параметр мог бы указывать, какого уровня осциллятора в зоне должна достичь линия за время своего пребывания там. Но такие определения - это притягивание рынка к искусственным человеческим представлениям, которые никогда не выполняются  ценой. Параметры должны быть более универсальными и менее зависимыми от характеристик рынка.
Одной из таких характеристик является величина изменения уровня цены в процентах от некоторого предыдущего ее значения. Подобный метод был использован нами при разработке индикатора PercentageZigZag (статья "Проект Anavar"). В рассматриваемом сейчас случае у нас нет никаких экстремумов. Но есть две другие значимые точки: точка входа линии в зону и точка выхода линии осциллятора из зоны (см. рис. 3).
Рис. 3. Значимые точки линии осциллятора.
Если речь идет о выходе линии из зоны перепроданности, то в качестве первой точки нам потребуется бар, на котором линия осциллятора в первый раз оказалась ниже уровня перепроданности. Вторая точка - это бар, на котором линия оказалась выше уровня перепроданности после непрерывного пребывания в зоне перепроданности. На временном промежутке, ограниченном найденными двумя точками, определяем максимальное и минимальное значение цены. Максимум всегда будет находиться на максимуме бара первой точки, а минимум предстоит определить. Полученные экстремумы цены необходимо проверить на удаление от исходной точки - цены открытия бара, на котором стала возможна регистрация выхода линии осциллятора из зоны перепроданности. Удаление обеих цен будет считаться достаточным, если величина процентного изменения цены превысит некое заданное нами значение.
К примеру, мы задали величину процентного изменения цены, равную 0.1%. Изменение цены от максимума до исходной точки на рис. 3: (1.3646 - 1.3615)/1.3646 = 0.0023 = 0.23%, т. е. больше, чем 0.1%. Изменение цены от исходной точки до минимума цены: (1.3615 - 1.3586)/1.3615 = 0.0021 = 0.21%, тоже больше, чем 0.1%. Таким образом, оба расстояния, пройденные ценой, удовлетворяют условиям глубины и продолжительности нахождения лини осциллятора в зоне перепроданности. Если хотя бы одно из указанных расстояний не превысит изначально заданную нами величину процентного изменения цены, то такой выход линии осциллятора из зоны не будет приниматься во внимание.
В случае выхода линии осциллятора из зоны перекупленности минимумом цены за время нахождения линии осциллятора в зоне будет считаться минимум бара первой точки, т. е. там, где линия впервые оказалась выше уровня перекупленности. Максимум цены в этом случае - расчетное значение.

Реализация алгоритма в виде индикатора
Визуализация значимых случаев выхода линии осциллятора из какой-либо зоны представлена индикатором BifurcationLevel (см. рис. 4).
Рис. 4. Внешний вид индикатора BifurcationLevel.
Синими прямоугольниками индикатор отображает участки нахождения линии осциллятора в зоне перепроданности, а красными - в зоне перекупленности. Золотистая горизонтальная линия - это цена исходной точки, на которой был зарегистрирован выход линии осциллятора из зоны.
Несмотря на то, что индикатор как бы подсказывает направление рекомендуемой сделки при помощи цвета (синий - покупка, красный - продажа), опираться на это явно не стоит. Индикатор не зря содержит в своем названии слово "бифуркация" (раздвоение, ветвление). Его основная функция - указать значимые точки рынка, после которых возможно уверенное движение цены в том или ином направлении. Причем индикатором указываются две возможные цели: максимум и минимум цены, которые были зарегистрирован во время нахождения линии осциллятора в соответствующей зоне. О том, как определить наиболее вероятное направление будущего движения цены после точки бифуркации мы будем говорить в последующих статьях.

Универсальность осцилляторов
В качестве исходных данных для описанной тактики может быть использован любой из стандартных осцилляторов терминала Meta Trader 4,который оперирует зонами перекупленности и перепроданности. В качестве примера в коде индикатора BifurcationLevel предоставлена возможность использования четырех различных осцилляторов: CCI, RSI, DeMarker и WPR. Правда, используются они не все одновременно, а по отдельности, путем переключения на отдельный осциллятор во время присоединения индикатора к графику (см. рис. 5).
Рис. 5. Внешний вид индикатора при использовании разных осцилляторов.

Настроечные параметры индикатора BifurcationLevel
У индикатора насчитывается семь настроечных параметров:
1. i_indType - индекс используемого стандартного осциллятора. Может принимать значения от 0 до 3 включительно, т. к. в данной версии запрограммировано четыре осциллятора. Для осциллятора CCI необходимо указать значение 0, для осциллятора DeMarker - 1, для осциллятора RSI - 2,для WPR - 3. Любое другое значение приведет к выдаче сообщения об ошибке и отключению индикатора.
2. i_indPeriod - период расчета значений выбранного осциллятора. Должен быть натуральным числом.
3. i_indPrice - цена расчета значений тех осцилляторов, для которых нужен этот параметр (в данном случае для осцилляторов CCI и RSI)Может принимать значения от 0 (цена close) до 6 (взвешенное закрытиевключительно.
4. i_overboughtLevel - уровень начала зоны перекупленности.
5. i_oversoldLevel - уровень начала зоны перепроданности. Его значение должно быть меньше значения уровня начала зоны перекупленности.
6. i_percentageChange - величина процентного изменения цены между максимумом цены зоны и исходной ценой, а также между исходной ценой и минимумом цены зоны. Регистрация выхода линии осциллятора из зоны осуществляется только при превышении указанного значения.
7. i_indBarsCount - количество баров, на которых происходит расчет значений индикатора. При указании значения 0 используются все доступные в истории бары.

Использование показаний индикатора в советнике
Для определения момента регистрации выхода линии из какой-либо зоны, в советнике достаточно использовать следующий код:
 
   double up = iCustom(NULL, 0, "BifurcationLevel", 0, 1);
   double dn = iCustom(NULL, 0, "BifurcationLevel", 1, 1);
   
   if (up == EMPTY_VALUE || dn == EMPTY_VALUE)
      return;
   
   if (up > dn)
   {
      // Выход из зоны перепроданности
   }
   if (dn > up)
   {
      // Выход из зоны перекупленности
   }
Буферы с индексами 0 и 1 имеют тип гистограммы, а потому связаны между собой. Значение EMPTY_VALUE в любом из буферов означает отсутствие гистограммы, т. е. отсутствие нужного сигнала. При других значениях элементов этих буферов трейдер увидит на экране вертикальную линию. Цвет линии будет зависеть от того, элемент какого буфера содержит большее значение. При верховенстве значения элемента буфера 0 линия окрасится в синий цвет (выход из зоны перепроданности). Если значение элемента буфера 1 больше значения элемента буфера 0, то линия примет красный цвет (выход из зоны перекупленности).
Для получения значений максимума и минимума, достигнутых ценой за время нахождения в соответствующей зоне потребуется использовать такое обращение к индикатору:
 
   double maxPriceOversold = iCustom(NULL, 0, "BifurcationLevel", 2, 1);
   double minPriceOversold = iCustom(NULL, 0, "BifurcationLevel", 3, 1);
   double maxPriceOverbought = iCustom(NULL, 0, "BifurcationLevel", 4, 1);
   double minPriceOverbought = iCustom(NULL, 0, "BifurcationLevel", 5, 1);
Буфера с индексами 2 и 3 содержат экстремумы цены при выходе линии осциллятора из зоны перепроданности, а буфера 4 и 5 содержат цены экстремумов, достигнутых рынком за время нахождения линии осциллятора в зоне перекупленности.

Игорь Герасько



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

Отправить комментарий