
이 전략은 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")