Chiến lược này sử dụng nhiều chỉ số đường trung bình di chuyển, bao gồm SMMA, SMA, ZLEMA và EMA, và dựa trên chúng, xây dựng một chỉ số MACD được cải tiến (Impulse MACD) để tạo ra tín hiệu giao dịch thông qua sự giao thoa giữa Impulse MACD và đường tín hiệu của nó. Ý tưởng chính của chiến lược là sử dụng đường trung bình di chuyển trên các thang thời gian khác nhau để nắm bắt xu hướng thị trường, đồng thời sử dụng Impulse MACD để xác định cường độ và hướng của xu hướng.
Chiến lược này xây dựng các chỉ số MACD được cải thiện dựa trên nhiều loại đường trung bình chuyển động và tạo ra các tín hiệu giao dịch bằng cách chéo với các đường tín hiệu, đồng thời hiển thị trực quan cường độ xu hướng, ý tưởng tổng thể rõ ràng và lợi thế rõ ràng. Tuy nhiên, chiến lược này cũng có một số hạn chế, chẳng hạn như không thích nghi với các thị trường lung lay, thiếu các biện pháp kiểm soát gió, v.v.
/*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")