資源の読み込みに... 荷物...

マックド・インパルスと二重移動平均クロスオーバーに基づいた多期トレンド追跡戦略

作者: リン・ハーンチャオチャン開催日:2024年5月17日15時33分02秒
タグ:マックドSMMASMAZLEMAエイママルチ

img

概要

この戦略は,SMMA,SMA,ZLEMA,EMAを含む様々な移動平均指標を利用し,それらをベースに改良されたMACD指標 (インパルスMACD) を構築する.インパルスMACDとその信号線のクロスオーバーを通じて取引信号を生成する.戦略の主なアイデアは,インパルスMACDでトレンドの強さと方向性を確認しながら,異なるタイムフレームの移動平均を使用して市場のトレンドを把握することである.

戦略原則

  1. インパルスMACD (MD) を得るために,高値,低値,閉値のSMMAとZLEMAを 34 の長さで計算します.
  2. インパルスMACDの9期SMAをシグナルライン (SB) として計算する.
  3. インパルスMACDと信号線 (SH) の違いを計算して,トレンド強さを反映します.
  4. インパルスMACDがシグナルラインの上を横切ると買い信号を生成し,下を横切るとポジションを閉じる.
  5. 価格,インパルスMACD,および高低価格SMMAの関係に基づいて,異なる色でインパルスMACDヒストグラムをプロットして,トレンド強さを視覚的に反映します.

戦略 の 利点

  1. 移動平均の複数の種類を使用することで,市場の動向をより包括的に反映できます.
  2. 改善されたMACD指標 (インパルスMACD) は,価格と移動平均の相対的な位置を考慮し,トレンド強度をよりよく反映しています.
  3. シグナルラインの導入は 誤った信号をフィルタリングし 信号の質を向上させます
  4. トレンド強度に基づいて異なる色でインパルス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")


関連性

もっと