Эффективные технические индикаторы, реализованные на Python

Эффективные индикаторы, необходимые для успешной торговли на рынке с его внедрением в Python

Рынок задушен тоннами и тоннами технических индикаторов, и для начинающего трейдера будет кошмаром выбрать правильный. Поскольку я потратил довольно много времени, бродя по этим индикаторам и внедряя их на рынке, я решил создать список из 3 самых эффективных индикаторов вместе с их реализацией в Python, чтобы помочь новичкам с отличным стартом в области технического анализа. Без лишних слов, давайте погрузимся в статью!

Примечание: Предстоящие индикаторы выбираются не случайным образом, а выбираются на основе результатов, полученных путем их тестирования на исторических данных Apple.

1. Disparity Index

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

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

Математика

Расчет индекса неравенства довольно прост. Во-первых, мы должны найти разницу между закрытием цены акции и скользящей средней за указанное количество периодов и разделить разницу на скользящую среднюю, а затем умножить ее на 100. Расчет индекса неравенства с типичным значением 14 в качестве периода ретроспективного анализа можно представить следующим образом:

DI 14 = [ C.PRICE - MOVING  AVG 14 ] / [ MOVING AVG 14 ] * 100where,
DI 14 = 14-day Disparity Index
MOVING AVG 14 = 14-day Moving Average
C.PRICE = Closing price of the stock

Реализация Python

Теперь давайте реализуем рассмотренную выше математику практически с помощью Python для расчета индикатора.

def get_di(data, lookback):
ma = data.rolling(lookback).mean()
di = ((data - ma) / ma) * 100
return di

Объяснение кода

Во-первых, мы определяем функцию с именем «get_di», которая принимает цену закрытия акции («данные») и период ретроспективного анализа («ретроспективный взгляд») в качестве параметров. Внутри функции мы сначала вычисляем скользящую среднюю данных цены закрытия за указанное количество периодов ретроспективного анализа. Затем мы подставляем определенные значения в формулу индекса несоответствия для расчета показаний. Наконец, мы возвращаем рассчитанные показания в качестве вывода.

2. Know Sure Thing

Индикатор Know Sure Thing (сокращенно KST) представляет собой неограниченный осциллятор импульса, который широко используется трейдерами для реального понимания показаний индикатора ROC. Индикатор KST основан на четырех разных таймфреймах сглаженного ROC и объединяет собирательные данные в один осциллятор.

Компоненты и математика

Индикатор Know Sure Thing состоит из двух компонентов:

Линия KST: Первый компонент – это сама линия KST. Чтобы рассчитать показания линии KST, мы должны сначала определить четыре ROC с 10, 15, 20, 30 в качестве значений «n» соответственно. Затем каждый ROC сглаживается с помощью простой скользящей средней с 10, 10, 10, 15 в качестве периода ретроспективного анализа соответственно. Эта сглаженная ROC известна как ROCSMA. После достижения ROCSMA для четырех разных таймфреймов мы должны умножить первый ROCSMA на один, второй ROCSMA на два, третий ROCSMA на три и четвертый на четыре. Наконец, эти четыре продукта добавляются друг к другу. Вычисление линии KST можно математически представить следующим образом:

KL = (ROCSMA1 * 1) + (ROCSMA2 * 2) + (ROCSMA3 * 3) + (ROCSMA4 * 4)where,
KL = KST Line
ROCSMA1 = ROC 10 smoothed with SMA 10
ROCSMA2 = ROC 15 smoothed with SMA 10
ROCSMA3 = ROC 20 smoothed with SMA 10
ROCSMA4 = ROC 30 smoothed with SMA 15

Сигнальная линия: Теперь вторым компонентом индикатора Know Sure Thing является компонент сигнальной линии. Этот компонент представляет собой не что иное, как сглаженную версию линейки KST. Для сглаживания значений линии KST широко используется простая скользящая средняя с 9 в качестве периода ретроспективного анализа. Расчет сигнальной линии выглядит следующим образом:

SIGNAL LINE = SMA9 ( KST LINE )

Реализация Python

Теперь пришло время внедрить индикатор в Python, чтобы получить показания его компонентов.

def get_roc(close, n):
difference = close.diff(n)
nprev_values = close.shift(n)
roc = (difference / nprev_values) * 100
return rocdef get_kst(close, sma1, sma2, sma3, sma4, roc1, roc2, roc3, roc4, signal):
rcma1 = get_roc(close, roc1).rolling(sma1).mean()
rcma2 = get_roc(close, roc2).rolling(sma2).mean()
rcma3 = get_roc(close, roc3).rolling(sma3).mean()
rcma4 = get_roc(close, roc4).rolling(sma4).mean()
kst = (rcma1 * 1) + (rcma2 * 2) + (rcma3 * 3) + (rcma4 * 4)
signal = kst.rolling(signal).mean()
return kst, signal

Объяснение кода

Приведенный выше код можно разделить на две разные части: расчет ROC и расчет KST.

Расчет ОКР: Сначала мы определяем функцию с именем ‘get_roc’, которая принимает в качестве параметров цену закрытия акции (‘close’) и значение ‘n’ (‘n’). Внутри функции мы сначала берем разницу между текущей ценой закрытия и ценой закрытия за указанное количество периодов назад, используя функцию «diff», предоставляемую пакетом Pandas. С помощью функции ‘shift’ мы учитываем цену закрытия за указанное количество периодов назад и сохраняем ее в переменной ‘nprev_values’. Затем мы подставляем определенные значения в формулу показателя ROC, которую мы обсуждали ранее, чтобы вычислить значения и, наконец, вернуть данные.

Расчет KST: Во-первых, мы определяем функцию с именем «get_kst», которая принимает в качестве параметров цену закрытия акции («закрытие»), четыре периода ретроспективного анализа для сглаживания значений ROC («sma1», «sma2», «sma3», «sma4»), четыре «n» значения ROC («roc1», «roc2», «roc3», «roc4») и период ретроспективного анализа сигнальной линии («сигнал»). Внутри функции мы сначала вычисляем четыре значения ROCSMA, используя функцию «rolling», предоставляемую пакетом Pandas, и функцию «get_roc», которую мы создали ранее. Затем мы подставляем рассчитанные ROCSMA в формулу, которую мы обсуждали ранее, чтобы определить показания линии KST. Затем мы сглаживаем значения линий KST с помощью функции «rolling», чтобы получить значения сигнальной линии и сохранить их в переменной «signal». Наконец, мы возвращаем обе вычисленные составляющие индикатора KST.

3. True Strength Index

True Strength Index (TSI) — это осциллятор импульса, который в основном используется трейдерами для определения того, является ли рынок восходящим или нисходящим импульсом, и торговли вместе с ним. Он также используется для определения текущего состояния рынка, перекупленности или перепроданности, но это не главная сильная сторона индикатора.

Компоненты и математика

Как и индикатор Know Sure Thing, индекс истинной силы также состоит из двух компонентов:

Линия TSI: Первый компонент — это сама линия TSI, которая рассчитывается путем предварительного определения фактического изменения цены (текущая цена закрытия минус предыдущая цена закрытия) и абсолютного изменения цены (абсолютные значения фактического изменения цены). Затем EMA с 25 в качестве количества периодов (длинных) берется как для фактического изменения цены, так и для абсолютного изменения цены. Затем эти две EMA снова сглаживаются 13-дневной (короткой) экспоненциальной скользящей средней. Этот процесс сглаживания ряда данных с помощью двух EMA известен как двойное сглаживание, и его цель состоит в том, чтобы устранить шум из данных. Теперь дважды сглаженное фактическое изменение цены делится на дважды сглаженное абсолютное изменение цены, а затем умножается на 100, чтобы получить показания линии TSI. Обратите внимание, что параметры (25, 13), которые мы приняли во внимание, являются типичными настройками, но могут быть настроены соответствующим образом. Расчет может быть нечетким, но его можно легко понять, если мы интерпретируем его в виде формулы или представления:

TSI LINE = [ DS. ACTUAL PC / DS. ABSOLUTE PC ] * 100where,DS. ACTUAL PC = Double smoothed actual price change with the length of 25 and 13DS. ABSOLUTE PC = Double smoothed absolute price change with the length of 25 and 13

Сигнальная линия: Следующим компонентом является компонент сигнальной линии, который представляет собой не что иное, как экспоненциальную скользящую среднюю TSI за определенное количество периодов (находится в пределах от 7 до 12 периодов). Большинство трейдеров предпочитают периоды, близкие к 7 для дневной торговли и близкие к 12 для долгосрочного инвестирования. В этой статье мы используем 12 в качестве количества периодов, поскольку мы будем иметь дело с данными о запасах на дневном таймфрейме, а не с минутным таймфреймом. Расчет можно представить следующим образом:

SIGNAL LINE = EXP.MA 13 [ TSI LINE ]

Реализация Python

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

def get_tsi(close, long, short, signal):
diff = close - close.shift(1)
abs_diff = abs(diff)

diff_smoothed = diff.ewm(span = long, adjust = False).mean()
diff_double_smoothed = diff_smoothed.ewm(span = short, adjust = False).mean()
abs_diff_smoothed = abs_diff.ewm(span = long, adjust = False).mean()
abs_diff_double_smoothed = abs_diff_smoothed.ewm(span = short, adjust = False).mean()

tsi = (diff_double_smoothed / abs_diff_double_smoothed) * 100
signal = tsi.ewm(span = signal, adjust = False).mean()
tsi = tsi[tsi.index >= '2020-01-01'].dropna()
signal = signal[signal.index >= '2020-01-01'].dropna()

return tsi, signal

Объяснение кода

Во-первых, мы определяем функцию с именем «get_tsi», которая принимает данные о цене закрытия акции («закрытие»), период ретроспективного анализа для длинной EMA («длинная»), период ретроспективного анализа для короткой EMA («короткая») и период ретроспективного анализа для сигнальной линии («сигнал») в качестве параметров. Внутри функции мы сначала вычисляем и сохраняем фактическое изменение цены («diff») и абсолютное изменение цены («abs_diff») в соответствующую переменную.

Затем, используя функцию ‘ewm’, предоставляемую пакетом Pandas для определения экспоненциальной скользящей средней, мы дважды сглаживаем ранее рассчитанные изменения цены, чтобы получить двойное сглаженное фактическое изменение цены (‘diff_double_smoothed’) и двойное сглаженное абсолютное изменение цены (‘abs_diff_double_smoothed’).

Затем мы подставляем двойные сглаженные значения в формулу линии TSI, чтобы определить ее показания. Чтобы рассчитать значения сигнальной линии, мы берем EMA показаний определенной линии TSI за указанное количество периодов. Наконец, возвращаем рассчитанные компоненты.

Почетные упоминания: Coppock Curve, MACD, Aroon и Awesome Oscillator

Заключение

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

С учетом сказанного, вы дошли до конца статьи. Если вы забыли следовать какой-либо из частей кодирования, не волнуйтесь. Я предоставил полный исходный код внизу статьи. Надеюсь, вы узнали что-то новое и полезное из этой статьи.

Спонсируется: EOD Historical Data является одним из лидеров на рынке финансовых API, предоставляя широкий спектр API, начиная от базовых, таких как рыночные данные на конец дня, и заканчивая настраиваемыми API, такими как API финансовых новостей и API скринера акций. Все их API разработаны таким образом, чтобы их было легко использовать по своей природе, чтобы новички могли работать с ними без каких-либо препятствий. Я лично использовал API EOD Historical Data, и, по моему опыту, их API подходят как для любителей, так и для профессионалов и используются для сторонних проектов и для создания приложений корпоративного уровня.

Полный код:

# DISPARITY INDEXdef get_di(data, lookback):
ma = data.rolling(lookback).mean()
di = ((data - ma) / ma) * 100
return di# KNOW SURE THINGdef get_roc(close, n):
difference = close.diff(n)
nprev_values = close.shift(n)
roc = (difference / nprev_values) * 100
return rocdef get_kst(close, sma1, sma2, sma3, sma4, roc1, roc2, roc3, roc4, signal):
rcma1 = get_roc(close, roc1).rolling(sma1).mean()
rcma2 = get_roc(close, roc2).rolling(sma2).mean()
rcma3 = get_roc(close, roc3).rolling(sma3).mean()
rcma4 = get_roc(close, roc4).rolling(sma4).mean()
kst = (rcma1 * 1) + (rcma2 * 2) + (rcma3 * 3) + (rcma4 * 4)
signal = kst.rolling(signal).mean()
return kst, signal# TRUE STRENGTH INDEXdef get_tsi(close, long, short, signal):
diff = close - close.shift(1)
abs_diff = abs(diff)

diff_smoothed = diff.ewm(span = long, adjust = False).mean()
diff_double_smoothed = diff_smoothed.ewm(span = short, adjust = False).mean()
abs_diff_smoothed = abs_diff.ewm(span = long, adjust = False).mean()
abs_diff_double_smoothed = abs_diff_smoothed.ewm(span = short, adjust = False).mean()

tsi = (diff_double_smoothed / abs_diff_double_smoothed) * 100
signal = tsi.ewm(span = signal, adjust = False).mean()
tsi = tsi[tsi.index >= '2020-01-01'].dropna()
signal = signal[signal.index >= '2020-01-01'].dropna()

return tsi, signal

Источник