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


Дата создания: 2023-09-19 16:40:00 Последнее изменение: 2023-09-19 16:40:00
Копировать: 1 Количество просмотров: 638
1
Подписаться
1617
Подписчики

Обзор

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

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

  1. Вычислите Hull Moving Average из двух групп: короткий и длительный периоды. Короткий период определяет направление конкретной сделки, а длительный период определяет направление общей тенденции.

  2. Когда короткий цикл Hull MA пересекается, то считается, что тренд перевернулся. В сочетании с большим направлением тренда фильтруют шум торгов.

  3. Повышение цены на прорыв Hull MA гарантирует успех прорыва.

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

  5. Установка условий для остановки и прекращения убытков, контроль риска.

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

По сравнению с обычной скользящей средней, эта стратегия имеет следующие преимущества:

  1. Hull MA реагирует на изменения цены быстрее, чтобы вовремя улавливать переломы тенденций.

  2. Двойная структура Hull MA позволяет оценивать тенденции в двух измерениях времени: большом и малом.

  3. Условия прорыва и изменения цены могут эффективно отфильтровывать ложные прорывы.

  4. Динамический стоп-стоп может блокировать прибыль и контролировать риск.

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

Также существуют следующие риски:

  1. Неправильно настроенные параметры могут пропустить поворот цены.

  2. Ошибки в оценке тенденций могут привести к обратной торговле.

  3. Превышение пределов Stop Loss может привести к большим убыткам.

  4. Слишком частое совершение сделок увеличивает расходы и риски проскальзывания.

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

Это может быть улучшено в следующих аспектах:

  1. Оптимизация цикла Hull MA, балансирующая чувствительность и гладкость.

  2. Оптимизируйте параметры Entry и Exit, чтобы найти оптимальные значения.

  3. Проверка жизнеспособности различных сортов, повышение адаптивности стратегии.

  4. Показатели объединенной мощности, чтобы избежать риска отклонения.

  5. Добавление условий, повышение устойчивости стратегии.

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

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

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

//@version=2
//SeaSide420
strategy("SS420FX", overlay=true, default_qty_type=strategy.percent_of_equity, max_bars_back=720, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0)
q=input(title="HullMA Short",defval=14)
z=input(title="HullMA Long",defval=14)
dt = input(defval=0.0010, title="Decision Threshold", type=float, step=0.0001)
SL = input(defval=-50000.00, title="Stop Loss in $", type=float, step=1)
TP = input(defval=100000.00, title="Target Point in $", type=float, step=1)
ot=1
n2ma=2*wma(close,round(q/2))
nma=wma(close,q)
diff=n2ma-nma
sqn=round(sqrt(q))
n2ma1=2*wma(close[1],round(q/2))
nma1=wma(close[1], q)
diff1=n2ma1-nma1
sqn1=round(sqrt(q))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
z2ma=2*wma(close[11],round(z/2))
zma=wma(close[11],z)
ziff=n2ma-nma
zqn=round(sqrt(z))
z2ma1=2*wma(close[12],round(z/2))
zma1=wma(close[12], z)
ziff1=n2ma1-nma1
zqn1=round(sqrt(z))
z1=wma(diff,sqn)
z2=wma(diff1,sqn)
z1e=z1>z2?green:black
z2e=z1>z2?black:red
z3e=z1>z2?green:red
n1e=plot(z1, title="HMA1", color=z1e, linewidth=2, offset=2)
n2e=plot(z2, title="HMA2", color=z2e, linewidth=2, offset=2)
fill(n1e, n2e, color=z3e, transp=80)
confidence=(security(syminfo.tickerid, 'D', close)-security(syminfo.tickerid, 'D', close[1]))/security(syminfo.tickerid, 'D', close[1])
closelong = n1<n2 and close<n2 and confidence<dt or strategy.openprofit<SL or strategy.openprofit>TP
if (closelong)
    strategy.close("Long")
closeshort = n1>n2 and close>n2 and confidence>dt or strategy.openprofit<SL or strategy.openprofit>TP
if (closeshort)
    strategy.close("Short")
longCondition = n1>n2 and z1>z2 and strategy.opentrades<ot and confidence>dt and close>n1
if (longCondition)
    strategy.entry("Long",strategy.long)
shortCondition = n1<n2 and z1<z2 and strategy.opentrades<ot and confidence<dt and close<n1 
if (shortCondition)
    strategy.entry("Short",strategy.short)