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