
Основная идея этой стратегии заключается в том, чтобы идентифицировать направление тенденции рынка в сочетании с средней линией Hull и истинной волной (ATR) и вступать после подтверждения направления тенденции. В частности, вычислить разницу между средней линией Hull за определенный период и средней линией Hull за предыдущий период.
Эта стратегия основана на двух типах показателей: средняя линия Hull и ATR.
Hull Average - это индикатор трендового типа, разработанный американским фьючерсным трейдером Аланом Халлом. Hull Average похож на движущуюся среднюю, но имеет более высокую чувствительность и позволяет быстрее улавливать тенденции изменения цен. В стратегии установлен регулируемый параметр hullLength для управления длиной цикла Hull Average, чтобы определить направление текущего ценового тренда, рассчитывая разницу между текущим циклом и средним значением Hull за предыдущий период.
ATR, или Average True Range, то есть реальный диапазон. Он отражает величину ежедневных колебаний цен. Когда колебания увеличиваются, реальный диапазон повышается; когда колебания уменьшаются, реальный диапазон снижается.
В частности, логика стратегии заключается в следующем:
У этой стратегии есть следующие преимущества:
Однако есть и другие риски:
Решение проблемы:
Есть много возможностей для оптимизации этой стратегии, в основном из следующих аспектов:
Эта стратегия объединяет способность отслеживать тенденции с помощью 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")