Стратегия пересечения скользящих средних Халла


Дата создания: 2024-03-22 14:57:10 Последнее изменение: 2024-03-22 14:57:10
Копировать: 2 Количество просмотров: 1150
1
Подписаться
1617
Подписчики

Стратегия пересечения скользящих средних Халла

Обзор стратегии

Стратегия основана на перекрестных сигналах Hull Moving Average (HMA). Hull Moving Average - это технический индикатор, разработанный Аланом Халлом, предназначенный для уменьшения отставания от движущихся средних.

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

  1. Расчет Hull Moving Average (HMA)

HMA рассчитывается следующим образом:

  • Увеличенная скользящая средняя ((WMA) заранее рассчитанная цена, с периодом в половину длины входного параметра
  • Вычислите WMA для этой WMA с периодом length
  • Используйте формулу: HMA = 2 * WMA ((length/2) - WMA ((length)
  • Для вышеупомянутого результата WMA рассчитывается снова, с периодом в квадратный корень length, и получается окончательная HMA
  1. Создание торгового сигнала
  • Когда цена закрытия превышает HMA, появляется сигнал покупки.
  • Продажа происходит, когда HMA проходит под ценой закрытия.
  1. Выполнение сделки по сигналу сделки
  • Сигналы покупок: открытие позиции сверх начального уровня
  • Продажа: открытие позиции

Стратегические преимущества

  1. У Hull Moving Average меньше задержек по сравнению с простой и весовой Moving Averages, поэтому они могут быстрее реагировать на изменения цен, повышая чувствительность стратегии.

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

  3. Параметры регулируемы и могут быть адаптированы к различным рынкам и торговым видам путем корректировки циклических параметров HMA.

Стратегический риск

  1. Hull Moving Average является отсталым индикатором, который может подавать ошибочные сигналы на ранних этапах обратного тренда.

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

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

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

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

  2. Для оптимизации параметров можно использовать методы генетических алгоритмов, сетчатого поиска и т. Д. Для оптимизации параметров можно использовать методы генетических алгоритмов, сетчатого поиска и т. Д. Для оптимизации параметров можно использовать методы генетического алгоритма, сетчатого поиска и т. Д.

  3. Включение в стратегию механизмов стоп-лосса и стоп-стопа, контролирующих риски и доходы от одноразовой торговли.

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

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

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

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

//@version=4
//Basic Hull Ma Pack tinkered by InSilico 
strategy("RKTD BETA - Hull Suite by InSilico", overlay=true)

//INPUT
src = input(close, title="Source")
modeSwitch = input("Ehma", title="Hull Variation", options=["Hma", "Thma", "Ehma"])
length = input(200, title="Length(180-200 for floating S/R , 55 for swing entry)")
lengthMult = input(1.0, title="Length multiplier (Used to view higher timeframes with straight band)")

useHtf = input(false, title="Show Hull MA from X timeframe? (good for scalping)")
htf = input("240", title="Higher timeframe", type=input.resolution)

switchColor = input(true, "Color Hull according to trend?")
candleCol = input(false,title="Color candles based on Hull's Trend?")
visualSwitch  = input(true, title="Show as a Band?")
thicknesSwitch = input(1, title="Line Thickness")
transpSwitch = input(40, title="Band Transparency",step=5)

// Alert Messages
longAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "long", "orderType": "market", "close":true}'
shortAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "short", "orderType": "market", "close":true}'

//FUNCTIONS
//HMA
HMA(_src, _length) =>  wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>  ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length)))
//THMA    
THMA(_src, _length) =>  wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length)
    
//SWITCH
Mode(modeSwitch, src, len) =>
      modeSwitch == "Hma"  ? HMA(src, len) :
      modeSwitch == "Ehma" ? EHMA(src, len) : 
      modeSwitch == "Thma" ? THMA(src, len/2) : na

//OUT
_hull = Mode(modeSwitch, src, int(length * lengthMult))
HULL = useHtf ? security(syminfo.ticker, htf, _hull) : _hull
MHULL = HULL[0]
SHULL = HULL[2]

//COLOR
hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800

//PLOT
///< Frame
Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
alertcondition(crossover(MHULL, SHULL), title="Hull trending up.", message="Hull trending up.")
alertcondition(crossover(SHULL, MHULL), title="Hull trending down.", message="Hull trending down.")
///< Ending Filler
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)

// Define Buy and Sell Conditions based on crossovers
buyCondition = crossover(MHULL, SHULL)
sellCondition = crossunder(MHULL, SHULL)

// Plotting the Hull Moving Average (HMA)
plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch)
plot(SHULL, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=transpSwitch)
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)

// Execute Strategy based on Buy and Sell Conditions
strategy.entry("Buy", strategy.long, when=buyCondition, alert_message=longAlertMessage)
strategy.entry("Sell", strategy.short, when=sellCondition, alert_message=shortAlertMessage)

// Additional elements like bar coloring remain unchanged
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)