Стратегия следования за трендом, основанная на скользящей средней Халла и истинном диапазоне


Дата создания: 2024-01-15 15:26:08 Последнее изменение: 2024-01-15 15:26:08
Копировать: 0 Количество просмотров: 775
1
Подписаться
1617
Подписчики

Стратегия следования за трендом, основанная на скользящей средней Халла и истинном диапазоне

Обзор

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

Стратегический принцип

Эта стратегия основана на двух типах показателей: средняя линия Hull и ATR.

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

ATR, или Average True Range, то есть реальный диапазон. Он отражает величину ежедневных колебаний цен. Когда колебания увеличиваются, реальный диапазон повышается; когда колебания уменьшаются, реальный диапазон снижается.

В частности, логика стратегии заключается в следующем:

  1. Вычислить среднюю величину currentHullMA на текущий период (в настройках hullLength) и среднюю величину previousHullMA на предыдущий период
  2. Вычислить разницу между ними hullDiff = currentHullMA - previousHullMA
  3. При hullDiff > 0 - считается многоголовной; при hullDiff < 0 - считается безголовой
  4. При этом рассчитывается значение ATR за определенный период (настройка atLength), которое служит индикатором величины тренда
  5. Продолжайте, когда ATR больше, чем price, а price больше, чем цена перед периодом atrLength. Продолжайте, когда ATR меньше, чем price, а price меньше, чем цена перед периодом atrLength.
  6. Положительное отрицательное значение hullDiff для определения сигнала равновесия

Анализ преимуществ стратегии

У этой стратегии есть следующие преимущества:

  1. В сочетании с оценкой тенденций и показателями волатильности, можно выбрать вход в то время, когда ценовая тенденция очевидна и волатильность увеличивается, чтобы избежать попадания в рынок волатильности.
  2. Hull Average Line более чувствительна к изменениям цены и может быстро определять направление новых тенденций.
  3. ATR может отражать волатильность и теплоту рынка и служить основанием для выбора времени входа.
  4. Более много параметров, которые можно настроить, чтобы получить оптимальное сочетание параметров.

Анализ рисков

Однако есть и другие риски:

  1. Ни Hull Average Line, ни ATR не могут полностью избежать проблемы с ложными прорывами, и все же есть вероятность, что они могут быть застряли.
  2. Неправильная настройка параметров может привести к тому, что сделки будут слишком частыми или недостаточно чувствительными, что может повлиять на эффективность стратегии.
  3. Невозможность эффективно реагировать на экстремальные ситуации, такие как быстрое подъем, прорыв или обвал.

Решение проблемы:

  1. Например, в случае, если в тюрьме находится человек, который не может выйти из тюрьмы, он может быть задержан.
  2. Оптимизация параметров путем повторного тестирования, чтобы показатели лучше соответствовали различным рыночным условиям.
  3. В случае возникновения чрезвычайных ситуаций приостанавливать действие стратегии.

Направление оптимизации

Есть много возможностей для оптимизации этой стратегии, в основном из следующих аспектов:

  1. Тестирование различных среднелинейных циклических параметров Hull, чтобы найти наиболее подходящую циклическую настройку для текущих рыночных условий.
  2. Тестируйте различные комбинации ATR-циклических параметров, чтобы найти наиболее эффективные циклы для захвата тепла.
  3. Попробуйте различные типы ATR (RMA, SMA, EMA и т.д.) и посмотрите, какой из них работает лучше всего.
  4. Оптимизация условий открытия позиции, например, в сочетании с волатильными показателями Reaction и ATR.
  5. Оптимизация методов сдерживания убытков, надлежащая расслабленная степень сдерживания убытков, чтобы избежать зацепки.

Подвести итог

Эта стратегия объединяет способность отслеживать тенденции с помощью Hull Average Line и способность определять температурные показатели ATR, чтобы отфильтровать некоторые неэффективные сигналы, выбирая более высокие и позитивные моменты во время признания тенденции. Оптимизация параметров индикатора и использование средств управления рисками могут еще больше повысить эффективность стратегии.

Исходный код стратегии
/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//                                                Hull cross and ATR
strategy("Hull cross and ATR", shorttitle="H&ATR", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0)
keh=input(title="Hull Length",defval=50)
length = input(title="ATR Length", defval=50, minval=1)
smoothing = input(title="ATR Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
p=input(ohlc4,title="Price data")
n2ma=2*wma(p,round(keh/2))
nma=wma(p,keh)
diff=n2ma-nma
sqn=round(sqrt(keh))
n2ma1=2*wma(p[1],round(keh/2))
nma1=wma(p[1],keh)
diff1=n2ma1-nma1
sqn1=round(sqrt(keh))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
ma_function(source, length) => 
    if smoothing == "RMA"
        rma(p, length)
    else
        if smoothing == "SMA"
            sma(p, length)
        else
            if smoothing == "EMA"
                ema(p, length)
            else
                wma(p, length)
plot(ma_function(tr(true), length), title = "ATR", color=black, transp=50)
closelong = n1<n2
if (closelong)
    strategy.close("buy")
closeshort = n1>n2
if (closeshort)
    strategy.close("sell")
if (ma_function(tr(true), length)<p and p>p[length] and n1>n2)
    strategy.entry("buy", strategy.long, comment="BUY")
if (ma_function(tr(true), length)>p and p<p[length] and n1<n2)
    strategy.entry("sell", strategy.short, comment="SELL")