Улучшение систем, следующих за трендом, с помощью коэффициента эффективности.

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

Я только что опубликовал новую книгу после успеха Новые технические индикаторы в Python. Он содержит более полное описание и добавление сложных торговых стратегий со страницей Github, посвященной постоянно обновляемому коду. Если вы считаете, что это вас заинтересует, не стесняйтесь перейти по приведенной ниже ссылке или, если вы предпочитаете купить версию в формате PDF, вы можете связаться со мной в Linkedin.



Расчет коэффициента эффективности

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

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

В зависимости от периода ретроспективного анализа эффективность 1,00 бывает редко. Давайте теперь посмотрим, как рассчитать этот показатель в Python.

def efficiency_ratio(Data, lookback, what, where):
    
    # Change from previous period
    for i in range(len(Data)):
        Data[i, where] = abs(Data[i, what] - Data[i - lookback, what])
    
    # Sum of changes
    for i in range(len(Data)):
        Data[i, where + 1] = (Data[i - lookback + 1:i + 1, where].sum())   
    
    # Efficiency Ratio
    Data[:, where + 2] = Data[:, where] / Data[:, where + 1]
    
    return Data

Вышеупомянутая функция должна использоваться с массивом данных OHLC с несколькими дополнительными столбцами. Для этого мы можем определить простую функцию, которая добавляет столбцы.

def adder(Data, times):
    
    for i in range(1, times + 1):
    
        z = np.zeros((len(Data), 1), dtype = float)
        Data = np.append(Data, z, axis = 1)
return Data
# To add 3 empty columns
my_ohlc_data = adder(my_ohlc_data, 3)

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



Использование коэффициента эффективности

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

  • Открывайте длинную позицию (покупайте), когда краткосрочная скользящая средняя пересекает долгосрочную скользящую среднюю снизу вверх.
  • Открывайте короткую позицию (продавайте), когда краткосрочная скользящая средняя пересекает долгосрочную скользящую среднюю сверху вниз.

Мы можем добавить фильтр коэффициента эффективности, чтобы учесть силу тренда. Давайте рассмотрим этот исчерпывающий пример ниже и обсудим его.

Система состоит из двух простых скользящих средних, одна из которых имеет период 30, а другая - 60. Добавлен фильтр коэффициента эффективности, так что условия становятся следующими:

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

Часть, помеченная как 1 на приведенном выше графике, показывает пересечение с коэффициентом эффективности, уже превышающим 0,50, и показывает развитие здорового тренда, поэтому мы должны были инициировать длинный ордер (Buy) и следовать этому тренду. Часть, помеченная как 2, показывает медвежий крест, а коэффициент эффективности намного ниже 0,50, что не дает нам сигнала для открытия короткой позиции (продажи). Как оказалось, нам удалось избежать убыточной сделки из-за дополнительного фильтра. Часть 3 показывает еще один успешный сигнал от пересечения и фильтра, хотя он снижается к 0,50, но остается выше него. Это то, что называется сигналом низкой убежденности. Напротив, сильным сигналом убедительности является часть 1, где коэффициент эффективности превышает пороговое значение 0,50.

Часть, помеченная как 4, показывает еще одно спасение фильтра после того, как крест не смог подать правильный сигнал. Часть 5 - вот где все становится интересно. У нас было пересечение без сигнала от фильтра, поскольку коэффициент эффективности ниже 0,50, но при движении рынка в ожидаемом направлении (т. Е. Ниже) коэффициент эффективности поднялся ниже 0,50 (в части 6 ) и сигнал подтвердился. Наконец, часть 7 показывает некоторую неустойчивость, которая не могла быть прибыльной.

Помните, что для кодирования простой скользящей средней для данных OHLC вы можете использовать следующую функцию:

def ma(Data, lookback, what, where):
    
    for i in range(len(Data)):
            try:
                Data[i, where] = (Data[i - lookback + 1:i + 1, what].mean())
        
            except IndexError:
                pass
    return Data

Заключение

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