Применение простого паттерна «Голова и плечи» на RSI.

Техническое распознавание паттернов — это в основном субъективная область, в которой аналитик или трейдер применяет теоретические конфигурации, такие как голова и плечи, чтобы предсказать следующее вероятное направление. Однако мы редко применяем их к индикаторам, которые могут быть интуитивно понятными, но стоит попробовать. В этой статье обсуждается применение прямой и гибкой версии фигуры «голова и плечи» к индексу относительной силы.

Я только что выпустил новую книгу после успеха моей предыдущей «Книга торговых стратегий». Он содержит передовые индикаторы и стратегии, следующие за трендом, а также страницу GitHub, посвященную постоянно обновляемому коду. Кроме того, в этой книге представлены оригинальные цвета после оптимизации затрат на печать. Если вы чувствуете, что это вас интересует, не стесняйтесь посетить приведенную ниже ссылку Amazon, или, если вы предпочитаете купить версию в формате PDF, вы можете связаться со мной на LinkedIn.



Паттерн «Голова и плечи»

Чартисты старой школы хорошо знакомы с моделями головы и плеч, которые сигнализируют о разворотах и ​​указывают на вероятность указанных разворотов. Несмотря на свою простоту, они очень субъективны, и некоторые из них не видны, как другие. Это затрудняет возможность узнать, добавляют ли они ценность или нет. К счастью, мы можем упростить условия с помощью алгоритмов. Ниже показан пример головы и плеч.

Мы можем заметить три важных элемента в голове и плечах:

  • Линия шеи. Это линия, соединяющая самый низкий минимум между тремя пиками и началом/концом фигуры. Он служит для определения уровня отката.
  • Откат:пробив линию шеи, рынок должен предпринять отчаянную попытку к линии шеи, но не сможет продолжить рост, поскольку продавцы используют этот уровень как повторный вход для продолжения продажи. Таким образом, уровень отката является оптимальной точкой продажи после проверки головы и плеч.
  • Потенциал: это цель головы и плеч. Он измеряется как одинаковое расстояние между вершиной паттерна и линией шеи, спроецированной ниже и начинающейся с той же точки линии шеи, как показано на графике (две стрелки имеют одинаковую длину).

Фигура «Голова и плечи» может иметь любой размер, но желательно, чтобы она была видна большинству участников рынка, чтобы ее влияние было сильнее. Теоретически психологическое объяснение модели заключается в том, что с последним плечом рынку не удалось протолкнуть цены за пределы головы, и поэтому он демонстрирует слабость, которой может воспользоваться другая команда.

Точно так же три элемента, присутствующие в перевернутой голове и плечах:

  • Линия шеи. Это линия, соединяющая самый высокий максимум между тремя впадинами и началом/концом фигуры. Он служит для определения уровня отката.
  • Откат:преодолев линию шеи, рынок должен предпринять отчаянную попытку приблизиться к линии шеи, но не сможет продолжить движение вниз, поскольку покупатели используют этот уровень как повторный вход для продолжения движения вверх. Таким образом, уровень отката является оптимальной точкой для покупки после проверки перевернутой головы и плеч.
  • Потенциал: это цель обратной головы и плеч. Он измеряется как такое же расстояние между нижней частью паттерна и линией шеи, спроецированной выше и начинающейся с той же точки линии шеи, как показано на графике (две стрелки имеют одинаковую длину).

Теперь мы определим RSI, прежде чем применять паттерны на RSI для обнаружения разворотов, как это было рекомендовано изобретателем индикатора Уэллсом Уайлдером в его книге 1978 года.

Если вы хотите видеть больше статей, подпишитесь на мой ЕЖЕДНЕВНЫЙ информационный бюллетень (доступен бесплатныйплан) по ссылке ниже. В нем представлены мои статьи на Medium, другие торговые стратегии, уроки кодирования, связанные с исследованиями и анализом, а также подписчики получают бесплатную копию моей первой книги в формате PDF. Вы можете ожидать 5–7 статей в неделю с платной подпиской и 1–2 статей в неделю с бесплатным планом. Это помогло бы мне продолжить делиться своими исследованиями. Спасибо!



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

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

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

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

Для расчета индекса относительной силы нам нужен массив OHLC (а не фрейм данных). Это означает, что мы будем рассматривать массив из 4 столбцов. Таким образом, функция индекса относительной силы выглядит следующим образом:

# The function to add a number of columns inside an array
def adder(Data, times):
    
    for i in range(1, times + 1):
    
        new_col = np.zeros((len(Data), 1), dtype = float)
        Data = np.append(Data, new_col, axis = 1)
        
    return Data
# The function to delete a number of columns starting from an index
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 number of rows from the beginning
def jump(Data, jump):
    
    Data = Data[jump:, ]
    
    return Data
# Example of adding 3 empty columns to an array
my_ohlc_array = adder(my_ohlc_array, 3)
# Example of deleting the 2 columns after the column indexed at 3
my_ohlc_array = deleter(my_ohlc_array, 3, 2)
# Example of deleting the first 20 rows
my_ohlc_array = jump(my_ohlc_array, 20)
# Remember, OHLC is an abbreviation of Open, High, Low, and Close and it refers to the standard historical data file
def ma(Data, lookback, close, where): 
    
    Data = adder(Data, 1)
    
    for i in range(len(Data)):
           
            try:
                Data[i, where] = (Data[i - lookback + 1:i + 1, close].mean())
            
            except IndexError:
                pass
            
    # Cleaning
    Data = jump(Data, lookback)
    
    return Data
def ema(Data, alpha, lookback, what, where):
    
    alpha = alpha / (lookback + 1.0)
    beta  = 1 - alpha
    
    # First value is a simple SMA
    Data = ma(Data, lookback, what, where)
    
    # Calculating first EMA
    Data[lookback + 1, where] = (Data[lookback + 1, what] * alpha) + (Data[lookback, where] * beta)    
 
    # Calculating the rest of EMA
    for i in range(lookback + 2, len(Data)):
            try:
                Data[i, where] = (Data[i, what] * alpha) + (Data[i - 1, where] * beta)
        
            except IndexError:
                pass
            
    return Data
def rsi(Data, lookback, close, where):
    
    # Adding a few columns
    Data = adder(Data, 5)
    
    # Calculating Differences
    for i in range(len(Data)):
        
        Data[i, where] = Data[i, close] - Data[i - 1, close]
     
    # Calculating the Up and Down absolute values
    for i in range(len(Data)):
        
        if Data[i, where] > 0:
            
            Data[i, where + 1] = Data[i, where]
            
        elif Data[i, where] < 0:
            
            Data[i, where + 2] = abs(Data[i, where])
            
    # Calculating the Smoothed Moving Average on Up and Down absolute values    
    lookback = (lookback * 2) - 1 # From exponential to smoothed
    Data = ema(Data, 2, lookback, where + 1, where + 3)
    Data = ema(Data, 2, lookback, where + 2, where + 4)        
    # Calculating the Relative Strength
    Data[:, where + 5] = Data[:, where + 3] / Data[:, where + 4]
    
    # Calculate the Relative Strength Index
    Data[:, where + 6] = (100 - (100 / (1 + Data[:, where + 5])))        
    # Cleaning
    Data = deleter(Data, where, 6)
    Data = jump(Data, lookback)        
    return Data

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



Обнаружение паттерна на RSI

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

  • Для бычьего сигнала: 2-периодный RSI должен опуститься ниже уровня перепроданности, снова выйти на поверхность, снова опуститься глубже, чем первое и последнее падение, затем восстановиться и снова опуститься, прежде чем превысит уровень перепроданности. Это должно дать нам форму букв VVV, где средняя буква V имеет более низкое основание, чем две другие.
  • Для медвежьего сигнала: 2-периодный RSI должен превысить уровень перекупленности, опуститься, снова превзойти первую и последнюю вершины, затем опуститься и снова превзойти уровень, прежде чем пробить уровень перекупленности. Это должно дать нам форму букв AAA, где средняя буква A имеет более высокий верх, чем две другие.

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

def signal(Data, rsi_column, buy_column, sell_column):
    
    Data = adder(Data, 10)
    
    for i in range(len(Data)):    
        
        # Bullish Signal
        if Data[i, rsi_column] > oversold and \
           Data[i - 1, rsi_column] < oversold and \
           Data[i - 2, rsi_column] > oversold and \
           Data[i - 3, rsi_column] < oversold and Data[i - 3, rsi_column] < Data[i - 1, rsi_column] and Data[i - 3, rsi_column] < Data[i - 5, rsi_column] and \
           Data[i - 4, rsi_column] > oversold and \
           Data[i - 5, rsi_column] < oversold:
            
            Data[i, buy_column] = 1
                 
        # Bearish Signal
        if Data[i, rsi_column] < overbought and \
           Data[i - 1, rsi_column] > overbought and \
           Data[i - 2, rsi_column] < overbought and \
           Data[i - 3, rsi_column] > overbought and Data[i - 3, rsi_column] > Data[i - 1, rsi_column] and Data[i - 3, rsi_column] > Data[i - 5, rsi_column] and \
           Data[i - 4, rsi_column] < overbought and \
           Data[i - 5, rsi_column] > overbought:
            
            Data[i, sell_column] = -1
            
    return Data

Генерируемые сигналы довольно редкие и не очень качественные. Это намекает на тот факт, что эта версия фигуры «голова и плечи», вероятно, не подходит для такой торговли.

Заключение

Не забывайте всегда проводить бэк-тесты. Вы всегда должны верить, что другие люди неправы. Мои индикаторы и стиль торговли могут подойти мне, но не вам.

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

Medium — это центр для многих интересных чтений. Я прочитал много статей, прежде чем решил начать писать. Подумайте о том, чтобы присоединиться к Medium, используя мою реферальную ссылку!



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

Последнее слово

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

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