Kanfman Adaptive Moving Average Trend Following Strategie


Erstellungsdatum: 2023-12-13 17:25:33 zuletzt geändert: 2023-12-13 17:25:33
Kopie: 0 Klicks: 732
1
konzentrieren Sie sich auf
1212
Anhänger

Kanfman Adaptive Moving Average Trend Following Strategie

Überblick

Die Strategie nutzt die Kanfman Adaptive Moving Average (KAMA) zur Bestimmung der Trendrichtung, um die mittleren und langen Trends zu erfassen. Die Strategie kombiniert die Trend-Tracking-Funktion des Moving Averages und die dynamische Anpassungsfunktion des Kanfman Adaptive Averages, um die Qualität des Handelssignals zu verbessern.

Strategieprinzip

Der Kern der Strategie ist die Kampffmann Adaptive Moving Average (KAMA). Die KAMA passt ihre Gewichtsfaktoren dynamisch an die Größe der Marktschwankungen an und erhöht so die Kurvenempfindlichkeit. Konkret wird die Kurve der KAMA bei größeren Marktschwankungen glatter; bei geringeren Marktschwankungen wird die Kurve der KAMA empfindlicher.

Die Strategie berechnet zuerst den Wert des KAMA. Dann wird der Überschuss der KAMA-Linie beurteilt: Ein Kaufsignal wird erzeugt, wenn der Schlusskurs die KAMA-Linie überschreitet. Ein Verkaufssignal wird erzeugt, wenn der Schlusskurs die KAMA-Linie unterschreitet.

Analyse der Stärken

Der größte Vorteil dieser Strategie besteht darin, dass der KAMA-Indikator für Trendbeurteilungen verwendet wird. Der KAMA-Indikator selbst hat eine starke Trendverfolgungskraft und kann die Parameter dynamisch an die Marktbedingungen anpassen, wodurch ein zuverlässigeres Handelssignal erzeugt wird. Der KAMA-Indikator kann Trends besser erkennen und falsche Signale reduzieren, als der einfache Moving Average und der Index Moving Average.

Darüber hinaus nutzt die Strategie nur den Leerstand von KAMA, um die Richtung des Trends zu bestimmen. Es werden keine zusätzlichen Filterbedingungen gesetzt, was die Strategie-Logik vereinfacht, aber auch weniger Parameter macht und das Risiko einer Überoptimierung verringert, was der Parameterstabilität und der Marktübergreifenden Anpassungsfähigkeit dient.

Risikoanalyse

Das Hauptrisiko dieser Strategie besteht darin, dass die KAMA selbst als Verzögerungsindikator verwendet wird. Der Markttrend kann sich bereits umgekehrt haben, wenn ein Handelssignal erzeugt wird. Dies führt zu Stop-Loss-Risiken.

Um das Risiko zu verringern, kann man in Kombination mit anderen Indikatoren, um Handelssignale zu bestätigen, wie z.B. Volatilitätsindikatoren, Transaktionsmengenindikatoren usw. Überlegen. Die Parameter können auch entsprechend angepasst werden, Identification macht die KAMA-Kurve glatter.

Optimierungsrichtung

Es gibt noch viel Raum für Optimierungen in dieser Strategie, und zwar hauptsächlich in folgenden Bereichen:

  1. Signalfilterung in Kombination mit anderen Indikatoren, wie MACD, Schwingungsindikatoren usw., um die Signalqualität zu verbessern

  2. Erhöhung der Stop-Loss-Strategie, die Ein-Loss-Kontrolle mit einem Moving Stop oder einem Balance-Curve Stop

  3. Optimierung der Parameter, damit KAMA Trends effektiver erfassen kann

  4. Mehrzeit-Analysen, um die Richtung der großen Trends zu bestimmen

  5. Automatische Optimierung der Parameter mit Hilfe von maschinellen Lernmethoden, um die Parameter an die verschiedenen Sorten anzupassen

Zusammenfassen

Die Strategie hat die Vorteile einer klaren Gesamtkonzeption, einer starken Trendverfolgung, einer einfachen Logik und weniger Parameter. Die Strategie kann jedoch in vielerlei Hinsicht optimiert werden, um ihre Wirksamkeit zu verbessern und ihre Anpassungsfähigkeit zu erhöhen.

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