Strategi ini menggunakan pelbagai penunjuk purata bergerak, termasuk SMMA, SMA, ZLEMA, dan EMA, dan membina penunjuk MACD yang lebih baik (MACD Impuls) berdasarkan mereka. Ia menghasilkan isyarat perdagangan melalui persilangan Impulse MACD dan garis isyaratnya. Idea utama strategi ini adalah untuk menangkap trend pasaran menggunakan purata bergerak bingkai masa yang berbeza sambil mengesahkan kekuatan dan arah trend dengan Impulse MACD.
Strategi ini membina penunjuk MACD yang lebih baik berdasarkan pelbagai jenis purata bergerak dan menghasilkan isyarat dagangan melalui persilangan dengan garis isyarat sambil secara intuitif memaparkan kekuatan trend. Idea keseluruhan jelas, dan kelebihan jelas. Walau bagaimanapun, strategi ini juga mempunyai batasan tertentu, seperti kemampuan beradaptasi yang buruk dengan pasaran yang bergolak dan kekurangan langkah kawalan risiko. Penambahbaikan lanjut boleh dipertimbangkan dari aspek seperti pengenalan trend, pengesahan isyarat, kawalan risiko, dan pengoptimuman parameter untuk meningkatkan ketahanan dan keuntungan strategi.
/*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")