Strategie zur Kombination von DMI und HMA

Schriftsteller:ChaoZhang, Datum: 2024-01-04 17:23:06
Tags:

img

Übersicht

Diese Strategie kombiniert den Directional Movement Index (DMI) und den Hull Moving Average (HMA), um mit DMI die Marktrichtung zu ermitteln und ohne Risikomanagement die Trendstärke mit HMA zu bestätigen.

Strategie Logik

  1. Berechnen Sie den wahren Bereich, DIPlus, DIMinus und ADX.

  2. Berechnen Sie schnelle und langsame Hull Moving Averages (HMA).

  3. Auslöser für den langen Eingang, wenn DIPlus über DIMinus und schnelle HMA über langsame HMA kreuzt.

  4. Auslöser für einen kurzen Einstieg, wenn DIMinus unter DIPlus und schnelle HMA unter langsame HMA fällt.

  5. Verlegen Sie bei Eintrittssignalen Long/Short-Orders.

Analyse der Vorteile

Die doppelte Bestätigung durch den Trendindikator DMI und Hull MA sorgt für eine genaue Erfassung der Marktentwicklung und vermeidet Schlagsägen.

Risikoanalyse

Das Hauptrisiko liegt in der fehlenden Stop-Loss-Fähigkeit, bei der es nicht möglich ist, Verluste zu kontrollieren, wenn große Marktschwankungen auftreten.

Mögliche Lösungen umfassen das Hinzufügen von beweglichen Stop Loss, die Optimierung des Parametermixes usw.

Optimierungsrichtlinien

  1. Hinzufügen von ATR-Stop-Loss auf Basis der wahren Reichweite.

  2. Optimieren Sie Hull-Perioden, um die beste Mischung zu finden.

  3. Dynamische Schwelle für lange/kurze Signale.

  4. Hinzufügen eines Impulsfilters, um die Kontinuität des Trends zu gewährleisten.

Zusammenfassung

Die Kombination von DMI und HMA ist hervorragend in der Identifizierung von Trends mit Einfachheit und Effizienz.


/*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)

Mehr