Эта стратегия основана на индикаторе Hull Moving Average для построения тренда после торговой системы.
Эта стратегия использует скользящий средний показатель Халла в качестве основного технического показателя.
В частности, Движущаяся средняя Хулла содержит два средних - один является движущейся средней MA ((n) периода n, другой - движущейся средней MA ((n/2) периода n/2. Разница между двумя движущимися средними формирует кривую разницы Хулла.
Когда кривая Хулла наклоняется вверх, скорейшая скользящая средняя пересекается над длинным периодом, давая длинный сигнал.
Эта стратегия устанавливает период n кривой Хулла на 16. Она вычисляет 8-периодный MA (n/2=8), 16-периодный MA и разницу между ними, чтобы получить кривую Хулла. Затем она берет 4-периодный MA (квадратный корень n=4) самой кривой Хулла. Когда кривая Хулла пересекается вверх, она идет длинной. Когда кривая Хулла пересекается вниз, она идет короткой.
По сравнению с обычными скользящими средними, скользящий средний Hull имеет следующие преимущества:
Используя функцию квадратного корня, кривая Хулла приближает ценовое движение и быстрее улавливает обратные тенденции.
Снижает количество ложных перекрестков. Традиционные МА, как правило, генерируют больше ложных перекрестков. Кривая корпуса может фильтровать шум и избегать ненужных сделок.
В системе с двойным МА необходимо оптимизировать два параметра.
Значение n кривой корпуса может быть скорректировано для разных рынков и адаптировано к различным инструментам.
Систематическая система корпуса надежна и избегает ручного отбора, придерживаясь последовательности механических торговых систем.
Несмотря на свои преимущества по сравнению с системами скользящих средних, система Hull по-прежнему несет в себе следующие риски:
Как стратегия преследования тренда, системы корпуса склонны к остановке во время резких изменений тренда.
Быстрая реакция кривых Халла может увеличить частоту торгов и привести к переоценке.
Наличие только одного параметра n может привести к рискам настройки кривой от чрезмерной оптимизации.
Система Hull работает менее эффективно для инструментов с высокой волатильностью.
Исходя из вышеперечисленных ограничений, стратегия скользящей средней Hull может быть улучшена в следующих аспектах:
Добавьте фильтры с дополнительными индикаторами, чтобы избежать ложных перекрестков.
Добавьте стратегии стоп-лосса для контроля потери на одной сделке, например, с остановками на ходу или остановками на прибыль.
Оптимизировать выбор параметров n для предотвращения чрезмерной оптимизации.
Используйте модели машинного обучения, такие как RNN, для динамической оптимизации значений параметров.
Оптимизировать параметры отдельно для различных инструментов с помощью установки машинного обучения.
Оптимизируйте размещение позиций для снижения частоты торговли.
Hull Moving Average - это типичная стратегия, следующая за трендом. Несмотря на свои преимущества по сравнению с MAs, он все еще сталкивается с такими проблемами, как переоптимизация и переоценка. Мы можем улучшить стратегию посредством оптимизации параметров, остановки потерь, размещения позиций и т. Д. Система Hull проста и практична. Она заслуживает дальнейших исследований и улучшения путем включения большего количества индикаторов и методов для создания надежной торговой системы.
/*backtest start: 2023-10-25 00:00:00 end: 2023-11-01 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Noro's HullMA Strategy", shorttitle = "HullMA str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") n = input(title = "HullMA period", defval=16) fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //HullMA n2ma=2*wma(close,round(n/2)) nma=wma(close,n) diff=n2ma-nma sqn=round(sqrt(n)) n2ma1=2*wma(close[1],round(n/2)) nma1=wma(close[1],n) diff1=n2ma1-nma1 sqn1=round(sqrt(n)) n1=wma(diff,sqn) n2=wma(diff1,sqn) c=n1>n2?green:red ma=plot(n1,color=c) //Trading lot = 0.0 lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1] if n1 > n2 strategy.entry("Long", strategy.long, needlong == false ? 0 : lot) if n1 < n2 strategy.entry("Short", strategy.short, needshort == false ? 0 : lot) if true strategy.close_all()