強化されたボリュームと価格トレンド判断モメンタム戦略

MACD ATR MA EMA SMA
作成日: 2025-01-10 15:40:37 最終変更日: 2025-01-10 15:40:37
コピー: 0 クリック数: 346
1
フォロー
1617
フォロワー

強化されたボリュームと価格トレンド判断モメンタム戦略

概要

この戦略は、MACD インジケーターとボリュームと価格の関係に基づいた取引システムです。MACD ヒストグラムの形状の変化を観察することで、市場トレンドの転換点を判断します。この戦略は、動的なストッププロフィットとストップロスのメカニズムを採用し、ATR インジケーターを使用して市場の変動に適応し、リスクを効果的に制御します。

戦略原則

この戦略のコアロジックは、MACD インジケーターの深い列と浅い列の変化と、EMA および SMA のデュアル移動平均システムを組み合わせたものです。 MACD ヒストグラムが暗い色から明るい色に変わると、勢いが変化したことを示しており、この時点でシステムは取引を開始します。具体的には:

  1. 高速(12)移動平均と低速(26)移動平均を使用してMACD値を計算する
  2. 9期間のシグナルラインで平滑化されたMACD
  3. MACDヒストグラムの色の変化を観察する
  4. 14期間のATRインジケーターを組み合わせて動的な利益確定と損失確定を設定します

戦略的優位性

  1. 指標の組み合わせは科学的かつ合理的であり、MACDはトレンドを効果的に捉えることができ、ATRは変動に適応することができます。
  2. ストッププロフィットとストップロスの設定は柔軟で、複数のパラメータを通じてさまざまな市場特性に応じて調整できます。
  3. 取引シグナルは明確で、棒グラフの色の変化を通じてエントリー時間を直感的に判断できます。
  4. ロングとショートの双方向取引を考慮し、戦略の適用性と利益機会を増やす

戦略リスク

  1. 遅行指標としてのMACDは、急速な市場変動に対する最適なエントリーポイントを逃す可能性がある
  2. 不安定な市場では誤ったシグナルが発生し、頻繁な取引につながる可能性がある。
  3. ATR倍数の設定が不適切だと、ストップロスが緩すぎたりきつすぎたりする可能性がある。
  4. 過度な一回損失を回避するために合理的な資金管理を設定する必要がある

戦略最適化の方向性

  1. 信号の信頼性を向上させるために音量確認信号を導入
  2. 変動の激しい市場での誤ったシグナルを減らすためにトレンドフィルターを追加しました
  3. 利益確定と損切りの倍率を最適化します。これは、さまざまな期間に応じて動的に調整できます。
  4. ボラティリティフィルタリングを追加し、ボラティリティが高い期間の取引頻度を減らしました。
  5. 不利な期間の取引を避けるために時間フィルターの導入を検討する

要約する

これは、古典的なテクニカル分析指標 MACD と最新のリスク管理方法を組み合わせた包括的な戦略です。 MACD ヒストグラムの形状の変化を観察することで市場の勢いの変化を捉え、ATR を使用して動的なリスク管理を行います。戦略は合理的に設計されており、操作ロジックは明確で、実用価値も高いです。この戦略は継続的な最適化と改善を通じて、実際の戦闘でより良いパフォーマンスを達成することが期待されます。

ストラテジーソースコード
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy(title="軒割MACD 空心量能不足策略", shorttitle="軒割MACD 空心量能不足策略", overlay=true)

//=== 1) 參數 ===//
fast_length   = input.int(title="Fast Length",        defval=12)
slow_length   = input.int(title="Slow Length",        defval=26)
src           = input.source(title="MACD Source",     defval=close)
signal_length = input.int(title="Signal Smoothing",   defval=9,  minval=1, maxval=50)
sma_source    = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA","EMA"])
sma_signal    = input.string(title="Signal MA Type",     defval="EMA", options=["SMA","EMA"])

// 啟用多單 / 空單
useLong       = input.bool(title="啟用多單?(底部紅色)", defval=true)
useShort      = input.bool(title="啟用空單?(頂部綠色)", defval=true)

// 止盈倍數 (1~10倍 ATR)
tpATRmult     = input.int(title="止盈 ATR 倍數 (1~10)", defval=10, minval=1, maxval=500)
// 止損倍數 (1~10倍 ATR)
slATRmult     = input.int(title="止損 ATR 倍數 (1~10)", defval=3, minval=1, maxval=500)

//=== 2) MACD 計算 ===//
fast_ma  = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma  = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd     = fast_ma - slow_ma
signal   = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist     = macd - signal

//=== 3) 判斷深色/淺色(用於變化訊號)===//
darkGreen  = hist >= 0 and hist <= hist[1]   // 上方,柱子縮小或持平
lightGreen = hist >= 0 and hist >  hist[1]   // 上方,柱子變大
darkRed    = hist <  0 and hist <= hist[1]   // 下方,柱子(絕對值)變大或持平
lightRed   = hist <  0 and hist >  hist[1]   // 下方,柱子(絕對值)變小

// 由「深 → 淺」是否發生在上一根
colorChangeToLightGreen = darkGreen[1] and lightGreen
colorChangeToLightRed   = darkRed[1]   and lightRed

//=== 4) ATR 計算 (用於止盈止損) ===//
atrPeriod  = 14
atrValue   = ta.atr(atrPeriod)

//=== 5) 多單策略:深紅 → 淺紅 (底部紅色) ===//
if useLong and colorChangeToLightRed
    // 以當前 K 線 low - ATR倍數 作為多單止損
    longStopLoss   = low - (slATRmult * atrValue)
    // 以當前 close + ATR倍數 作為多單止盈
    longTakeProfit = close + (tpATRmult * atrValue)

    // 進多單
    strategy.entry("Long Entry", strategy.long, comment="多", qty=1)
    strategy.exit("平多", "Long Entry", stop=longStopLoss, limit=longTakeProfit)

//=== 6) 空單策略:深綠 → 淺綠 (頂部綠色) ===//
if useShort and colorChangeToLightGreen
    // 以當前 K 線 high + ATR倍數 作為空單止損
    shortStopLoss   = high + (slATRmult * atrValue)
    // 以當前 close - ATR倍數 作為空單止盈
    shortTakeProfit = close - (tpATRmult * atrValue)

    // 進空單
    strategy.entry("Short Entry", strategy.short, comment="空", qty=1)
    strategy.exit("平空", "Short Entry", stop=shortStopLoss, limit=shortTakeProfit)

//=== 7) 繪製 MACD 與直方圖 ===//
hline(0, "Zero Line", color=color.new(#787B86, 50))

// 長條圖顏色:
//   - 上方 (hist >= 0) 時:hist 比前一根大 (淺綠) 或小 (深綠)
//   - 下方 (hist < 0)  時:hist 比前一根大 (淺紅) 或小 (深紅)
plot(hist,title="Histogram",style=plot.style_columns,color = hist >= 0? (hist > hist[1]  ? #26A69A : #B2DFDB)   : (hist > hist[1]  ? #FFCDD2 : #FF5252)  )

// 繪製 MACD 與 Signal
plot(macd,   title="MACD",   color=#2962FF)
plot(signal, title="Signal", color=#FF6D00)