Представляем простое улучшение известного индикатора.

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

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



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

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

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



Создание зеркального индикатора

Зеркальный индикатор в основном представляет собой RSI со следующими модификациями:

  • Функция относительной силы рассчитывается на основе максимумов и минимумов цены, а не только цены закрытия в исходной версии RSI.
  • Период ретроспективного анализа по умолчанию равен 5, а не 14, как в исходной версии RSI.
  • Значения RSI, примененные к максимумам ниже 50, скрыты, а значения RSI, примененные к минимумам выше 50, скрыты. Это нужно для объединения двух линий RSI в зеркальный индикатор.

Следовательно, бычьи сигналы получены от более низкого RSI, а медвежьи сигналы получены от более высокого RSI. График ниже показывает EURUSD с зеркальным индикатором.

Чтобы закодировать зеркальный индикатор в Python, мы можем использовать приведенную ниже функцию.

# Calculating the RSI on the highs
my_data = rsi(my_data, 5, 1, 4)
# Calculating the RSI on the lows
my_data = rsi(my_data, 5, 2, 5)
# Cleaning
for i in range(len(my_data)):
    
    if my_data[i, 4] < 50:
        
        my_data[i, 4] = 50
        
    if my_data[i, 5] > 50:
        
        my_data[i, 5] = 50

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



Использование индикатора зеркала

Поскольку не все мы являемся алгоритмическими трейдерами, эта часть предназначена для людей, предпочитающих более дискреционный (ручной) подход к торговле. Зеркальный индикатор, как упоминалось ранее, представляет собой просто модифицированный RSI, и поэтому мы можем применять классические методы, такие как дивергенции и графические уровни поддержки/сопротивления. На графике ниже на BTCUSD показан зеркальный индикатор с барьерами на уровнях 80 и 20. Тонкие черные линии представляют отклонения от рыночной цены, сигнализирующие об истощении.

Помните, что:

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

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



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

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

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

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

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