マルチタイムフレーム MACD 戦略


作成日: 2023-11-28 15:33:35 最終変更日: 2023-11-28 15:33:35
コピー: 0 クリック数: 1201
1
フォロー
1617
フォロワー

マルチタイムフレーム MACD 戦略

概要

マルチタイムフレームMACD戦略 (Multi Timeframe MACD Strategy) は,MACD指標を複数のタイムフレームでトレンド追跡するために使用する量化取引戦略である.この戦略は,異なる時間周期 (3分,5分,15分,30分) でMACD指標を計算して,異なる周期間の価格動きが一致しているかどうかを判断して,取引信号を発信する.

戦略原則

この戦略の核心的な論理は,複数の時間枠でMACD指標の交差を計算することです. 3分,5分,15分,30分). まず,各時間枠でMACD指標を計算し,MACD指標に基づいてその時間枠内の価格動きを判断します.

  1. 買い信号は,すべての時間枠で価格が上昇しているときに発生します.
  2. 価格がすべての時間枠で下落すると,セールシグナルが生成されます.

タイムフレームを越えてトレンドを判断することで,短期市場のノイズを効果的に除し,取引信号をより信頼できます.

戦略的優位性

この戦略は以下の利点があります.

  1. タイムフレームを越えてトレンドを検出し,ノイズをフィルターし,取引シグナルをより信頼性のあるものにします.
  2. MACD指標のパラメータは,異なる市場環境に対応してカスタマイズできます.
  3. フレキシブルな配置は,総合的な判断を必要とする時間枠,自主的に定義される取引ルール.

戦略的リスクと解決策

この戦略には以下のリスクがあります.

  1. 地域的な反転の機会を逃してしまう可能性が,すべての時間枠でトレンドの一致性を判断する際にはあります.
  2. MACD指数パラメータの設定が不適切である場合,取引信号の効果が悪くなる可能性があります.

解決策は

  1. 各時間枠の価格の逆転を許容し,より多くの機会を掴むために,総合的な判断の規則を適切に緩和することができる.
  2. MACD指標のパラメータを異なる市場に合わせて調整し,取引シグナルを現在の状況に合わせる必要があります.

最適化の方向

この戦略は,以下の点で改善できる:

  1. 総合的な判断が必要となる時間枠の数を増やし,減らすことで,最適な組み合わせを探し出すこと.
  2. 異なる MACD 指数パラメータの設定をテストする.
  3. 具体的入場・出場規則は,実測状況に応じて調整する.

要約する

多時間枠MACD策略は,MACD指標のトレンド判断機能を活用し,時間枠を越えた価格動向の検出を実現し,ノイズを効果的にフィルターし,信号品質を向上させる.この策略は,パラメータの調整とルールにより最適化され,異なる品種と状況に柔軟に適応し,強力な実用性を持っています.

ストラテジーソースコード
/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("[RichG] Easy MTF Strategy", overlay=false)

TF_1_time = input("3", "Timeframe 1")
TF_2_time = input("5", "Timeframe 2")
TF_3_time = input("15", "Timeframe 3")
TF_4_time = input("30", "Timeframe 4")

fastLen = input(title="Fast Length",  defval=12)
slowLen = input(title="Slow Length",  defval=26)
sigLen  = input(title="Signal Length",  defval=9)
[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)

width = 5
upcolor = green
downcolor = red
neutralcolor = blue
linestyle = line

TF_1 = request.security(syminfo.tickerid, TF_1_time, open) < request.security(syminfo.tickerid, TF_1_time, close) ? true:false
TF_1_color = TF_1 ? upcolor:downcolor

TF_2 = request.security(syminfo.tickerid, TF_2_time, open) < request.security(syminfo.tickerid, TF_2_time, close) ? true:false
TF_2_color = TF_2 ? upcolor:downcolor

TF_3 = request.security(syminfo.tickerid, TF_3_time, open) < request.security(syminfo.tickerid, TF_3_time, close) ? true:false
TF_3_color = TF_3 ? upcolor:downcolor

TF_4 = request.security(syminfo.tickerid, TF_4_time, open) < request.security(syminfo.tickerid, TF_4_time, close) ? true:false
TF_4_color = TF_4 ? upcolor:downcolor

TF_global = TF_1 and TF_2 and TF_3 and TF_4 
TF_global_bear = TF_1 == false and TF_2 == false and TF_3 == false and TF_4 == false
TF_global_color = TF_global ? green : TF_global_bear ? red : white
TF_trigger_width = TF_global ? 6 : width

plot(1, style=linestyle, linewidth=width, color=TF_1_color)
plot(5, style=linestyle, linewidth=width, color=TF_2_color)
plot(10, style=linestyle, linewidth=width, color=TF_3_color)
plot(15, style=linestyle, linewidth=width, color=TF_4_color)
plot(25, style=linestyle, linewidth=4, color=TF_global_color)    

exitCondition_Long = TF_global_bear
exitCondition_Short = TF_global

longCondition = TF_global
if (longCondition)
    strategy.entry("MTF_Long", strategy.long)

shortCondition = TF_global_bear
if (shortCondition)
    strategy.entry("MTF_Short", strategy.short)
    
strategy.close("MTF_Long", when=exitCondition_Long)    
strategy.close("MTF_Short", when=exitCondition_Short)