MACD ダブルコンバージョンゼロラグ取引戦略 - 短期トレンドキャプチャに基づく高頻度取引

MACD EMA SMA
作成日: 2024-05-24 18:14:37 最終変更日: 2024-05-24 18:14:37
コピー: 0 クリック数: 1177
1
フォロー
1617
フォロワー

MACD ダブルコンバージョンゼロラグ取引戦略 - 短期トレンドキャプチャに基づく高頻度取引

概要

この戦略は,MACD ((移動平均線散散) 指数のゼロ遅延版をベースに,価格変化に迅速に対応し,短期トレンドを捉え,高頻度取引を実現する.戦略は,2つの異なる周期の移動平均線 ((快線と慢線) を使ってMACD指数を構築し,指数と価格の遅延をなくし,信号のタイミングを向上させるゼロ遅延アルゴリズムを導入する.同時に,信号線とMACD線の交差を買い売り信号として使用し,アラームを設定し,トレーダーが取引機会を早期に把握できるようにする.

戦略原則

  1. 素線 ((デフォルト12周期) と慢線 ((デフォルト26周期) の EMA ((指数移動平均) または SMA ((単純移動平均) を計算する.
  2. 速線と遅線をゼロラグのアルゴリズムで二次平滑し,指標と価格の遅延をなくします.
  3. MACD線は,ゼロの遅滞の速い線とゼロの遅滞の遅い線の差値から構成される.
  4. 信号線は,MACD線のEMA ((デフォルト9周期) またはSMAから構成される。
  5. MACD柱状図は,MACD線と信号線の差値で構成され,青で正値,赤で負値を表している.
  6. MACD線が信号線を下から上へと通過し,通過点がゼロ軸より下にあるとき,買取信号 (ブルーポイント) が発生する.
  7. MACD線が信号線を上から下へと通過し,通過点がゼロ軸上にあるとき,出売信号 (赤点) が発生する.
  8. 戦略は,買い/売却のシグナルに応じて自動的に注文し,それに応じた警報を誘発する.

優位分析

  1. ゼロラグアルゴリズムは,指標と価格の遅延を効果的に排除し,信号のタイム性および正確性を向上させます.
  2. ダブル移動平均の設計は,市場動向をよりよく捉え,異なる市場環境に対応します.
  3. MACD柱状のグラフは,多空の力対比を直感的に反映し,取引決定を補助する.
  4. 自動注文とアラーム機能により,取引機会を把握し,取引効率を向上させることができます.

リスク分析

  1. 波動的な市場では,頻繁に交差するシグナルが過剰取引と損失を引き起こす可能性があります.
  2. パラメータを正しく設定しない場合,信号が偽りになり,戦略のパフォーマンスに影響を与える可能性があります.
  3. 戦略は歴史的なデータに依存し,突発的事件や黒天事件への適応性が低い.

最適化の方向

  1. ADXなどのトレンド確認指標を導入し,波動市場における偽信号をフィルターする.
  2. パラメータを最適化して,最適の速線周期と信号線周期の組み合わせを見つけ,戦略の安定性を高める.
  3. 他の技術指標や基本的要素と組み合わせた多要素モデルを構築し,戦略のリスク調整後の収益を向上させる.
  4. 単一取引のリスクを制御するストップ・ロスト・メカニズムを導入する.

要約する

MACD二重変換ゼロ遅滞取引戦略は,価格変化に迅速に反応し,短期トレンドを捉え,高周波取引を実現する.ゼロ遅滞アルゴリズムと二重移動平均の設計は,シグナルの時効性および正確性を向上させる.戦略には,シグナル直観性,操作の便利性などの一定の利点がありますが,同時に,過剰取引,パラメータの敏感性などのリスクもあります.将来的には,トレンド確認,指標パラメータの最適化,多因モデルなどの方法を導入することによって,戦略を最適化し,戦略の安定性および収益水準を向上させることができます.

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

//@version=4
strategy("BNM INTRADAY SETUP MACD 3M - Version 1.2", shorttitle="Zero Lag MACD Enhanced 1.2")
source = close

fastLength = input(12, title="Fast MM period", minval=1)
slowLength = input(26,title="Slow MM period", minval=1)
signalLength =input(9,title="Signal MM period", minval=1)
useEma = input(true, title="Use EMA (otherwise SMA)")
useOldAlgo = input(false, title="Use Glaz algo (otherwise 'real' original zero lag)")
showDots = input(true, title="Show symbols to indicate crossing")
dotsDistance = input(1.5, title="Symbols distance factor", minval=0.1)

// Fast line
ma1 = useEma ? ema(source, fastLength) : sma(source, fastLength) 
ma2 = useEma ? ema(ma1, fastLength) : sma(ma1, fastLength) 
zerolagEMA = ((2 * ma1) - ma2)

// Slow line
mas1 = useEma ? ema(source, slowLength) : sma(source, slowLength)
mas2 = useEma ? ema(mas1, slowLength) : sma(mas1, slowLength)
zerolagslowMA = ((2 * mas1) - mas2)

// MACD line
ZeroLagMACD = zerolagEMA - zerolagslowMA 

// Signal line
emasig1 = ema(ZeroLagMACD, signalLength)
emasig2 = ema(emasig1, signalLength)
signal = useOldAlgo ? sma(ZeroLagMACD, signalLength) : (2 * emasig1) - emasig2

hist = ZeroLagMACD - signal

upHist = (hist > 0) ? hist : 0
downHist = (hist <= 0) ? hist : 0

p1 = plot(upHist, color=color.blue, transp=40, style=plot.style_columns, title='Positive delta')
p2 = plot(downHist, color=color.red, transp=40, style=plot.style_columns, title='Negative delta') 

zeroLine = plot(ZeroLagMACD, color=color.red, transp=0, linewidth=2, title='MACD line')
signalLine = plot(signal, color=color.blue, transp=0, linewidth=2, title='Signal')

ribbonDiff = hist > 0 ? color.blue : color.red
fill(zeroLine, signalLine, color=ribbonDiff)

circleYPosition = signal * dotsDistance
ribbonDiff2 = hist > 0 ? color.blue : color.red

// Generate dots for cross signals
plot(showDots and cross(ZeroLagMACD, signal) ? circleYPosition : na, style=plot.style_circles, linewidth=4, color=ribbonDiff2, title='Dots')

// Alerts for buy and sell signals
buySignal = cross(ZeroLagMACD, signal) and (ribbonDiff2 == color.blue) and (ZeroLagMACD < 0)
sellSignal = cross(ZeroLagMACD, signal) and (ribbonDiff2 == color.red) and (ZeroLagMACD > 0)

// Use 'strategy.entry' for placing orders in strategy context
if (buySignal)
    strategy.entry("Buy", strategy.long)
    alert("Buy Signal: Blue dot below zero line", alert.freq_once_per_bar_close)

if (sellSignal)
    strategy.entry("Sell", strategy.short)
    alert("Sell Signal: Red dot above zero line", alert.freq_once_per_bar_close)