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


Дата создания: 2023-09-16 18:41:33 Последнее изменение: 2023-09-16 18:41:33
Копировать: 0 Количество просмотров: 696
1
Подписаться
1617
Подписчики

Обзор

Hull Moving Average Trend Following - это количественная торговая стратегия, которая использует Hull Moving Average для определения направления рыночной тенденции и посылает сигналы о покупке и продаже. Эта стратегия способна улавливать средне- и длиннолинейные тенденции, создавать позиции в начале тренда и закрывать позиции до того, как тренд перевернется.

Принципы

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

Обычная скользящая средняя используется для определения направления непосредственной тенденции. Когда короткий цикл ЭМА проходит через длинный цикл ЭМА, она становится позитивной, а когда короткий цикл ЭМА проходит через длинный цикл ЭМА, она становится нисходящей.

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

Преимущества

  • Hull Moving Average более чувствителен к ценовым изменениям, что позволяет ранне улавливать сдвиги в тренде.

  • В сочетании с Hull MA и EMA, можно отфильтровать ложные сигналы.

  • Используйте канал K для оценки колебаний, чтобы избежать частых сделок во время сверки.

  • Использование метода отслеживания тенденций позволяет постоянно отслеживать средне- и долгосрочные тенденции.

Риск

  • Условия для задержки движущихся средних могут быть недостаточными для достижения наилучших точек входа в обратный тренд.

  • Недостаточное определение динамики шока, возможно, ошибочная сделка при счете.

  • Обычно это связано с небольшим количеством сделок, которые подвержены однократным потерям.

  • Нельзя эффективно использовать короткие линии для получения прибыли.

Что делать?

  • Оптимизировать циклические параметры для скользящих средних, стремясь к своевременному реагированию на тенденции.

  • Вспомогательное использование других показателей для оценки колебаний, таких как RSI, BBANDS и т. д.

  • Применение активного управления капиталом, контроль пропорций убытков.

  • Это может быть дополнено другими стратегиями, чтобы поймать короткую прибыль.

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

Hull Moving Average Trend Tracking Strategy использует комбинацию Hull MA и EMA, чтобы эффективно отслеживать средне-длинные тренды. Продолжайте накапливать прибыль в прибыльных тенденциях и останавливайтесь как можно раньше, прежде чем тенденция перевернется. Это простая и практичная количественная торговая стратегия, которая рекомендуется.

Исходный код стратегии
/*backtest
start: 2023-08-16 00:00:00
end: 2023-09-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

// strategy(title='HULLMiguel 2019/ Strategy v3', shorttitle='HULLMiguel_2019_Strategy', overlay=true, pyramiding=0, default_qty_value=1000, initial_capital=1000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=blue, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=15) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=3, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? green: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=2, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(16, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(10, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=5, title="Hull MA")
dif_close_hull= (close-hullma(hma_src, hma_base_length+hma_length_scalar*6))/close
Percent_dif = (dif_close_hull/(hullma(hma_src, hma_base_length+hma_length_scalar*6)))
//direction3 = Percent_dif>0 ? +1 : Percent_dif<0 ? -1 : 0
//plot_color3 = direction3 > 0  ? lime: direction3 < 0 ? red : na
//plot(dif_close_hull, title="dif close hull", style=line, linewidth=6, color = plot_color3)

//============ signal Generator ==================================//
Piriod=input('720')
ch1 = security(syminfo.tickerid, Piriod, open)
ch2 = security(syminfo.tickerid, Piriod, close)
plot(ch1, title="EMA Signal 2", style=line, linewidth=1, color = blue)
//longCondition = crossover(security(tickerid, Piriod, close),security(tickerid, Piriod, open))
//plot((close-ema02)/ema02+close)
longCondition = direction > 0 and direction2> 0

if (longCondition)
    strategy.entry("BUY", strategy.long)
//shortCondition = crossunder(security(tickerid, Piriod, close),security(tickerid, Piriod, open))
shortCondition = direction < 0 and direction2 < 0

if (shortCondition)
    strategy.entry("SELL", strategy.short)

///////////////////////////////////////////////////////////////////////////////////////////