Diese Strategie basiert auf dem Kaufman Adaptive Moving Average (KAMA), um Handelspositionen dynamisch anzupassen und Markttrends automatisch zu verfolgen.
Durch die Anwendung dieser Funktionen versucht die Strategie, zusätzliche Gewinne aus Trends zu erzielen und gleichzeitig Risiken zu kontrollieren.
Die Strategie basiert auf dem Kaufman Adaptive Moving Average-Indikator. KAMA berechnet das Verhältnis von Kursdynamik zu Volatilität, um das Gewicht und die Glatzheit des gleitenden Durchschnitts dynamisch anzupassen, sodass es schneller auf Preisänderungen reagieren kann.
Wenn KAMA über die Abwärts-Stop-Loss-Linie überschreitet, deutet es auf eine Trendumkehr hin und löst ein Kaufsignal aus. Wenn KAMA unter die Aufwärts-Stop-Loss-Linie überschreitet, deutet es auf eine Trendumkehr hin und löst ein Verkaufssignal aus. Nach dem Eintritt in eine Position berechnet die Strategie eine dynamische Stop-Loss-Distanz basierend auf ATR und setzt eine günstige Stop-Loss-Linie. Wenn KAMA in eine günstige Richtung bewegt, passt sich die Stop-Loss-Linie entsprechend an und bewegt sich zu einer günstigeren Position, um mehr Gewinne zu erzielen.
Auf diese Weise kann die Strategie den Trend verfolgen, die Stop-Loss-Linie allmählich bewegen, bis sie ausgelöst wird oder ein Umkehrsignal zum Schließen der Position ausgelöst wird.
Im Vergleich zu traditionellen gleitenden Durchschnittsstrategien hat diese Strategie folgende Vorteile:
Im Allgemeinen ist die Strategie reaktionsschnell, kontrollierbar und ein typisches Trendverfolgungssystem.
Die Strategie birgt auch einige Risiken:
Um diese Risiken zu managen, können Methoden wie die Optimierung der Stop-Loss-Distanz und die Festlegung eines maximalen Stop-Loss-Prozentsatzes verwendet werden.
Möglichkeiten zur Optimierung der Strategie sind:
Zum Beispiel kann der MACD als Hilfsbestätigungsindikator hinzugefügt werden, wobei der MACD Dif positiv sein und sich neben dem KAMA
Durch die Verwendung eines dynamischen Stop Loss, um Trends zu verfolgen und Trendgewinne zu maximieren, gepaart mit der Anpassungsfähigkeit des KAMA-Indikators, um schnell auf schnelle Marktveränderungen zu reagieren, kann diese Strategie nach einer gewissen Optimierung zu einem effizienten Trend-Tracking-System werden, das für den mittelfristigen bis langfristigen Handel geeignet ist.
/*backtest start: 2024-01-26 00:00:00 end: 2024-02-25 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("THMA - Bharath Vc Improved", overlay=true, process_orders_on_close=true) // Function to calculate pips with higher precision getPips(price) => difc = syminfo.mintick hlpips = price / difc math.round(hlpips / syminfo.mintick) * syminfo.mintick // Inputs buyMess = input.string("Buy Message","Buy Alert Message") sellMess = input.string("Sell Message","Sell Alert Message") buyExitMessage = input.string("Buy Exit","Buy Exit Alert Message" ) sellExitMessage = input.string("Sell Exit","Sell Exit Alert Message" ) tmf = input.timeframe("", "Timeframe") length = input(title='Length', defval=14) fastLength = input(title='Fast EMA Length', defval=2) slowLength = input(title='Slow EMA Length', defval=30) src = input(title='Source', defval=close) highlight = input(title='Highlight ?', defval=true) awaitBarConfirmation = input(title='Await Bar Confirmation ?', defval=true) // Function to calculate the TMA gettma() => mom = math.abs(ta.change(src, length)) volatility = math.sum(math.abs(ta.change(src)), length) er = volatility != 0 ? mom / volatility : 0 fastAlpha = 2 / (fastLength + 1) slowAlpha = 2 / (slowLength + 1) alpha = math.pow(er * (fastAlpha - slowAlpha) + slowAlpha, 2) kama = 0.0 kama := alpha * src + (1 - alpha) * nz(kama[1], src) await = awaitBarConfirmation ? barstate.isconfirmed : true maColor = highlight ? kama > kama[1] and await ? color.green : color.red : color.new(color.purple, 0) thma = kama hma_dif = (thma - thma[2])/2 colour = hma_dif > 0 ? color.green : color.red isGreen = hma_dif > 0 [thma, isGreen, colour] // Dynamic pip size based on ATR to adapt better to smaller timeframes pips = ta.atr(14) * 0.1 // Main execution logic var float psl = na var int lastSignal = 0 var float lastPsl = na [thma, isGreen, colour] = request.security(syminfo.tickerid, tmf, gettma(), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off) plot(thma, title='KAMA', linewidth=2, color=colour) if ta.crossover(thma, psl) and strategy.position_size < 0 strategy.exit("Sell Exit", stop=thma, alert_message=sellExitMessage) if ta.crossunder(thma, psl) and strategy.position_size > 0 strategy.exit("Buy Exit", stop=thma, alert_message=buyExitMessage) if isGreen and strategy.position_size <= 0 if na(psl) psl := close + getPips(pips) strategy.entry("Buy", strategy.long, alert_message=buyMess) lastSignal := 1 if not isGreen and strategy.position_size >= 0 if na(psl) psl := close - getPips(pips) strategy.entry("Sell", strategy.short, alert_message=sellMess) lastSignal := -1 if (thma >= lastPsl or na(lastPsl)) and thma > psl psl := psl + getPips(pips) lastPsl := psl if (thma <= lastPsl or na(lastPsl)) and thma < psl psl := psl - getPips(pips) lastPsl := psl plot(psl, title="Position Stop Level", style=plot.style_stepline, color=color.blue) plot(lastPsl, title="Last Position Stop Level", style=plot.style_cross, color=color.red)