複数移動平均の包括的戦略

作者: リン・ハーンチャオチャン, 日時: 2023-12-22 11:56:42
タグ:

img

概要

マルチプル・ムービング・アベレア・コンプレッシブ・ストラテジー (Multiple Moving Average Comprehensive Strategy) は,非常に汎用的で強力な技術分析戦略である.この戦略は,市場動向に関する包括的な洞察を提供するために,さまざまなタイムフレームにわたる複数のムービング・アベレアを組み合わせている.この戦略は,潜在的なエントリー・エグジット・ポイントを特定するために明確な購入・売却信号を生成する.また,ユーザーが取引の好みや目標に基づいて移動平均の長さを調整できるように,大きなカスタマイズ可能性も提供している.

原則

この戦略の核心は,異なる期間にわたって複数の移動平均値を計算し,追跡することです.特に10日,20日,30日,100日までの移動平均値です.これらの移動平均値は,過去10日,20日30日間の平均閉店価格に設定されています.例えば,20日移動平均値は,過去20日間の平均閉店価格です.

本日の閉盤価格がこれらの移動平均値以上であるとき,購入信号が生成される. 本日の閉盤価格がこれらの移動平均値以下であるとき,販売信号が生成される. したがって,異なるタイムフレームの移動平均値が同じ方向を指しているときにのみ信号が起動する. これにより多くのノイズがフィルタリングされ,信号がより信頼性が高くなります.

利点

  1. 異なる市場環境に適応できる複数の時間スケールでの洞察を提供します

  2. 複数の確認を介してノイズをフィルタリングし,信号をより信頼性のあるものにします

  3. 明確で理解し実行しやすい取引規則

  4. パーソナライズされた要求を満たす高度にカスタマイズ可能

  5. 投資,ストップ損失,収益の取扱いに指針を提示し,リスク管理を容易にする

リスク と 解決策

  1. 多数の移動平均値が変動市場中に交差し,信号が不透明になる可能性があります.移動平均値の数と長さを調整することでこれを軽減できます.

  2. 将来の価格が複数の移動平均を突破する確率は低く,いくつかの取引が欠けている可能性があります.移動平均の数を低割難度まで減らすことができます.

  3. 信号は遅れており,トレンド逆転を早期に把握できない.MACDのような主要な指標を組み込むことで,ターンポイント判断を改善することができます.

  4. 安定した収入を得るためには,生成された取引数が少ない場合もあります.移動平均の長さを短縮したり,他の戦略/指標と組み合わせたりすることが役立ちます.

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

  1. パラメータ調節:最適なパラメータミックスを見つけるために移動平均の数と長さを調整します.例えば,5日,10日,20日組み合わせをテストすることができます.

  2. 他の指標を組み合わせる:MACDやRSIのような指標を追加することで,戦略の回復力を向上させることができます.異なる指標は互いを補完します.

  3. 戦略の組み合わせ: ブレイクアウトシステムやトレンド追跡などの他の戦略と組み合わせることで,強度が向上します.異なる戦略はリスクを多様化します.

  4. 自動最適化: 客観関数を最大化し,最適なパラメータを見つけるために異なるパラメータセットをアルゴリズム的にテストする. 手動干渉を軽減し,効率を向上させる.

結論

マルチプル・ムービング・アベア・コンプレッシブ・ストラテジー (MSA) は,非常に汎用的で強力な分析ツールである.マルチタイムスケール洞察,信頼性の高い信号,使いやすさと理解性,および高いカスタマイズ性を提供する.同時に,より複雑な市場体制への適応のためにパラメータチューニング,モデル組み合わせなどを通じて対処できるいくつかの制限がある.この戦略は,技術分析のスキル開発を支援するための学習ツールであり,個々のニーズに合わせて調整した後,実践的な取引の実施にも役立つ.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Multiple Moving Average Strategy", overlay=true)

// Function to calculate moving average
get_ma(src, length) =>
    ta.sma(src, length)

// Initialize moving average lengths
ma_length_10 = 10
ma_length_20 = 20
ma_length_30 = 30
ma_length_40 = 40
ma_length_50 = 50
ma_length_60 = 60
ma_length_70 = 70
ma_length_80 = 80
ma_length_90 = 90
ma_length_100 = 100

// Calculate 10-day, 20-day, 30-day, 40-day, 50-day, 60-day, 70-day, 80-day, 90-day, and 100-day moving averages
ma_10 = get_ma(close, ma_length_10)
ma_20 = get_ma(close, ma_length_20)
ma_30 = get_ma(close, ma_length_30)
ma_40 = get_ma(close, ma_length_40)
ma_50 = get_ma(close, ma_length_50)
ma_60 = get_ma(close, ma_length_60)
ma_70 = get_ma(close, ma_length_70)
ma_80 = get_ma(close, ma_length_80)
ma_90 = get_ma(close, ma_length_90)
ma_100 = get_ma(close, ma_length_100)

// Generate Buy/Sell signals for the 10 moving averages
buy_signal = close > ma_10
sell_signal = close < ma_10

// Add conditions for each additional moving average length
buy_signal := buy_signal and (close > get_ma(close, ma_length_20))
sell_signal := sell_signal and (close < get_ma(close, ma_length_20))

buy_signal := buy_signal and (close > get_ma(close, ma_length_30))
sell_signal := sell_signal and (close < get_ma(close, ma_length_30))

buy_signal := buy_signal and (close > get_ma(close, ma_length_40))
sell_signal := sell_signal and (close < get_ma(close, ma_length_40))

buy_signal := buy_signal and (close > get_ma(close, ma_length_50))
sell_signal := sell_signal and (close < get_ma(close, ma_length_50))

buy_signal := buy_signal and (close > get_ma(close, ma_length_60))
sell_signal := sell_signal and (close < get_ma(close, ma_length_60))

buy_signal := buy_signal and (close > get_ma(close, ma_length_70))
sell_signal := sell_signal and (close < get_ma(close, ma_length_70))

buy_signal := buy_signal and (close > get_ma(close, ma_length_80))
sell_signal := sell_signal and (close < get_ma(close, ma_length_80))

buy_signal := buy_signal and (close > get_ma(close, ma_length_90))
sell_signal := sell_signal and (close < get_ma(close, ma_length_90))

buy_signal := buy_signal and (close > get_ma(close, ma_length_100))
sell_signal := sell_signal and (close < get_ma(close, ma_length_100))

// Plot Buy/Sell signals on the chart
plotshape(buy_signal, title="Buy Signal", color=color.green, style=shape.triangleup, location=location.belowbar)
plotshape(sell_signal, title="Sell Signal", color=color.red, style=shape.triangledown, location=location.abovebar)

// Execute long buy order when all ten moving averages give a Buy signal
if (buy_signal)
    strategy.entry("Buy", strategy.long)

// Execute sell order when all ten moving averages give a Sell signal
if (sell_signal)
    strategy.close("Buy")

// Execute short sell order when all ten moving averages give a Sell signal
if (sell_signal)
    strategy.entry("Sell", strategy.short)

// Execute buy order when all ten moving averages give a Buy signal
if (buy_signal)
    strategy.close("Sell")

// Plot closing price and moving averages on the chart
plot(close, title="Close", color=color.blue)
plot(ma_10, title="MA 10", color=color.orange)
plot(ma_20, title="MA 20", color=color.purple)
plot(ma_30, title="MA 30", color=color.blue)
plot(ma_40, title="MA 40", color=color.red)
plot(ma_50, title="MA 50", color=color.green)
plot(ma_60, title="MA 60", color=color.yellow)
plot(ma_70, title="MA 70", color=color.fuchsia)
plot(ma_80, title="MA 80", color=color.gray)
plot(ma_90, title="MA 90", color=color.teal)
plot(ma_100, title="MA 100", color=color.maroon)


もっと