二重移動平均戦略 360°

作者: リン・ハーンチャオチャン,日付: 2024-02-02 14:29:59
タグ:

img

概要

ダブル・ムービング・アベア 360°戦略は,ダブル・ムービング・アベアとトレンド強度決定を組み込む定量的な取引戦略である.異なる期間の移動平均を計算することで,価格傾向を決定し,同時に,触角を蓄積することで,トレンド強度を判断し,より正確なエントリーと出口を達成する.

戦略の論理

双向移動平均戦略の基本論理は 360° です.

  1. 1分間の移動平均値とカルマンフィルタを計算する.
  2. 2つの移動平均値の価格差に基づいて触角を計算する.
  3. トレンド強度信号を決定するために触角を蓄積する.
  4. 累積した触角が既定の値を超えているか否かに基づいて取引シグナルを発行する.

カルマンのフィルタは,移動平均からノイズを取り除き,よりスムーズにする.両移動平均間の触角は価格傾向の変化を反映する.例えば,触角が正であるとき,上向き傾向を示し,逆に,負の角度は下向き傾向を表す.

この戦略は,その期間のすべての正角と負角を合計する計算期間として30分を選択する.合計が360度を超えると,非常に強いトレンドをシグナル化し,長い信号を発し,逆の方で,合計が-360度未満の場合,トレンド逆転を指示し,短い信号を発します.

利点分析

二重移動平均 360° 戦略の主な利点は以下の通りである.

  1. 移動平均値は,より信頼性の高い取引決定のために,短期間の市場騒音をフィルター化します.
  2. 触角はトレンド強度を定量化し,移動平均パターンだけで判断する主観性を回避する.
  3. 複数の触角を和算すると,より優れたノイズ削減効果があり,より信頼性の高い取引信号が得られる.
  4. 単一の移動平均戦略と比較して,二重移動平均とトレンド強度決定は戦略をより包括的で堅牢にする.

リスク分析

360° のダブル移動平均戦略には,いくつかのリスクもあります.

  1. 移動平均値は価格変化に遅れ,短期的なトレンドターニングポイントを見逃す可能性があります.
  2. 累積したトレンド強度信号だけに頼ることは,市場の波動によって混乱する可能性があります.
  3. パラメータの設定が正しくない場合 (例えば計算期間長さなど) は,取引が欠落したり,不正なシグナルが生成される可能性があります.

上記のリスクを軽減するために,移動平均期間を短縮し,パラメータの組み合わせを最適化し,ストップ・ロスのメカニズムを追加するなどの措置を講じることができます.

オプティマイゼーションの方向性

二重移動平均の戦略360°は,次の方法でさらに最適化できます.

  1. 市場変動に基づいてパラメータを調整する適応性移動平均を組み込むこと.
  2. 複数の移動平均期間の参照により,最適化されたパラメータ組み合わせを形成する.
  3. 動的トレンド決定モジュールの追加 変動,取引量などに基づいて;
  4. マシン学習モデルでパラメータの調整や取引の決定を支援する

概要

ダブル・ムービング・アベア 360°戦略は,相対的に堅牢な定量的な取引戦略を達成するために,移動平均フィルタリングと定量的な触角傾向判断を利用する.単一の技術指標と比較して,この戦略はより包括的な考慮事項を形成し,より強力な実用性を持っています.しかし,パラメータ調整とリスク制御は依然として不可欠であり,今後さらにより良い結果のために戦略はさらに最適化することができます.


/*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="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角


もっと