インパルスMACDと二重移動平均クロスオーバーに基づくマルチタイムスケールトレンド追跡戦略

MACD SMMA SMA ZLEMA EMA MA
作成日: 2024-05-17 15:33:02 最終変更日: 2024-05-17 15:33:02
コピー: 5 クリック数: 1201
1
フォロー
1617
フォロワー

インパルスMACDと二重移動平均クロスオーバーに基づくマルチタイムスケールトレンド追跡戦略

概要

この戦略は,SMMA,SMA,ZLEMA,EMAを含む複数の移動平均指標を使用し,それらの上に改良されたMACD指標であるImpulse MACDを構築し,Impulse MACDとその信号線の交差によって取引信号を生成します.戦略の主な構想は,異なる時間尺度の移動平均を使用して市場トレンドを捉え,Impulse MACDを使用してトレンドの強さと方向を確認することです.

戦略原則

  1. 計算の長さは34の高値,低値,閉盤価格のSMMA,ZLEMA,Impulse MACD ((MD) による.
  2. Impulse MACDの9周期SMAをシグナルライン ((SB)) として計算する.
  3. インパルスMACDとシグナルラインの差値 ((SH) を計算し,トレンドの強さを反映します.
  4. Impulse MACD上線を突破すると買入シグナルが生み出され,下線を突破すると平仓となる.
  5. 価格とImpulse MACD,高低価格SMMAの関係に応じて,異なる色でImpulse MACD柱状図を描画し,直観的にトレンドの強さや弱さを反映します.

戦略的優位性

  1. 市場動向をより全面的に反映するために,複数の種類の移動平均を使用しています.
  2. 改善されたMACD指標 (Impulse MACD) は,価格と移動平均の相対的な位置を考慮し,トレンドの強さをよりよく反映します.
  3. 信号線の導入は,偽信号をフィルタリングして信号の質を向上させるのに役立ちます.
  4. Impulse MACDは,トレンドの強さに応じて異なる色で描画され,市場動向を直感的に判断するのに役立ちます.

戦略リスク

  1. パラメータの不適切な選択は,信号の頻度や遅延を引き起こす可能性があり,異なる市場と周期に応じて最適化する必要があります.
  2. この戦略は,地震の場合は,誤った信号を多く生成し,損失を招く可能性があります.
  3. 戦略には止損メカニズムが欠けていて,急激な市場状況で大きな撤退が起こりうる.

戦略最適化の方向性

  1. ADXなどのトレンド判断指標を導入し,トレンドが明瞭である時に取引し,波動的な状況での損失を減らす.
  2. 生成された取引信号は,RSI,ATRなどの他の指標と組み合わせて二次確認を行うことで,信号の質を向上させることができる.
  3. 合理的なストップ・ロズとストップ・ポジションを設定し,単一取引のリスクをコントロールする.
  4. 遺伝的アルゴリズムなどの方法を使用して最適のパラメータの組み合わせを探す.

要約する

この戦略は,複数のタイプの移動平均に基づいて改良されたMACD指標を構築し,信号線と交差して取引信号を生成し,傾向の強さを直観的に表示し,全体的な考えが明確で,優位性は明らかである.しかし,この戦略には,変動状況への適応性の欠如,風力管理措置の欠如などの一定の制限があります.トレンド判断,信号確認,リスク制御,パラメータ最適化などの側面から戦略の安定性と収益性を向上させるために,戦略のさらなる改善を考慮することができます.

ストラテジーソースコード
/*backtest
start: 2023-05-11 00:00:00
end: 2024-05-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Impulse MACD Strategy [LazyBear]", shorttitle="IMACD_Strategy", overlay=false)

// Function to calculate SMMA
calc_smma(src, len) =>
    var float smma = na
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

// Function to calculate SMA
	ta.sma(src, len)
    sum = 0.0
    for i = 0 to len - 1
        sum := sum + src[i]
    sum / len

// Function to calculate ZLEMA
calc_zlema(src, length) =>
    var float ema1 = na
    var float ema2 = na
    var float d = na
    ema1 := ta.ema(src, length)
    ema2 := ta.ema(ema1, length)
    d := ema1 - ema2
    ema1 + d

// Function to calculate EMA
calc_ema(src, len) =>
    ema = 0.0
    ema := ta.ema(src, len)
    ema

// Inputs
lengthMA = input(34, title="Length of Moving Average")
lengthSignal = input(9, title="Length of Signal Line")

// Calculations
src = hlc3
hi = calc_smma(high, lengthMA)
lo = calc_smma(low, lengthMA)
mi = calc_zlema(src, lengthMA) 

md = mi > hi ? (mi - hi) : mi < lo ? (mi - lo) : 0
sb = ta.sma(md, lengthSignal)
sh = md - sb
mdc = src > mi ? src > hi ? color.lime : color.green : src < lo ? color.red : color.orange

// Plotting
plot(0, color=color.gray, linewidth=1, title="MidLine")
plot(md, color=mdc, linewidth=2, title="ImpulseMACD", style=plot.style_histogram)
plot(sh, color=color.blue, linewidth=2, title="ImpulseHisto", style=plot.style_histogram)
plot(sb, color=color.maroon, linewidth=2, title="ImpulseMACDCDSignal")

// Execute trades based on signals
if (ta.crossover(md, sb))
    strategy.entry("Buy", strategy.long)
if (ta.crossunder(md, sb))
    strategy.close("Buy")