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

作者: リン・ハーンチャオチャン,日付: 2023年11月28日 15:33:35
タグ:

img

概要

マルチタイムフレームMACD戦略は,複数のタイムフレームでMACD指標を使用してトレンドを追跡する定量的な取引戦略である.この戦略は,価格トレンドが異なる期間 (3分,5分,15分,30分) で一貫しているかどうかを判断することによって取引信号を生成する.

戦略の論理

この戦略の主な論理は,複数の時間枠 (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)

もっと