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

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

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

1. Индекс неравенства

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

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

Математика

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

DI 14 = [ C.PRICE - MOVING  AVG 14 ] / [ MOVING AVG 14 ] * 100
where,
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 (коротко известный как 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

Сигнальная линия: Теперь второй компонент индикатора "Знай, что знаю" - это компонент сигнальной линии. Этот компонент - не что иное, как сглаженная версия линии 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 roc
def 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.

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

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

3. Индекс истинной силы

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

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

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

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

TSI LINE = [ DS. ACTUAL PC / DS. ABSOLUTE PC ] * 100
where,
DS. ACTUAL PC = Double smoothed actual price change with the length of 25 and 13
DS. 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

В отличие от двух других индикаторов, True Strength Index имеет довольно длинный код с учетом сложных математических формул для расчета его компонентов. Теперь давайте запрограммируем индикатор на 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, которая принимает данные о цене закрытия акции («close»), период ретроспективного анализа для длинной EMA («длинная»), период ретроспективного анализа для короткой EMA («короткая»), и период ретроспективного обзора для сигнальной линии («сигнал») в качестве параметров. Внутри функции мы сначала вычисляем и сохраняем фактическое изменение цены («diff») и абсолютное изменение цены («abs_diff») в соответствующих переменных.

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

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

Достойны упоминания: кривая Коппока, MACD, Aroon и Awesome Oscillator

Последние мысли!

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

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

Подожди! Если вам интересно узнать о технических индикаторах и алгоритмической торговле с помощью Python, настоятельно рекомендуется воспользоваться онлайн-программой Алгоритмическая торговля для всех, которая является специализацией, проводимой Quantra (платформа Python для количественных финансов). Эта программа хорошо структурирована и разработана таким образом, чтобы как новички, так и опытные пользователи могли легко и эффективно усваивать концепции и усваивать их.

Полный код:

# DISPARITY INDEX
def get_di(data, lookback):
    ma = data.rolling(lookback).mean()
    di = ((data - ma) / ma) * 100
    return di
# KNOW SURE THING
def get_roc(close, n):
    difference = close.diff(n)
    nprev_values = close.shift(n)
    roc = (difference / nprev_values) * 100
    return roc
def 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 INDEX
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