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

MACD双変換ゼロ遅延取引戦略 - 短期トレンド捕捉に基づく高周波取引

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

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)


関連コンテンツ

もっと見る