Свечные графики - наиболее распространенная форма графического анализа. Это простой способ понять психологию рынка, имея при этом всю количественную информацию, необходимую для определения рыночной цены. Другой вариант свечей, называемый Heiken-Ashi, кажется, сглаживает изображение, так что характер тренда становится более ясным, однако графики Heikin-Ashi не отражают фактические цены, поскольку они являются простыми средними значениями, поэтому для упрощения мы можем создать Heikin -Индикатор Аши.

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



Метод Хейкин Аши

Свечи - это быстрый способ понять данные OHLC и обнаружить закономерности. Это очень просто и легко интерпретируется. Бычья (обычно зеленая) свеча - это когда рынок закрывается выше цены открытия. Медвежья (обычно красная) свеча - это когда рынок закрывается ниже цены открытия.

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

Теперь, когда мы увидели, что такое свечной график, мы можем перейти к определению и кодированию графика Хайкен-Аши.

Свечи Heiken-Ashi (также называемые Heikin-Ashi) стремятся очистить картину и показать более четкий тренд за счет сглаживания данных OHLC. Вот как рассчитать свечи Хайкен-Аши:

И для расчета максимальной и минимальной цены мы берем максимальную и минимальную цены из следующих:

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

Чтобы закодировать функцию на Python, которая добавляет 4 новых столбца, содержащих данные OHLC Heiken-Ashi, мы можем использовать следующий блок кода:

def heiken_ashi(Data, opening, high, low, close, where):
    
    # Heiken-Ashi Open
    try:
        for i in range(len(Data)):
            Data[i, where] = (Data[i - 1, opening] + Data[i - 1, close]) / 2
    except:
        pass
    
    # Heiken-Ashi Close
    for i in range(len(Data)):
        Data[i, where + 3] = (Data[i, opening] + Data[i, high] + Data[i, low] + Data[i, close]) / 4
    
    # Heiken-Ashi High
    for i in range(len(Data)):    
        Data[i, where + 1] = max(Data[i, where], Data[i, where + 3], Data[i, high])
    
    # Heiken-Ashi Low    
    for i in range(len(Data)):    
        Data[i, where + 2] = min(Data[i, where], Data[i, where + 3], Data[i, low])      
    
    return Data
# To be used on an OHLC array with a few columns to spare
my_ohlc_array = heiken_ashi(my_ohlc_array, 0, 1, 2, 3, 4)
# The numbers signify in order: Open, High, Low, Close, then the column indexed at 4 is where the first new Heiken OHLC data will be populated (Meaning that the columns 4, 5, 6, and 7 will have a brand new OHLC data)

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

Индикатор Heikin Ashi

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

  • Когда преобразованная цена закрытия превышает преобразованную цену открытия, индикатор Heikin Ashi должен показывать значение 1.
  • Когда преобразованная цена закрытия меньше преобразованной цены открытия, индикатор Heikin Ashi должен показывать значение -1. ​​

# 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
def heikin_ashi_indicator(Data, start, where):
    
    Data = adder(Data, 1)
    
    for i in range(len(Data)):
        
        if (Data[i, start + 3] > Data[i, start]):
            
            Data[i, where] = 1
            
        elif (Data[i, start + 3] < Data[i, start]):
            Data[i, where] = -1
            
    return Data

Основная стратегия, использующая график Heiken-Ashi, состоит в том, чтобы просто покупать и продавать всякий раз, когда цвет свечей меняется, это эквивалент покупки и продажи на основе изменения индикатора Heikin-Ashi между -1 и 1. Это должно дать нам следующие условия:

  • Открывайте длинную позицию (Покупайте) всякий раз, когда свеча Хайкен-Аши меняет цвет с красного на зеленый. Удерживайте позицию до получения противоположного сигнала. Мы должны быть осторожны, чтобы открыть позицию, используя истинную рыночную цену, а не ту, которая отображается на графике Хайкен-Аши.
  • Открывайте длинную позицию (Покупайте) всякий раз, когда свеча Хайкен-Аши меняет цвет с красного на зеленый. Удерживайте позицию до получения противоположного сигнала. Мы должны быть осторожны, чтобы открыть позицию, используя истинную рыночную цену, а не ту, которая отображается на графике Хайкен-Аши.

def signal(Data, buy, sell):
    
    Data = adder(Data, 10)
    Data = rounding(Data, 5)
    
    for i in range(len(Data)):
            
        if Data[i, 5] == 1 and Data[i - 1, 5] == -1:
            Data[i, sell] = -1
            
        elif Data[i, 5] == -1 and Data[i - 1, 5] == 1:            
            Data[i, buy] = 1    
            
    return Data

Одна интересная вещь, которую нужно сделать, - это изменить правила и посмотреть, что произойдет. Обратите внимание, что управление рисками использует соотношение риска и прибыли 3,0.

  • Открывайте длинную позицию (покупайте), когда индикатор Heiken-Ashi показывает значение 1, в то время как предыдущее значение было -1. Удерживайте позицию до получения противоположного сигнала. Мы должны быть осторожны, чтобы открыть позицию, используя истинную рыночную цену, а не ту, которая отображается на графике Хайкен-Аши.
  • Открывайте длинную позицию (Покупайте) всякий раз, когда индикатор Heiken-Ashi показывает значение -1, в то время как предыдущее значение было 1. Мы должны быть осторожны, чтобы открывать позицию, используя истинную рыночную цену, а не ту, которая отображается на Heiken- График Аши.

def signal(Data, buy, sell):
    
    Data = adder(Data, 10)
    Data = rounding(Data, 5)
    
    for i in range(len(Data)):
            
        if Data[i, 5] == 1 and Data[i - 1, 5] == -1:
            Data[i, buy] = 1
            
        elif Data[i, 5] == -1 and Data[i - 1, 5] == 1:            
            Data[i, sell] = -1    
            
    return Data

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

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



Вывод

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

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

Я должен отметить несколько моментов в моих тестах на истории и статьях:

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

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