Kalman-Filter-basierte Trendverfolgungsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-25 14:12:26
Tags:

img

Übersicht

Der Kern dieser Strategie besteht darin, die Kalman-Filtertechnologie zu verwenden, um den gleitenden Durchschnitt des Preises zu glätten, und Handelssignale zu erzeugen, wenn der Tangenzwinkel des glatten gleitenden Durchschnitts innerhalb eines bestimmten Zeitraums einen bestimmten Schwellenwert überschreitet.

Strategieprinzip

Die Kernlogik dieser Strategie umfasst hauptsächlich folgende Schritte:

  1. Der Tangenzwinkel des glätteten gleitenden Durchschnitts wird berechnet.

  2. Definition der Parameterperiode und statistische Summierung der Tangenzwinkel innerhalb der Periode;

  3. Erzeugen Sie ein Kaufsignal, wenn die Summe der Tangenzwinkel innerhalb der Periode größer als 360° ist; Erzeugen Sie ein Verkaufssignal, wenn es kleiner als -360° ist.

Der Kalman-Filter ist ein rekursiver Algorithmus, der den Wert von Prozesslärm und Messlärm bei der Vorhersage des aktuellen Zustands vorhersagt und diese Geräuschwerte verwendet, um die Vorhersage des aktuellen Zustands zu korrigieren, um eine genauere und zuverlässigere Zustandsschätzung zu erhalten.

Analyse der Vorteile

Im Vergleich zu einfachen gleitenden Durchschnitten und anderen technischen Indikatorstrategien besteht der größte Vorteil dieser Strategie darin, dass sie Kalman-Filter verwendet, um die Auswirkungen von Lärm zu reduzieren und die Handelssignale klarer und zuverlässiger zu machen.

  1. Kalman-Filterung filtert effektiv viele falsche Signale aus, die durch zufällige Schwankungen verursacht werden, indem sie adaptiv Geräusche schätzt und eliminiert, wodurch die erzeugten Handelssignale zuverlässiger werden.

  2. Besserer Tracking-Effekt: Die glatte gleitende Durchschnittsform ist glatter und spiegelt die mittelfristige und langfristige Preisentwicklung besser wider, wodurch ein besserer Trend-Tracking-Effekt erzielt wird.

  3. Zu den anpassbaren Parametern gehören die Länge des gleitenden Durchschnitts, die Parameter des Kalman-Filters und der statistische Zyklus, die sich flexibel an verschiedene Marktumgebungen anpassen können.

  4. Einfach zu implementieren und zu erweitern. Der Kernalgorithmus dieser Strategie ist ziemlich prägnant und einfach zu implementieren und zu testen. Es bietet auch Raum für Erweiterungen, wie die Einführung von Machine Learning-Algorithmen zur automatischen Optimierung von Parametern.

Risikoanalyse

Zu den wichtigsten Risiken dieser Strategie gehören außerdem:

  1. Trendumkehrrisiko. Diese Strategie konzentriert sich auf die Trendverfolgung. Im Falle einer starken Trendumkehr führt dies zu größeren Verlusten. Dies kann durch angemessene Verkürzung des statistischen Zyklus gemildert werden, um den Verlust pro Handel zu reduzieren.

  2. Parameteroptimierungsrisiko. Unangemessene Parameter-Einstellungen können zu häufigen Handels- oder Signalverzögerungen führen. Es erfordert ausreichende Tests und Optimierungen. Es kann mit Machine-Learning-Algorithmen für die automatische Optimierung kombiniert werden.

  3. Über-Optimierung Risiko. Übermäßige Optimierung auf historischen Daten kann auch zu ineffektiven Parametern führen. Out-of-Sample-Validität muss kontrolliert werden.

  4. Erhöhte Komplexität Risiko. Die Einführung von Kalman-Filter und Tangenzwinkel-Algorithmen erhöht die Komplexität des Codes. Eine korrekte Implementierung muss sichergestellt werden.

Optimierungsrichtlinien

Unter Berücksichtigung der vorstehenden Risiken umfassen die Optimierungsschwerpunkte dieser Strategie:

  1. Einführung von Stop Loss und Positionsgrößen: Durch einen geeigneten Stop Loss kann das Risiko eines einzelnen Handelsverlusts wirksam kontrolliert werden; dynamische Positionsgrößen können auch Positionen anpassen, um Risiken entsprechend den Marktbedingungen abzusichern.

  2. Automatische Optimierung von Parametern. Algorithmen zur Optimierung von Maschinellen Lernen können automatische Optimierung von Parametern erreichen, um Risiken einer Überoptimierung zu vermeiden.

  3. Integration anderer Indikatoren Einige andere Indikatoren können in die Strategie integriert werden, um Indikatorenkombinationen zu bilden, um die Stabilität der Strategie zu verbessern.

  4. Erhöhung der Effizienzbewertung: Einführung von mehr risikobereinigten Kennzahlen zur Bewertung der Effizienz und Stabilität von Strategien für eine umfassendere und genauere Schlussfolgerung.

  5. Erweitern Sie sich auf mehr Produkte. Wenn wirksam, kann es in Betracht gezogen werden, sich auf mehr Produkte auszuweiten. Mittelfristig und langfristig sammelt es reichere Proben und erleichtert die Optimierung von Produktparametern.

Schlussfolgerung


/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@library=math
strategy("策略360°(测试)", overlay=true)

// 定义1分钟均线
ma1 = request.security(syminfo.tickerid, "1", ta.sma(close, 1)) // 在这里使用了 math.sma() 函数
//plot(ma1, color=color.yellow, title="原始均线")

// 定义卡尔曼滤波函数,参考了[1](https://www.tradingview.com/pine-script-docs/en/v5/language/Methods.html)和[2](https://www.tradingview.com/pine-script-docs/en/v5/language/Operators.html)的代码
kalman(x, g) => 
    kf = 0.0 
    dk = x - nz(kf[1], x) // 在这里使用了 nz() 函数
    smooth = nz(kf[1], x) + dk * math.sqrt(g * 2) // 在这里使用了 math.sqrt() 函数
    velo = 0.0 
    velo := nz(velo[1], 0) + g * dk // 在这里使用了 nz() 函数
    kf := smooth + velo 
    kf 

// 定义卡尔曼滤波后的均线
ma2 = kalman(ma1, 0.01) 
plot(ma2, color=color.blue, title="卡尔曼滤波后的均线")

// 定义切线角
angle = math.todegrees(math.atan(ma2 - ma2[1])) // 在这里使用了 math.degrees() 和 math.atan() 函数

// 定义累加的切线角
cum_angle = 0.0
cum_angle := nz(cum_angle[1], 0) + angle // 在这里使用了 nz() 函数

// 定义30分钟周期
period = 30 // 您可以根据您的需要修改这个参数

// 定义周期内的切线角总和
sum_angle = 0.0
sum_angle := math.sum(angle, period) // 在这里使用了 math.sum() 函数,把周期内的切线角总和改成简单地把 5 个切线角相加

// 定义买入和卖出条件
buy = sum_angle > 360// 在这里使用了 math.radians() 函数
sell = sum_angle < -360

// 执行买入和卖出操作
strategy.entry("Long", strategy.long, when=buy)
strategy.close("Short", when=buy)
strategy.entry("Short", strategy.short, when=sell)
strategy.close("Long", when=sell)

// 绘制曲线图
plot(sum_angle, color=color.green, title="周期内的切线角总和")
plot(angle, color=color.red, title="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角


Mehr