Die Dual Moving Average Strategy 360° ist eine quantitative Handelsstrategie, die zwei gleitende Durchschnitte und die Bestimmung der Trendstärke beinhaltet.
Die Kernlogik der Dual Moving Average Strategy 360° ist:
Der Kalman-Filter eliminiert etwas Lärm aus dem gleitenden Durchschnitt, um ihn glatter zu machen. Der Tangenzwinkel zwischen den beiden gleitenden Durchschnitten spiegelt Preistrendänderungen wider. Zum Beispiel, wenn der Tangenzwinkel positiv ist, zeigt er einen Aufwärtstrend an; umgekehrt stellt ein negativer Winkel einen Abwärtstrend dar.
Die Strategie wählt 30 Minuten als Berechnungszeitraum, um alle positiven und negativen Tangenzwinkel innerhalb dieses Zeitraums zu summieren. Wenn die Summe 360 Grad übersteigt, signalisiert sie einen extrem starken Trend und gibt ein langes Signal ab; umgekehrt, wenn die Summe unter -360 Grad liegt, gibt sie eine Trendumkehr an und gibt ein kurzes Signal ab.
Die Hauptvorteile der Doppel-Drehungsdurchschnitt-Strategie 360° sind:
Die Strategie des Doppel gleitenden Durchschnitts 360° birgt ebenfalls einige Risiken:
Um die oben genannten Risiken abzubauen, können Maßnahmen wie die Verkürzung der gleitenden Durchschnittsperiode, die Optimierung von Parameterkombinationen und die Einführung von Stop-Loss-Mechanismen ergriffen werden.
Die Strategie 360° für den doppelten gleitenden Durchschnitt kann weiter optimiert werden, indem
Die Dual Moving Average Strategy 360° nutzt die Filterung von gleitenden Durchschnitten und quantitative Tangentwinkel-Trendurteile, um eine relativ robuste quantitative Handelsstrategie zu erreichen. Im Vergleich zu einzelnen technischen Indikatoren bildet diese Strategie eine umfassendere Betrachtung und hat eine stärkere Praktikabilität.
/*backtest start: 2024-01-25 00:00:00 end: 2024-01-30 08:00:00 period: 5m basePeriod: 1m 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="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角