preview
Критерии тренда. Окончание

Критерии тренда. Окончание

MetaTrader 5Торговые системы | 21 апреля 2025, 07:14
167 0
Aleksej Poljakov
Aleksej Poljakov

Введение

Тренд — наш друг. Но об этом друге мы знаем мало. Если мы спросим десяток трейдеров, что такое тренд, то получим столько же вариантов ответов. Общим в этих ответах будет только одно: тренд — это направленное движение цены. А вот какой должна быть эта направленность, тут у каждого трейдера будут свои представления и варианты.

Конечно же, есть математически обоснованные критерии тренда. Но у них могут быть определенные недостатки. Например, многие критерии подгоняются под нормальное распределение, другие критерии накладывают ограничения на минимальную длину временного ряда.

Давайте попробуем на основе классических критериев разработать собственные оценки тренда. И постараемся сделать это так, чтобы тренд мог сказать: "трейдер — мой друг".


Критерий Аббе

Этот критерий основывается на сравнении двух дисперсий – обычной дисперсии и дисперсии Аллана. При наличии тренда, эти две дисперсии ведут себя по-разному. Например, возьмем временной ряд со значениями 3, 2, 1. Для вычисления простой дисперсии, нам нужно сначала найти среднее ряда:

После этого, можно приступать к вычислению дисперсии:

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

Теперь удлиним исходный временной ряд, и его значения будут: 5, 4, 3, 2, 1.

Рассчитаем дисперсии:

Мы можем продолжать наращивание ряда и дальше, но суть останется прежней. Наличие тренда никак не влияет на дисперсию Аллана. А обычная дисперсия зависит от продолжительности тренда.

Чтобы получить критерий Аббе, нужно найти частное этих дисперсий:

Чем меньше полученное значение, тем сильнее тренд. Все хорошо с этим критерием, но в условиях рынка он может давать неверные результаты из-за возведения в квадрат. Если мы будем применять этот критерий к достаточно длинному временному ряду, то этот недостаток не проявит себя. А если временной ряд будет коротким, то даже одно аномальное значение цены может оказать сильное и неблагоприятное влияние на значение этого критерия.

Чтобы избавиться от этого недостатка, мы можем воспользоваться робастными методами. Про эти методы можно написать отдельную статью. Но я напишу ее прямо сейчас. Вместо средней нужно использовать медиану, а вместо возведения в квадрат — абсолютное значение разностей. А. Чехов утверждал, что краткость — сестра таланта. Я — талант.

Алгоритм наших действий будет таким. Сначала нам нужно взять все значения цен и отсортировать их по возрастанию. Тогда медиана будет равна цене, находящейся в центре, если количество цен нечетное. Или полусумме двух центральных значений, если количество цен — четное.

После этого, нам нужно для каждой цены рассчитать абсолютное отклонение от медианы:

И найти уже медиану получившихся значений. Таким образом, у нас получится медиана абсолютных отклонений (MAD), которая является робастной оценкой стандартного отклонения (тут есть небольшие нюансы — надо поправочный коэффициент применять, но в данном случае нам это не нужно). Вместо дисперсии Аллана мы будем также рассчитывать отклонение. Для этого нам нужно сначала найти абсолютные значения последовательных разностей цен:

И потом, найти медиану получившихся значений. По сути, эта медиана будет показывать среднюю скорость цены за 1 бар.

А теперь, давайте немного задумаемся о том, что для нас будет являться признаком тренда. Чем больше получившаяся оценка стандартного отклонения, тем выше вероятность тренда. А чем больше отклонение Аллана, тем больше скорость тренда. С теорией нам все понятно, теперь давайте попробуем применить эти признаки на практике.

Сначала нам нужно определиться с величиной отклонений. Например, мы получили оценку отклонения равную 50 пунктам. Много это или мало? На этот вопрос мы сможем ответить, только если мы можем сравнить текущее значение с предыдущими. Для этого нам необходимо собрать статистику, в которой мы будем сохранять значения отклонений и то, сколько раз они были в истории. На основании этой статистики мы можем рассчитать кумулятивную функцию распределения (CDF). На основании этой функции, мы можем судить о силе отклонений. Большие отклонения встречаются реже, и значение их кумулятивной функции больше.

По отклонениям мы можем судить о силе тренда, но они ничего не говорят о его направлении. Нужно добавить еще какой-нибудь критерий, который может указать это направление. Я буду использовать описанный в предыдущей статье критерий Кендалла.

В итоге у нас получилось 3 разных критерия, которые нам нужно объединить в один индикатор.

О наличии тренда можно судить по трем признакам: большое значение стандартного отклонения (синяя) большое значение скорости цены (красная) значительное отклонение от 50 для критерия Кендалла (зеленая).

Давайте рассмотрим пример простой торговой стратегии на основе этого индикатора. Открытие позиций будет происходить, если индикатор подтверждает наличие тренда. А закрытие позиций будет осуществляться, когда значение критерия Кендалла будет близко к 50. Эта стратегия может принести такие результаты.


Как можно бороться с выбросами, мы разобрались. Но учли ли мы все возможные варианты? Возьмем временной ряд со значениями: 1, 0, 0, 0, -1. Какие значения в этом ряду аномальные? Те, что находятся по краям, или находящиеся в центре? Чтобы ответить на эти вопросы, нам потребуется дополнительная информация. Но мы можем попробовать найти ответ и своими силами. Для того, чтобы исключить влияние возможных аномалий в движении цены, нам нужно учитывать значения всех членов временного ряда.

Для борьбы с аномалиями, нам нужно немного изменить первоначальную формулу критерия Аббе. Отклонение Аллана мы будем рассчитывать следующим образом:

Формула для стандартного отклонения тоже изменится:

Тогда значение критерия можно будет найти по формуле:

Чем больше получившееся значение, тем сильнее тренд. Так как мы отказались от возведения значений в степень, то изменение критерия будет довольно плавным. Чтобы сделать изменения критерия более заметным, я нормализую его относительно исторических минимума и максимума. Для определения направления тренда я оставлю критерий Кендалла. А вот так выглядит этот индикатор:

На основе этого индикатора, создаем стратегию с такими правилами:

  • позиции открываются, только если критерий Аббе не возрастает и находится выше определенного уровня,
  • позиции buy открываются, если критерий Кендалла растет и находится ниже установленного уровня,
  • позиции sell открываются, если этот критерий убывает и находится выше установленного уровня.


При расчете отклонения Аллана мы использовали сумму абсолютных разностей. Эта сумма показывает полное расстояние, которое прошла цена. Зная это расстояние, мы можем оценить силу линейного тренда. Новый показатель можно рассчитать так:

В числителе рассчитывается расстояние между начальным и конечным значением временного ряда. А в знаменателе — полное расстояние. Чем ближе этот показатель к 1, тем сильнее выражен тренд. Маленькие значения этого показателя говорят о флете или о хаотичном движении цены. Но тут нужно сделать оговорку, маленькое значение этого показателя может быть и при резком изменении цены.

На основе этого индикатора, я создал стратегию со следующими правилами: открытие позиций происходит, если критерий Кендалла сигнализирует об изменении направления тренда. При этом, значение нового критерия должно достаточно сильно отклоняться от среднего. То есть, новый критерий будет использоваться в качестве фильтра, который будет определять причину окончания тренда.


Итак, рассуждая об одном классическом критерии тренда, мы получили 3 его модификации. На этом можно остановиться и обратить внимание на другие критерии.


Критерии next

Критерий знаков — это один из самых простых и интуитивно понятных критериев. Описать этот критерий очень просто — если текущая цена больше предыдущей, то знак "+". А если меньше, то "-". После того, как все знаки расставлены, можно делать выводы о наличии тренда и его направлении.

Но у этого критерия есть существенный недостаток — с его помощью нельзя определить, насколько силен тренд. Представьте, 5 цен подряд растут на 1 пункт. Вы, глядя на график, уверенно скажете: это флет. А вот критерий знаков поставит 4 "+" и уверенно укажет на восходящий тренд. Давайте попробуем избавиться от этого недостатка.

Сначала нам нужно ввести некоторое пороговое значение изменения цены. Тогда правило подсчета знаков немного изменится.

Сначала посмотрим на индикатор, построенный по этому критерию.

Если один знак значительно превышает другой, то это признак тренда. Тут напрашивается простая стратегия — открывать позиции, если линия одного знака пересекает другую.

Результаты не выглядят впечатляющими. Но это означает только одно — эта стратегия нуждается в доработке.

Критерий Кендалла тоже построен на количестве знаков. И у него есть тот же недостаток — рост цены на 1 пункт он воспринимает устойчивым трендом. Я немного изменю этот критерий. Суть изменений довольна проста. Индикатор будет собирать статистику по изменениям цены за 1, 2 и сколько еще нужно баров, в зависимости от периода индикатора. Например, пусть период индикатора будет равен 3. У меня будет 2 статистики. Сравнение движения цены за 1 бар:

И статистика движения цены за 2 бара:

На основе этих статистик я рассчитываю CDF, а сумма всех CDF будет указывать на силу и направление тренда. Индикатор получился довольно интересным, но его загрузка требует некоторого времени. Поэтому, эксперта на основе этого индикатора не будет. Но если индикатор вам понравился, вы всегда можете обратиться во фриланс с просьбой перенести логику индикатора в советник.


Критерии next next

Многие непараметрические критерии тренда используют сортировку исходных значений. Эти критерии хороши тем, что они могут выявить линейные и нелинейные тренды. А главный недостаток этих критериев — они не могут различить силу тренда. Движение цены на 1 пункт или на 100 — для них выглядит одинаково. Одно из возможных решений заключается в сочетании параметрического и непараметрического методов.

Первый пример такого сочетания. Возьмем нужное нам количество цен и отсортируем их по возрастанию. Это непараметрическая часть критерия. После этого, сравним исходный временной ряд и отсортированный. Это уже параметрическая часть.

Если тренд нисходящий, то исходные цены и отсортированные останутся на своих местах, и значение суммы будет равно 0. А при растущем тренде сумма будет довольно велика. И чем больше сумма, тем сильнее тренд вверх. Хотел я назвать этот критерий "Критерием доброго модератора". Меня за это чуть не забанили. Поэтому пусть он будет называться критерием сортировки.

Теперь давайте посмотрим, как можно применять этот критерий на практике. Сначала нам нужно собрать статистику по значениям полученных сумм. По этой статистике строим CDF. И уже на основе CDF мы можем судить о силе и направлении тренда. И конечно же, надо проверить, можно ли использовать этот критерий на практике.


Еще одно сочетание непараметрического и параметрического методов можно построить на значениях SMA. Суть этого критерия довольно проста. Значения SMA будут увеличиваться при растущем тренде, и уменьшаться при нисходящем. Например, общий период индикатора равен 3. Тогда, я смогу построить 3 разных SMA:

Полученные значения я отсортирую по возрастанию. Статистика будет похожей на ту, что была в предыдущем примере. Но, вместо сравнения цен, я буду сравнивать исходные индексы SMA с получившимся после сортировки. Небольшие отличия указывают на тренд вниз. А при восходящем тренде сумма абсолютных разностей будет достаточно велика.


Критерий выглядит вполне работоспособным и может принести пользу в трейдинге. Конечно же, этот критерий можно модернизировать. Например, можно использовать индикаторы с одинаковым периодом. А кроме SMA, можно использовать другие трендследящие индикаторы.


Заключение

Понимание трендов помогает трейдерам прогнозировать движение цены и использовать этот прогноз для получения прибыли. Однако важно помнить, что тренды не всегда предсказуемы, и даже самые надёжные методы анализа могут давать сбои. Поэтому трейдерам необходимо постоянно совершенствовать и адаптировать свои стратегии к меняющимся рыночным условиям. В этом могут помочь модификация классических критериев тренда, или разработка собственных критериев.

Тестирование EA производилось при следующих параметрах:

  • EURUSD
  • H1
  • 2024.01.01 - 2024.12.31

При написании статьи были использованы следующие программы.

Название Тип Описание
Abbe 1 Индикатор
  • Indicator period - период индикатора. Минимальное значение равно 3.
EA Abbe 1 Советник
  • LvlStDev - уровень стандартного отклонения;
  • LvlDevAl - уровень девиации Аллана;
  • LvlTrend - уровень тренда.
Abbe 2 Индикатор

EA Abbe 2 Советник
  • LvlAbbe - уровень критерия Аббе.
Abbe 3 Индикатор

EA Abbe 3 Советник
  • LvlMax - уровень перепроданности;
  • LvlMin - уровень перекупленности. 
Signature Индикатор
  • Level - уровень отклонения цены в пунктах.
EA Signature Советник

Kendall Индикатор

Sorting Индикатор

EA Sorting Советник

Average Индикатор

EA Average Советник

Прикрепленные файлы |
Abbe_1.mq5 (10.41 KB)
EA_Abbe_1.mq5 (3.4 KB)
Abbe_2.mq5 (3.66 KB)
EA_Abbe_2.mq5 (3.53 KB)
Abbe_3.mq5 (3.49 KB)
EA_Abbe_3.mq5 (3.55 KB)
Signature.mq5 (3.08 KB)
EA_Signature.mq5 (3.43 KB)
Kendall.mq5 (3.96 KB)
Sorting.mq5 (3.26 KB)
EA_Sorting.mq5 (3.39 KB)
Average.mq5 (3.36 KB)
EA_Average.mq5 (3.35 KB)
От начального до среднего уровня: Массив (II) От начального до среднего уровня: Массив (II)
В этой статье мы рассмотрим, что такое динамический массив и массив статический. И есть ли разница между использованием одного или другого. Или они всегда одинаковы? Когда следует использовать один, а когда другой? А как насчет константных массивов? Для чего они существуют, и какому риску я подвергаюсь, если не инициализирую все значения в массиве? Предположим, что они будут равны нулю.
Нейросети в трейдинге: Актер—Режиссёр—Критик (Окончание) Нейросети в трейдинге: Актер—Режиссёр—Критик (Окончание)
Фреймворк Actor–Director–Critic — это эволюция классической архитектуры агентного обучения. В статье представлен практический опыт его реализации и адаптации к условиям финансовых рынков.
От новичка к эксперту: Главное на пути к торговле на MQL5 От новичка к эксперту: Главное на пути к торговле на MQL5
Раскройте свой потенциал! Вас окружают возможности. Узнайте 3 главных секрета, с помощью которых вы начнете изучать MQL5 или перейдете на новый уровень владения этим языком. Погрузимся в обсуждение советов и рекомендаций, в равной степени полезных и начинающим, и профи.
Самооптимизирующийся советник на языках MQL5 и Python (Часть IV): Стекинг моделей Самооптимизирующийся советник на языках MQL5 и Python (Часть IV): Стекинг моделей
В статье мы продемонстрируем, как можно создавать торговые приложения на базе ИИ, способные учиться на собственных ошибках. Мы рассмотрим технику, известную как стекинг (stacking), при которой мы используем 2 модели для создания 1 прогноза. Первая модель, как правило, является более слабым обучающимся алгоритмом, а вторая - более мощной моделью, которая обучается на результатах более слабого алгоритма. Наша цель — создать ансамбль моделей, чтобы достичь более высокой точности.