이 전략은 SMMA, SMA, ZLEMA 및 EMA를 포함한 여러 이동평균 지표를 사용하며, 이를 기반으로 개선된 MACD 지표 (Impulse MACD) 를 구축하여 Impulse MACD와 신호 라인의 교차를 통해 거래 신호를 생성합니다. 이 전략의 주요 아이디어는 다른 시간 스케일의 이동평균을 사용하여 시장 추세를 캡처하고, 동시에 Impulse MACD를 사용하여 동향의 강도와 방향을 확인하는 것입니다.
이 전략은 여러 종류의 이동평균을 기반으로 한 개선된 MACD 지표를 구축하고 신호선과 교차하여 거래 신호를 생성하여 추세 강도를 직관적으로 표시하고 전체적인 생각의 명확성과 장점을 명확하게 나타냅니다. 그러나 이 전략에는 불안한 시장에 대한 적응 부족, 바람 통제 조치의 부족 등과 같은 한계도 있습니다. 추세 판단, 신호 확인, 위험 통제, 매개 변수 최적화 등 측면에서 전략을 추가적으로 개선하는 것이 고려될 수 있으며 전략의 안정성과 수익성을 향상시킬 수 있습니다.
/*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")