Diese Strategie verwendet Kaufman's Adaptive Moving Average (KAMA), um die Trendrichtung zu bestimmen, um mittelfristige bis langfristige Trends zu erfassen. Sie geht lang, wenn sich die KAMA-Linie nach oben bewegt und kurz, wenn sich die KAMA-Linie nach unten bewegt.
Der Kernindikator dieser Strategie ist Kaufmans Adaptive Moving Average (KAMA). KAMA passt seinen Gewichtungsfaktor dynamisch an die Größe der Marktvolatilität an, wodurch die Empfindlichkeit der Kurve verbessert wird. Insbesondere, wenn die Marktvolatilität steigt, wird die KAMA-Kurve glatter; wenn die Marktvolatilität abnimmt, wird die KAMA-Kurve empfindlicher. Dies filtert etwas Lärm aus und erfasst gleichzeitig neue Trendumkehrungen rechtzeitig.
Die Strategie berechnet zunächst den Wert der KAMA. Dann bestimmt sie den Long/Short-Zustand der KAMA-Linie: ein Kaufsignal wird generiert, wenn der Schlusskurs über die KAMA-Linie überschreitet, und ein Verkaufssignal wird generiert, wenn der Schlusskurs unter die KAMA-Linie überschreitet. Positionen werden auf der Grundlage dieser Handelssignale eröffnet.
Der größte Vorteil dieser Strategie ist die Verwendung des KAMA-Indikators zur Trendbestimmung. Der KAMA-Indikator selbst hat eine sehr starke Trendverfolgungsfähigkeit. Er kann die Parameter dynamisch anpassen, um sich an die Marktbedingungen anzupassen, wodurch zuverlässigere Handelssignale im Vergleich zu einfachen gleitenden Durchschnitten und exponentiellen gleitenden Durchschnitten erzeugt werden.
Darüber hinaus verwendet die Strategie nur den Long/Short-Zustand von KAMA, um die Trendrichtung zu bestimmen.Es gibt keine zusätzlichen Filter, was die Strategie-Logik vereinfacht und die Anzahl der Parameter reduziert, wodurch das Risiko einer Überanpassung verringert und die Stabilität und Anpassungsfähigkeit auf den Märkten verbessert wird.
Das Hauptrisiko dieser Strategie besteht darin, dass KAMA ein nachlassender Indikator ist, so dass sich der Markttrend bereits umgekehrt haben kann, wenn die Handelssignale generiert werden, was zu Stop-Loss-Risiken führt.
Um Risiken zu mindern, können andere Indikatoren kombiniert werden, um Handelssignale zu bestätigen, wie Volatilitätsindikatoren, Volumenindikatoren usw. Die Parameter können auch angepasst werden, um die KAMA-Kurve glatter zu gestalten.
Es gibt noch viel Raum für eine Optimierung dieser Strategie, vor allem in den folgenden Bereichen:
Kombination mit anderen Indikatoren zur Signalfilterung, wie MACD, Oszillatoren usw., zur Verbesserung der Signalqualität.
Fügen Sie Stop-Loss-Strategien wie bewegliche Stop-Loss- oder Equity-Kurve-basierte Stops hinzu, um Einzelhandelsverluste zu kontrollieren.
Optimierung der Parameter, um KAMA effektiver bei der Erkennung von Trends zu machen.
Hinzufügen von Multi-Timeframe-Analysen zur Bestimmung der wichtigsten Trendrichtung unter Verwendung höherer Zeitrahmen.
Verwenden Sie maschinelle Lernmethoden, um die Parameter automatisch zu optimieren, um sich an die verschiedenen Instrumente anzupassen.
Die allgemeine Logik dieser Strategie ist klar, indem der KAMA-Indikator zur Bestimmung der Trendrichtung verwendet wird. Es hat Vorteile wie starke Trendverfolgungsfähigkeit, einfache Logik und weniger Parameter. Aber es besteht auch das Risiko, dass es bei der Identifizierung von Trendumkehrungen zurückbleibt. Die Strategie kann in vielerlei Hinsicht verbessert werden, um sie effektiver und anpassungsfähiger zu machen.
/*backtest start: 2022-12-06 00:00:00 end: 2023-12-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=3 strategy(title = "Noro's KAMA Strategy", shorttitle="KAMA str", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") length = input(3, minval = 1) fast = input(2, minval = 1) slow = input(30, minval = 1) src = input(title = "Source", defval = close) type = input(defval = "Trend", options = ["Trend", "Crossing"], title = "Type") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //KAMA volatility = sum(abs(src-src[1]), length) change = abs(src[1]-src[length]) er = iff(volatility != 0, change/volatility, 0) fastSC = 2/(fast+1) slowSC = 2/(slow+1) sc = pow((er*(fastSC-slowSC))+slowSC, 2) bid = hl2 kama = 0.0 kama := nz(kama[1])+(sc*(bid-nz(kama[1]))) plot(kama, color = black, title = "KAMA", trackprice = false, style = line, linewidth = 3) //Signals up = false dn = false up := (type == "Crossing" and kama > kama[1]) or (type == "Trend" and close > kama) dn := (type == "Crossing" and kama < kama[1]) or (type == "Trend" and close < kama) //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up strategy.entry("L", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn strategy.entry("S", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))