ダブル移動平均戦略 360°


作成日: 2024-02-02 14:29:59 最終変更日: 2024-02-02 14:29:59
コピー: 0 クリック数: 656
1
フォロー
1617
フォロワー

ダブル移動平均戦略 360°

概要

双均線戦略360°は,双均線とトレンドの強さ判定を融合した量化取引戦略である.この戦略は,異なる周期の平均線を計算することによって,価格の傾向を判断する.同時に,切線角の累積とトレンドの強さ判定を組み合わせて,より正確な買入販売のタイミングの選択を実現する.

戦略原則

360°の核心的な論理は,

  1. 1分とカルマン波の平均線を計算する.
  2. 2つの平均線の価格差を計算して切線角を計算する.
  3. 傾向の強弱の信号を得るための切線角の累積.
  4. 累加切線角が設定された値を超えているかどうかに応じて取引信号を発する.

具体的には,策略では,1分原始均線とカルマン波を通過した均線を定義している.カルマン波は均線内の部分的なノイズを取り除き,より滑らかにする.そして,価格の傾向の変化を反映する2つの均線の切線角を計算している.例えば,切線角が正であるときは,価格が上昇していることを示している.逆に,それは下落していることを示している.

策略は30分を計算周期として選択し,real summedはその周期内のすべての正負切線角である.切線角が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="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角