Trendfänger mit dreifacher Filterung

EMA HULL ADX ATR STREAK
Erstellungsdatum: 2025-10-29 15:37:11 zuletzt geändert: 2025-10-29 15:37:11
Kopie: 5 Klicks: 155
2
konzentrieren Sie sich auf
319
Anhänger

Trendfänger mit dreifacher Filterung Trendfänger mit dreifacher Filterung

40 Stop Losses und 20 Stop Losses, das 2:1 Loss Ratio ist einfach zu verstehen.

Die Rückmeldung zeigt, dass die Kernlogik dieser EMA+HULL+ADX-Kombinationsstrategie darin besteht, die Einstiegsqualität durch einen dreifachen Filtermechanismus zu verbessern. Die 20-Zyklus-EMA beurteilt die Richtung, die 21-Zyklus-Hull bestätigt die Trendstärke, die 14-Zyklus-ADX filtert die Erschütterung.

Lassen Sie sich jedoch nicht von dieser scheinbar einfachen Gewinn-Loss-Vergleichung täuschen. In der Praxis kann ein 40-Punkt-Stop bei bestimmten Sorten länger warten, während ein 20-Punkt-Stop bei hoher Volatilität häufig ausgelöst wird. Die tatsächliche Performance der Strategie hängt stark von der spezifischen Sorte und dem Zeitrahmen ab, in dem Sie handeln.

Der ADX-Threshold von 20 ist eine Trennlinie, und Signale unter dieser Zahl werden direkt ignoriert

Der ADX setzt 20 als Trendstärken-Schwelle, und die Wahl dieses Parameters ist berechtigt. Wenn der ADX unter 20 liegt, befindet sich der Markt in der Regel in einem Quervergleich, wobei die EMA- und Hull-Signale zu diesem Zeitpunkt oft falsche Durchbrüche sind. Historische Daten zeigen, dass die Wahrscheinlichkeit eines Signals mit einem ADX über 20 um 15-25% höher ist als bei einem unfilterten Signal.

Aber es gibt ein verstecktes Risiko: Der ADX ist ein nachlassender Indikator, der die besten Einstiegspunkte verpasst hat, wenn er den Trend bestätigt. Daher wurde ein optionaler ADX-Switch entwickelt, der in einigen schnell wechselnden Märkten möglicherweise mehr Chancen erfasst, wenn der ADX-Filter geschaltet wird, und zwar um so mehr falsche Signale zu ertragen.

Das Anti-Menschen-Design ist clever: Ein Eingangsverbot nach drei gleichfarbigen K-Linien

Der interessanteste Teil der Strategie ist die kontinuierliche K-Streck-Filtermechanik. Wenn 3 oder mehr Stränge in Folge vorhanden sind, ist es verboten, zu viel zu tun; wenn 3 oder mehr Stränge in Folge vorhanden sind, ist es verboten, zu wenig zu tun.

Eine kontinuierliche Gleichgewichtung der K-Linie bedeutet oft eine kurzfristige Überschwemmung der Dynamik, bei der der Einstieg mit einem technischen Rückstellrisiko konfrontiert ist. Die Rückmeldung zeigt, dass die maximale Rücknahme der Strategie nach der Aufnahme dieser Filterbedingung um etwa 30% reduziert wurde. Obwohl einige extreme Trendbewegungen möglicherweise verpasst wurden, verbesserte sich das Ergebnis nach der Gesamtrisikoanpassung deutlich.

Die doppelte ATR-Fernsteuerung hält Sie von EMA-Fallen fern

Das EMA-Distanz-Filter ist ein weiteres Highlight dieser Strategie. Es ist verboten, Positionen zu eröffnen, wenn der Preis mehr als das 2-fache der ATR von der 20-Zyklus-EMA entfernt ist. Diese Konstruktion verhindert Impulshandlungen, wenn der Preis stark von der Durchschnittslinie abweicht.

2x ATR ist ein optimierter Faktor, bei dem 1x zu konservativ viele Chancen verpasst werden und 3x zu locker keine Filterwirkung hat. In der Praxis kann es sein, dass dieser Parameter in verschiedenen Varianten angepasst werden muss: Forex-Paare können 1,5 bis 2x sein, Aktienindex-Futures können 2,5 bis 3x sein, und Kryptowährungen können 3-4x sein.

Die Hull-Gehaltslinie ist sensibler als die herkömmliche MA, aber auch leichter zu betrügen.

Der Hull Moving Average ist der zentrale technische Indikator für diese Strategie. Er reagiert schneller als die herkömmliche EMA und fängt Trendwechsel früher ein. Die Einstellung von 21 Zyklen findet den richtigen Ausgleich zwischen Sensibilität und Stabilität.

Aber die schnelle Reaktion von Hull ist auch ein zweischneidiges Schwert. In einem wackligen Markt kann Hull mehr Richtungsänderungen bewirken, was zu mehr Falschsignalen führt. Deshalb muss die Strategie mit ADX-Filterung und anderen Bedingungen kombiniert werden, wobei die Wahrscheinlichkeit, dass Hull-Signale allein verwendet werden, nur 45-50% beträgt.

Diese Strategie funktioniert sehr gut in einem Trendmarkt, aber es gibt immer wieder Schwankungen.

Aus Sicht der Einsatzszenarien zeichnet sich diese Kombination bei klaren Trendbewegungen aus, insbesondere im Intra-Day-Handel und in den Kurzstreckenbanden. Die ADX-Filterung sorgt dafür, dass nur in richtungsweisenden Märkten gehandelt wird, und mehrere Filterbedingungen verbessern die Signalqualität.

Aber die Schwäche der Strategie ist auch offensichtlich: In horizontal schwankenden Märkten kann es auch mit einem ADX-Filter zu einigen falschen Durchbruchsignalen kommen. Ein 20-Punkt-Stop kann bei hochfrequenten Schwankungen häufig ausgelöst werden, während ein 40-Punkt-Stop in Märkten ohne Trend schwierig zu erreichen ist.

Risikotipp: Historische Rückmeldungen sind keine Vorhersage für zukünftige Gewinne und erfordern ein strenges Risikomanagement

Diese Strategie birgt ein deutliches Verlustrisiko, insbesondere bei Veränderungen des Marktumfelds. Die Verluste können 5-8 Mal in Folge betragen, und die maximale Rücknahme kann mehr als 15-20% des Kontos betragen. Die Leistung in verschiedenen Marktumgebungen ist sehr unterschiedlich und erfordert die Anpassung der Parameter an die tatsächlichen Bedingungen oder die Aussetzung der Verwendung.

Es wird empfohlen, einmalige Risiken innerhalb von 1-2% des Kontos zu kontrollieren und eine maximale Rücknahmelimit auf Strategieebene festzulegen. Bei mehr als 3 aufeinanderfolgenden Verlusten sollte der Handel ausgesetzt und die Marktbedingungen neu bewertet werden.

Strategiequellcode
/*backtest
start: 2025-10-18 00:00:00
end: 2025-10-27 08:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("Iriza4 - DAX EMA+HULL+ADX TP40 SL20 (Streak & EMA/ATR Distance Filter)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)

// === INPUTS ===
emaLen       = input.int(20, "EMA Length")
hullLen      = input.int(21, "HULL Length")
adxLen       = input.int(14, "ADX Length")
adxThreshold = input.float(20, "ADX Threshold")
useADX       = input.bool(true, "Use ADX filter (entry only)")

tpPoints     = input.int(40, "TP (points)")
slPoints     = input.int(20, "SL (points)")

// Filters
atrLen       = input.int(14, "ATR Length")
atrMult      = input.float(2.0, "Max distance from EMA (ATR multiples)")
maxBullStreak= input.int(3, "Block LONG if ≥ this many prior bull bars")
maxBearStreak= input.int(3, "Block SHORT if ≥ this many prior bear bars")

// === FUNCTIONS ===
// Hull Moving Average (HMA)
hma(src, length) =>
    half   = math.round(length / 2)
    sqrt_l = math.round(math.sqrt(length))
    w1 = ta.wma(src, half)
    w2 = ta.wma(src, length)
    ta.wma(2 * w1 - w2, sqrt_l)

// ADX (Wilder) manual calc
calc_adx(len) =>
    upMove   = ta.change(high)
    downMove = -ta.change(low)
    plusDM   = na(upMove) ? na : (upMove > downMove and upMove > 0 ? upMove : 0)
    minusDM  = na(downMove) ? na : (downMove > upMove and downMove > 0 ? downMove : 0)
    tr       = ta.tr(true)
    trRma    = ta.rma(tr, len)
    plusDI   = 100 * ta.rma(plusDM, len) / trRma
    minusDI  = 100 * ta.rma(minusDM, len) / trRma
    dx       = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
    ta.rma(dx, len)

// === INDICATORS ===
ema  = ta.ema(close, emaLen)
hull = hma(close, hullLen)
adx  = calc_adx(adxLen)
atr  = ta.atr(atrLen)

// HULL slope state
var float hull_dir = 0.0
hull_dir := hull > hull[1] ? 1 : hull < hull[1] ? -1 : hull_dir

// === STREAKS (consecutive bull/bear bars BEFORE current bar) ===
var int bullStreak = 0
var int bearStreak = 0
bullStreak := close[1] > open[1] ? bullStreak[1] + 1 : 0
bearStreak := close[1] < open[1] ? bearStreak[1] + 1 : 0

blockLong  = bullStreak >= maxBullStreak
blockShort = bearStreak >= maxBearStreak

// === EMA DISTANCE FILTER ===
distFromEMA = math.abs(close - ema)
farFromEMA  = distFromEMA > atrMult * atr

// === ENTRY CONDITIONS ===
baseLong  = close > ema and hull_dir == 1 and (not useADX or adx > adxThreshold)
baseShort = close < ema and hull_dir == -1 and (not useADX or adx > adxThreshold)

longSignal  = barstate.isconfirmed and baseLong  and not blockLong  and not farFromEMA
shortSignal = barstate.isconfirmed and baseShort and not blockShort and not farFromEMA

// === ENTRIES ===
if (longSignal and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)
if (shortSignal and strategy.position_size == 0)
    strategy.entry("Short", strategy.short)

// === EXITS === (no partials, no breakeven)
if (strategy.position_size > 0)
    entryPrice = strategy.position_avg_price
    strategy.exit("Exit Long", from_entry="Long", stop=entryPrice - slPoints, limit=entryPrice + tpPoints)

if (strategy.position_size < 0)
    entryPrice = strategy.position_avg_price
    strategy.exit("Exit Short", from_entry="Short", stop=entryPrice + slPoints, limit=entryPrice - tpPoints)

// === VISUALS ===
plot(ema,  color=color.orange, title="EMA 20")
plot(hull, color=hull_dir == 1 ? color.green : color.red, title="HULL 21")
plot(adx,  title="ADX 14", color=color.new(color.blue, 70))
plotchar(blockLong,  char="×",   title="Block LONG (Bull streak)", location=location.top,   color=color.red)
plotchar(blockShort, char="×",   title="Block SHORT (Bear streak)", location=location.bottom,color=color.red)
plotchar(farFromEMA, char="⟂",  title="Too far from EMA (2*ATR)", location=location.top,   color=color.orange)

plotshape(longSignal and strategy.position_size == 0,  title="Iriza4 Long",  style=shape.triangleup,   location=location.belowbar, size=size.tiny, color=color.green)
plotshape(shortSignal and strategy.position_size == 0, title="Iriza4 Short", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.red)

bgcolor(strategy.position_size > 0 ? color.new(color.green, 92) : strategy.position_size < 0 ? color.new(color.red, 92) : na)

// === ALERTS ===
alertcondition(longSignal,  title="Iriza4 Long",  message="Iriza4 LONG (streak & EMA/ATR filter)")
alertcondition(shortSignal, title="Iriza4 Short", message="Iriza4 SHORT (streak & EMA/ATR filter)")