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

ゼロラグ MACD ダブルクロスオーバー取引戦略 - 短期トレンドキャプチャに基づく高周波取引

作者: リン・ハーンチャオチャン, 日付: 2024-05-24 18:14:37
タグ:マックドエイマSMA

img

概要

この戦略は,MACD (Moving Average Convergence Divergence) インジケーターのゼロレイグバージョンに基づいている.この戦略は,価格変化に迅速に対応することで短期的なトレンドを把握し,高周波取引が可能である.この戦略は,異なる期間の2つの移動平均値 (速い線と遅い線) を使用してMACDインジケーターを構築し,インジケーターと価格との間の遅延をなくすためにゼロレイグアルゴリズムを導入し,シグナルのタイミングを向上させる.さらに,シグナルラインとMACDラインのクロスオーバーは,買い売りシグナルとして使用され,トレーダーが取引機会を間に合うようにするためにアラートが設定されている.

戦略原則

  1. 急速線 (デフォルト 12 期) と遅い線 (デフォルト 26 期) の EMA (指数関数移動平均線) または SMA (単純移動平均線) を計算する.
  2. ゼロレイグアルゴリズムを使って 素早い線と 遅い線を 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)


関連性

もっと