Создание индикатора времени, проведенного выше / ниже среднего для торговли на рынках.

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

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

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



Концепция скользящих средних

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

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

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

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

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



Время, проведенное выше / ниже среднего

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

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

Мы попытаемся измерить то же самое с расчетом времени, проведенного выше / ниже среднего (TSABM). Цель состоит в том, чтобы сказать, что мы наблюдаем ослабление текущего тренда и, следовательно, можем использовать его в тандеме с сигналом дивергенции. Как можно понять из предыдущего утверждения, это противоположный сигнал, и хотя он измеряет время, это не временная диаграмма.

Чтобы измерить TSABM, мы должны выполнить следующие шаги:

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

Следовательно, всякий раз, когда рыночная цена меняет сторону относительно своей скользящей средней, TSABM сбрасывается и следует новому условию.

Интересно то, что барьеры, сигнализирующие об исчерпании тренда, равны периоду ретроспективного анализа. Это означает, что с 20-периодным TSABM барьер, который сигнализирует об истощении бычьего тренда, лежит на 20 (медвежий сигнал), а барьер, который сигнализирует об истощении медвежьего тренда, находится на -20 (бычий сигнал).

Чтобы закодировать этот индикатор, нам нужно сначала определить основные функции манипуляции:

# The function to add a certain number of columns
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
# The function to deleter a certain number of columns
def deleter(Data, index, times):
    
    for i in range(1, times + 1):
    
        Data = np.delete(Data, index, axis = 1)                  
    return Data
# The function to delete a certain number of rows from the beginning
def jump(Data, jump):
    
    Data = Data[jump:, ]
    
    return Data

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

def time_spent_above_below_mean(Data, lookback, close, where):
    
    # Adding the required columns
    Data = adder(Data, 4)
    
    # Calculating the moving average
    Data = ma(Data, lookback, close, where)
        
    # Time Spent Above the Mean    
    for i in range(len(Data)):
        
        Data[0, where + 1] = 1
        
        if Data[i, close] > Data[i, where]:
            Data[i, where + 1] = Data[i - 1, where + 1] + 1
            
        else:
            Data[i, where + 1] = 0
    # Time Spent Below the Mean   
    for i in range(len(Data)):
        
        Data[0, where + 2] = -1
        
        if Data[i, close] < Data[i, where]:
            Data[i, where + 2] = Data[i - 1, where + 2] - 1
            
        else:
            Data[i, where + 2] = 0
            
    # Time Spent Above/Below Mean
    Data[:, where + 3] = Data[:, where + 1] + Data[:, where + 2]
    
    # Cleaning
    Data = deleter(Data, where, 3)
            
    return Data

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



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

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

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

Заключение и важный отказ от ответственности

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

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

Я должен отметить несколько моментов в моих бэк-тестах и ​​статьях:

  • Я использую спред, основанный на институциональных котировках небольшой доли пунктов. Как правило, розничным трейдерам предоставляется колоссальный спред в размере 0,80–3,00 пункта за сделку. Это огромно и несправедливо по отношению к ним. Тестирую на истории спред 0,2–0,5. Однако большинство «прибыльных» стратегий, использующих часовой таймфрейм, по-прежнему работают со спредом в 1 пункт. Для тех, кто использует таймфреймы M15 или M5, они не могут быть прибыльными со спредом в 1 пункт.
  • Я использую расчет периода удержания, близкий к закрытому на случай отсутствия процесса управления рисками.
  • Некоторые из представленных мною тестов на истории неудачны, и они публикуются либо для того, чтобы развенчать миф о торговле, либо для того, чтобы представить интересные функции, которые читатели могут запрограммировать.
  • Наконец, я твердо убежден, что нельзя кормить с ложечки. Я научился на практике, а не копируя. Вы должны понять идею, функцию, интуицию, условия стратегии, а затем разработать (даже лучше) одну из них самостоятельно, чтобы вы протестировали ее на исторических данных и улучшили, прежде чем принять решение о том, чтобы применить ее вживую или отказаться от нее. Так вы сможете поделиться со мной своей лучшей стратегией, и мы вместе разбогатеем.

Подводя итог, можно ли сказать, что стратегии, которые я предлагаю, реалистичны? Да, но только путем оптимизации среды (надежный алгоритм, низкие затраты, честный брокер, надлежащее управление рисками и управление заказами). Предусмотрены ли стратегии исключительно для торговли? Нет, это необходимо для стимулирования мозгового штурма и получения новых торговых идей, поскольку мы все устали слышать о перепроданности RSI как о причине для открытия короткой позиции или о преодолении сопротивления как о причине идти долго. Я пытаюсь представить новую область под названием «Объективный технический анализ», в которой мы используем достоверные данные для оценки наших методов, а не полагаемся на устаревшие классические методы.