
La estrategia utiliza varios indicadores de promedios móviles, incluidos SMMA, SMA, ZLEMA y EMA, y construye un indicador MACD mejorado basado en ellos (Impulse MACD) para generar señales de negociación a través del cruce de Impulse MACD con su línea de señal. La idea principal de la estrategia es usar promedios móviles en diferentes escalas de tiempo para capturar tendencias en el mercado, mientras se usa Impulse MACD para confirmar la fuerza y la dirección de las tendencias.
La estrategia se basa en varios tipos de promedios móviles, construye un indicador MACD mejorado y genera una señal de negociación mediante su cruce con la línea de señal, al mismo tiempo que muestra visualmente la fuerza de la tendencia, la claridad de la idea general y la ventaja evidente. Sin embargo, la estrategia también tiene ciertas limitaciones, como la falta de adaptabilidad a las situaciones de crisis, la falta de medidas de control de riesgos, etc. La estrategia puede mejorarse aún más teniendo en cuenta el juicio de tendencias, la confirmación de señales, el control de riesgos y la optimización de parámetros para mejorar la estabilidad y la rentabilidad de la estrategia.
/*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")