La stratégie utilise plusieurs indicateurs de moyenne mobile, y compris SMMA, SMA, ZLEMA et EMA, et construit un indicateur MACD amélioré (Impulse MACD) basé sur eux pour générer des signaux de négociation via l'intersection de l'Impulse MACD avec sa ligne de signal. L'idée principale de la stratégie est de capturer les tendances du marché en utilisant des moyennes mobiles de différentes échelles de temps, tout en utilisant l'Impulse MACD pour confirmer l'intensité et la direction de la tendance.
La stratégie est basée sur plusieurs types de moyennes mobiles pour construire des indicateurs MACD améliorés et générer des signaux commerciaux en les croisant avec des lignes de signaux, tout en présentant de manière intuitive l'intensité de la tendance, la clarté de l'idée globale et les avantages évidents. Cependant, la stratégie présente également certaines limites, telles qu'une mauvaise adaptabilité aux marchés bouillonnants, un manque de mesures de contrôle des vents, etc. Des améliorations supplémentaires de la stratégie peuvent être envisagées pour améliorer la robustesse et la rentabilité de la stratégie, notamment en ce qui concerne l'appréciation des tendances, la confirmation des signaux, le contrôle des risques, l'optimisation des paramètres.
/*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")