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


Дата создания: 2024-01-04 17:23:06 Последнее изменение: 2024-01-04 17:23:06
Копировать: 0 Количество просмотров: 688
1
Подписаться
1621
Подписчики

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

Обзор

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

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

  1. Вычислить истинную диапазону (True Range), многоголовый индикатор движения (DIPlus), безголовый индикатор движения (DIMinus) и средний индекс направления (ADX).

  2. Вычислите средние значения быстрого (fasthull) и медленного (slowhull) корпусов.

  3. Триггер выполняет несколько условий: DIMinus на DIPlus и slowhull на fasthull.

  4. Вызвать вакуумные условия: DIMinus через DIPlus и fasthull через slowhull。

  5. После выполнения условий выполнения большего количества пустоты посылаются сигналы выполнения большего количества и пустоты соответственно.

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

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

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

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

Риск может быть уменьшен путем добавления мобильного стоп-пакета, оптимизации комбинации параметров и др.

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

  1. Присоедините ATR-стоп, чтобы использовать трейлинг-стоп на реальном диапазоне.

  2. Оптимизируйте параметры цикла Hull, чтобы найти оптимальную комбинацию.

  3. Динамическая настройка параметров порога для дополнительного освобождения.

  4. Добавление фильтров, таких как показатели энергоемкости, гарантирует сохранение тенденции.

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

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

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Tuned_Official
//@version=4
strategy(title="DMI + HMA - No Risk Management", overlay = false, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.025)

//Inputs
hullLen1 = input(title="Hull 1 length", type=input.integer, defval=29)
hullLen2 = input(title="Hull 2 length", type=input.integer, defval=2)
len = input(title="Length for DI", type=input.integer, defval=76)

//Calculations
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0

SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

//Indicators
fasthull = hma(close, hullLen1)
slowhull = hma(close, hullLen2)
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)

//Plots
plot(DIPlus, color=color.green, title="DI+")
plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")

//conditions
go_long = crossover(DIPlus, DIMinus) and fasthull > slowhull //crossover(fasthull, slowhull) and DIPlus > DIMinus
go_short = crossover(DIMinus, DIPlus) and fasthull < slowhull //crossunder(fasthull, slowhull) and DIMinus > DIPlus

//Entry
if strategy.position_size < 0 or strategy.position_size == 0
    strategy.order("long", strategy.long, when=go_long)

if strategy.position_size > 0 or strategy.position_size == 0
    strategy.order("Short", strategy.short, when=go_short)