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