
Chiến lược này sử dụng nhiều chỉ số 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 bằng cách 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 các đường trung bình di chuyển trên các quy mô 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ận cường độ và hướng của xu hướng.
Chiến lược này dựa trên nhiều loại trung bình di chuyển xây dựng các chỉ số MACD được cải thiện và tạo ra tín hiệu giao dịch bằng cách giao chéo với đường tín hiệu, đồng thời hiển thị trực quan cường độ xu hướng, tư duy tổng thể rõ ràng, 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 ứng với tình trạng xung đột, thiếu các biện pháp kiểm soát rủi ro.
/*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")