Знакомимся с техническими индикаторами на Python. Часть 2

В первой части статьи мы познакомились с источниками информации, где можно изучить основы анализа данных и построение графиков на Python🐍.

В этой части познакомимся с двумя простыми техническими индикаторами. И построим их графики с помощью pandas, matplotlib и TA-Lib.

Пара слов о технических индикаторах

Индикаторами технического анализа называются различного рода математические функции, применяемые к историческим значениям (цены, объёма торгов и прочих), которые показывают трейдеру дополнительную информацию об истории ценового движения.

По предназначению технические индикаторы принято делить на следующие подгруппы:

  • Индикаторы тренда (скользящие средние, например, SMA, EMA);
  • Осцилляторы — предсказывающие развороты тенденций (ROC, RSI, стохастический осциллятор);
  • Канальные индикаторы (полосы Боллинджера, канал Кельтнера).

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

Простое скользящее среднее (SMA)

Скользящее среднее — это индикатор направления тренда, который вычисляет арифметическое среднее для истории цен инструмента за определённый период времени.

Рассчитывается по очень простой формуле:

    \[SimpleMovingAverage=\frac{\displaystyle\sum_{i=1}^{n} P_i}{n}\]

Где, P_i — цена (чаще всего рассчитывают по ценам закрытия (close), но также можно применить к максимальной, минимальной, цене открытия, средней цене и др.)

n — период скользящей средней. Это основной параметр при построении, его еще называют длина сглаживания.

Проще говоря, чтобы построить 200-дневное скользящее среднее, суммируются цены закрытия выбранного инструмента за последние 200 дней и полученная сумма делится на 200. Каждый день добавляется новое значение (последняя цена), старое же значение (цена 201 день назад) отбрасывается. Таким образом, среднее значение меняется, скользит день ото дня — отсюда и название «скользящая средняя». 50-дневное скользящее среднее строится на основе данных за последние 50 дней, а 10-дневное — на основе данных за последние 10 дней.

Для новичков стоит сделать одно замечание,  что период скользящей средней соответствует периоду графика, например на дневных графиках SMA с периодом 50 будет рассчитывать среднее значение за предыдущие 50 дней, если графики недельные, то за последние 50 недель и так далее.

Дневные скользящие средние можно перенести на недельные графики, скорректировав период. Например, 50-дневная скользящая средняя соответствует 10-недельной, а 200-дневная — 40-недельной скользящей средней.

Инвесторы фондового рынка обычно применяют скользящее как простой индикатор тренда, а также комбинацию из длиннопериодной и короткопериодной SMA, например 26-периодной и 9-периодной. Тренд считается бычьим (восходящим), пока короткая скользящая средняя располагается выше длинной. Если короткая средняя пересекает длинную сверху вниз, то сигнал считается негативным и наоборот, если короткопериодная пересекает длиннопериодную снизу вверх, то сигнал положительный. Так как скользящие средние являются индикаторами, следующими за трендом, они срабатывают лучше всего при наличии тенденции.

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

Недостатки данного индикатора можно восполнить использованием осцилляторов, об одном из которых речь пойдет дальше.

Осциллятор скорости изменения (ROC)

Индикатор ROC (Rate of Change) – это осциллятор скорости изменения цены между его периодами в процентном соотношении.

В базовом варианте данный инструмент рассчитывается по следующей формуле:

    \[RateOfChange=P/P_n\]

где, P – последняя цена закрытия (close)

P_n – цена закрытия на n дней назад

Как видите последняя цена делится на цену закрытия предыдущего периода давности (например 26 недель назад). Если последняя цена выше предыдущей, значение осциллятора будет больше единицы, а если ниже — меньше. Чем больше выбранный период, тем значимее сигналы осциллятора, хотя их будет намного меньше.

Но использовать данную формулу расчета не всегда удобно, так как результат имеет вид размерности цены.

Сейчас в большинстве случаев (как и в терминале TWS) Rate of Change рассчитывается как процентная разность текущей цены и цены указанного периода прошлого:

    \[RateOfChange=(\frac{P-P_n}{P_n})*100\]

В таком виде ROC рассчитывается в виде процента, на который изменилась цена, что более удобно для унификации.

Нулевая линия является ключевым элементом для этого типа осцилляторов. Ее пересечение снизу вверх считается положительным сигналом (сигнал покупки), а пересечение сверху вниз — отрицательным сигналом (сигнал продажи).

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

Как рисовать графики и строить свои индикаторы

Ниже я расскажу (и покажу) как строить графики и технические индикаторы.

В качестве источника биржевых данных будет использован сайт Alpha Vantage, он  бесплатно предоставляет исторические данные по биржевым инструментам, Forex и криптовалютам.

Для начала необходимо получить API Key, он будет иметь такой вид — R#PE1#E7KZ#66X#N, только без решеток. Его будет необходимо запомнить и желательно никому не показывать.

Так же потребуется установить библиотеки pandas, matplotlib, requests и TA-Lib.

Установка pandas:

Если используете Linux (Ubuntu), то можете воспользоваться этим способом:

Установка matplotlib:

или

Установка requests:

В большинстве дистрибутивов Linux библиотека уже установлена, если нет то выполните команды:

Процесс установки TA-Lib хорошо описан здесь и здесь.

Простейший линейный график SPDR S&P 500 (SPY)

Для построения использовались дневные данные SPDR S&P 500 ETF (SPY) с 3 января 1995 года. При необходимости можно получить цены внутри дня (TIME_SERIES_INTRADAY), недельные (TIME_SERIES_WEEKLY) и так далее. Об этом более подробно можно почитать в документации. Для загрузки доступны форматы CSV и JSON.

График с 50-ти дневным скользящим средним

А если нужно построить график с индикатором за последний год?

Здесь пришлось создать индекс вручную (set_index) т.к. при автоматическом создании pandas удаляет исходную колонку, в нашем случае ‘timestamp’ и преобразует её в индекс, после чего работать с ним, как с обычным столбцом не получится.

Недельный график Micron Technology Inc (MU) с осциллятором изменения скорости за последние 5 лет

Заключение

Библиотеки pandas, matplotlib и TA-Lib в совокупности позволяют построить более сложные и функциональный графики, но первое знакомство лучше начинать с простых и понятных.

💬 В комментариях задавайте вопросы, можете поделиться своим графиком с кодом.

И ознакомтесь с третьей частью этапа, посвященной биржевой торговле.

Другие статьи из программы обучения: