Активируйте JavaScript для полноценного использования elitetrader.ru Проверьте настройки браузера.
Anchored Momentum. Новый взгляд на старый индикатор » Элитный трейдер
Элитный трейдер
Искать автора

Anchored Momentum. Новый взгляд на старый индикатор

Открыть фаил
25 октября 2020
Хорошо известный и очень простой в вычислении индикатор Momentum с давних пор вызывал мой интерес. Однако, как я не силился применить его в каких-либо торговых стратегиях, все мои попытки оказывались неудачными. Что-то я неверно понимал в сути этого индикатора, поэтому раз за разом, откладывал его освоение до "лучших времен".

Лучшие времена наступили, когда мне в руки попал февральский номер журнала "Stock&Commodities" за 1998 г. со статьей "Anchored Momentum". Автор статьи Rudy Stefenel описывает оригинальные методы "сглаживания" Momentum, в результате которых появляется целая группа самостоятельных индикаторов с новыми характеристиками. Статья довольно большая, поэтому я ограничусь кратким пересказом основных положений, которые в корне изменили мое отношение к Momentum.

Как известно, Momentum представляет собой обычную разницу между текущей ценой и прошлой ценой n-периодов назад:

Обычный Momentum = Текущая цена - Прошлая цена

Momentum выраженный в процентном отношении более информативен при оценке относительного изменения между ценами:

Процентный Momentum = 100*(Текущая цена - Прошлая цена) / Прошлая цена

Или, после алгебраических преобразований:

Процентный Momentum = 100*((Текущая цена / Прошлая цена) - 1)

Далее Rudy Stefenel описывает интересный индикатор Centered Simple Moving Average (CSMA), который будет использоваться для расчета Anchored Momentum. В начале статьи автор говорит о том, что CSMA может очень эффективно применяться в качестве основы для создания других индикаторов, однако часто игнорируется, так как его линия заканчивается "не доходя" до правого края графика цен.

Для понимания сути CSMA рассмотрим простой пример с 3-х дневной SMA. В этом случае - второй день будет серединой между первым и третьим днем периода. Для того чтобы "отцентрировать" SMA относительно графика цен, мы должны сдвинуть ее влево на один день. Так же производится "центрирование" SMA относительно цен, для любых других периодов. Математически это выглядит так: мы должны вычесть 1 из периода скользящей средней и полученный результат разделить на 2. В результате получим число периодов, на которое нужно сдвинуть SMA влево, для получения CSMA. Например, для 9-периодной SMA считаем (9-1)/2 = 4, SMA нужно сдвинуть влево на 4 периода для получения CSMA.

Теперь можно посмотреть, что нам дает использование Centered Simple Moving Average при вычислении Anchored Momentum. В отличие от Обычного Momentum, в котором сравнивается текущая цена с ценой n-периодов назад, в Anchored Momentum текущая цена сравнивается со значением m-периодной SMA сдвинутой влево на n-периодов. При этом m = 2n + 1. На рисунке ниже видно, что Anchored Momentum менее свободен в своих движениях, он как якорем (отсюда и название) "сцеплен" с CSMA, что заметно сглаживает его колебания.

Anchored Momentum. Новый взгляд на старый индикатор

Рис.1. Здесь 13-дневная SMA сдвинута влево на 6 периодов. Для вычисления Momentum так же используется 6 периодов. Линия Обычного Momentum (голубая) сравнивает цены в точках А и С. Линия Anchored Momentum (желтая) сравнивает цены в точках В и С.

Далее Rudy Stefenel рассматривает два вида индикаторов, которые можно получить с использованием CSMA - General Anchored Momentum (GAM) и Most Anchored Momentum (MAM), но сам же замечает позднее, что GAM более сложен в вычислении и интерпретации, а МАМ напротив прост, понятен и потому менее подвержен вероятности переподгонки и ошибок при использовании в торговых системах. Поэтому далее я буду рассматривать только один из вариантов - Most Anchored Momentum.

Итак, можно приступить к вычислению Anchored Momentum (АМ). Мы можем использовать наш пример из рисунка 1 , где текущая цена расположена в точке С, а точка В является "якорем", ее значение принимается за "прошлую цену" и равно последнему значеню SMA. Соответственно:

Anchored Momentum = Текущая цена - Значение SMA

В свою очередь:

Период Momentum = (Период SMA - 1) / 2

что эквивалентно записи:

Период SMA = (2*Период Momentum) + 1

Таким образом, в коде EasyLanguage, формула AM будет выглядеть так:

AM = Close - Average(Close,(2*MomPer)+1)

где MomPer = Период Momentum.

Следующим шагом вычисляем Процентный АМ по формуле:

Процентный АМ = 100*((Текущая цена / Значение SMA) - 1)

или в коде EasyLanguage:

Perc.AM = 100*((Close / Average(Close,(2*MomPer) + 1)) - 1)

Здесь необходимо сделать небольшое отступление. Из полученных формул видно, что совсем не обязательно было предварять расчеты описанием Centered Simple Moving Average, достаточно было бы просто оговорить условие, что Период SMA и Период Momentum жестко связаны формулой:

Период SMA = (2*Период Momentum) + 1

Однако при вычислении General Anchored Momentum, который в данном пересказе не рассматривается, значения Периода SMA и Периода Momentum жестко не связаны, и становится более важным понимание сущности CSMA.

Посмотрим, что же получилось в результате:


Рис.2. Обычный Momentum - голубая кривая, Anchored Momentum - желтая кривая. (Период Momentum = 10, соответственно Период SMA = 21)

Хорошо видно, что Обычный Momentum весьма размашист в своих колебаниях, и не всегда адекватно отражает движение цен. Так, например небольшой рост цен в начале июля проявился просто-таки бурным взлетом Обычного Momentum, а на последовавшем "боковике" цен, Обычный Momentum так же бурно падал. В свою очередь Anchored Momentum более плавный, и более точно отображает, что же происходит с ценами.

Следующий шаг в получении простого, но информативного и удобного индикатора - "сглаживание" Anchored Momentum посредством Экспоненциальной МА. Чтобы убедиться в полезности подобной операции предлагаю посмотреть на следующую картинку:


Рис.3. Голубая кривая - 9-периодный Anchored Momentum, желтая кривая - тот же Anchored Momentum, сглаженный 5-периодной EMA.

Хорошо видно, как посредством сглаживания индикатор лишается своих резких зазубрин.
Rudy Stefenel предлагает проводить сглаживание следующим образом: при расчете Anchored Momentum использовать в числителе не Текущую цену, а EMA от цены:

Сглаженный Anchored Momentum = 100*((Значение ЕМА / Значение SMA) - 1)

где:

Период ЕМА = Период "сглаживания", Период SMA = (2*Период Momentum) + 1

или в коде EasyLanguage эта формула будет выглядеть так:

Smoothed AM = 100*((Xaverage(Close,EmaPer) / Average(Close,(2*MomPer)+1))-1)

где EmaPer = Период "сглаживания" (ЕМА), MomPer = Период Momentum

Далее, в своей статье Rudy Stefenel приводит простую торговую систему, основанную на пересечениях Smoothed Anchored Momentum нулевой линии, а затем подробно описывает ее оптимизацию методом "Простого опережающего тестирования" (тестирование за пределами выборки). Результаты весьма впечатляющие. Однако, это уже тема для другого "пересказа".

Торговая система, предложенная автором статьи очень проста: Открытие длинной позиции, когда Smoothed Anchored Momentum пересекает нулевую линию вверх, закрытие длинной позиции, когда Smoothed Anchored Momentum пересекает нулевую линию вниз. Еще, автор рекомендует, при необходимости, создать вокруг нулевой линии некую буферную зону, во избежание получения частых ложных сигналов на боковых движениях цен. В коде Easy Language весь текст системы содержит всего три строчки:

Inputs: MomPer(11), EmaPer(6), Factor(1.2);

If 100*((XAverage(Close,EmaPer)/Average(Close,(2*MomPer)+1))-1) Cross over Factor Then Buy at Close;

If 100*((XAverage(Close,EmaPer)/Average(Close,(2*MomPer)+1))-1) Cross Below -Factor Then ExitLong at Close;

Здесь: MomPer - Период Momentum, EmaPer - Период сглаживания, Factor - тот самый зазор вокруг нулевой линии, который рекомендован автором для защиты от "дриблинга" на боковиках.

В данном "пересказе" я не ставил перед собой цели описать создание полноценной высокодоходной торговой системы, а хотел только обратить Ваше внимание на то, что определенные манипуляции с индикатором Momentum делают его весьма привлекательным инструментом для использования в МТС (что раньше с ним у меня не очень-то получалось). Поэтому я не проводил никаких оптимизаций и настроек, просто "кинул" написанную выше систему на график РАО ЕЭС, перебрал вручную несколько значений и остановился на следующих: Период Momentum = 3 (следовательно период SMA =7), Период сглаживания = 3, Зазор вокруг нулевой линии = 1,5. Картинка ниже представляет полученный результат. По крайней мере, теперь я убедился, что Momentum - это действительно хороший индикатор тренда.



Еще, мне очень понравилось, как торговая система основанная на Anchored Momentum ведет себя на внутридневных данных, в частности на часовиках по РАО ЕЭС. Но, это как говорится, уже новая сказка...

Итак, индикатор Momentum после незначительных преобразований может служить хорошим элементом стратегии для использования в торговых системах. Применение для расчета индикатора его "привязки" (anchoring) к Centered Simple Moving Average, и последующее сглаживание посредством Exponential Moving Average позволяют средствами Anchored Momentum рано обнаруживать возникшие тренды, и быстро сигнализировать о их завершении.

(с) konkop 2000

Практикум:

Для удобного и оперативного исследования различных индикаторов на основе Momentum я написал код на EasyLanguage, который позволяет простым переключением "флагов" наносить на график все разновидности Momentum и их комбинации. Текст индикатора приведен в Приложении №1 ниже. В Приложении №2 тексты индикаторов в формате Метасток.

{*******************************************************************************
' Project :
' Description : Plots various of Anchored and Ordinary Momentum
' Last Edit : 12-12-2000
' Coded By : KonKop Copyright 2000, FREEWARE
' Contact : konkop@mail.ur.ru
'*******************************************************************************
PlotType flags :
1 - plotting Ordinary (Classic) Momentum
2 - plotting CSMA Anchored Momentum
3 - plotting Smoothed Anchored Momentum
4 - plotting Ordinary Momentum and CSMA Anchored Momentum
5 - plotting CSMA Anchored Momentum and Smoothed Anchored Momentum}

Inputs: MomPer(11), EmaPer(6), PlotType(5);

Value1 = 100*((Close/Close[MomPer])-1); {Ordinary Momentum}

Value2 = 100*((Close/Average(Close,(2*MomPer)+1))-1); {Anchored Momentum}

Value3 = 100*((XAverage(Close,EmaPer)/Average(Close,(2*MomPer)+1))-1); {Smoothed Anchored Momentum}

If PlotType = 1 Then
Plot1(Value1,"OrdMom");

If PlotType = 2 Then
Plot2(Value2,"AnchMom");

If PlotType = 3 Then
Plot3(Value3,"SmAnchMom");

If PlotType = 4 Then Begin
Plot1(Value1,"OrdMom");
Plot2(Value2,"AnchMom");
End;

If PlotType = 5 Then Begin
Plot2(Value2,"AnchMom");
Plot3(Value3,"SmAnchMom");
End;

Plot4(0,"Zero");

{************************}


Текст индикаторов Anchored Momentum в формате Metastock:

Anchored Momentum

MomPer := Input("Momentum Periods",1,1000,10);

SmaPer := Input("Moving Average Periods",1,1000,7);

100 * ((CLOSE / Mov(CLOSE, (2 * MomPer) + 1, S) ) - 1)

Anchored Momentum with Exponential Smoothing

MomPer := Input("Momentum Periods",1,1000,10);

SmaPer := Input("Simple Moving Average Periods",1,1000,7);

EmaPer := Input("Exponential Moving Average Periods",1,1000,7);

100 * ((Mov(CLOSE, EmaPer, E) / Mov(CLOSE, (2 * MomPer) + 1, S) ) - 1)