Cette stratégie est basée sur l'indicateur de dynamique de compression de LazyBear
La stratégie utilise les bandes de Bollinger et les canaux de Keltner pour calculer les canaux de prix. Les ruptures signalent une volatilité accrue.
La stratégie ajoute des filtres d'élan, ne négociant que lorsque l'élan absolu dépasse un seuil. Lors de la compression de la volatilité (resserrement des canaux) avec le filtrage d'élan passé, elle juge la direction de la tendance pour long/short. Elle définit également un stop loss, un take profit et un trailing stop pour contrôler les risques.
La stratégie intègre plusieurs indicateurs pour un jugement complet. Elle limite les pertes par transaction avec des mécanismes de gestion des risques. Elle peut juger en temps opportun des tendances des prix post-compression. Des paramètres personnalisables la rendent adaptable.
Les principaux risques comprennent: les fausses ruptures provoquant des jugements erronés; l'incapacité de revenir en arrière à temps avec des paramètres incorrects; les violations de stop loss augmentant les pertes.
Envisagez de combiner d'autres filtres d'indicateurs tels que le volume; affiner le seuil de momentum pour une plus grande précision; ajouter un arrêt de perte de retrait pour un contrôle plus strict des risques; tester l'efficacité sur plus de produits.
La stratégie évalue les tendances des prix et la volatilité de manière relativement complète, avec un degré d'intégration élevé et des mesures de contrôle des risques améliorées.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // Strategy based on LazyBear Squeeze Momentum Indicator // © Bitduke // All scripts: https://www.tradingview.com/u/Bitduke/#published-scripts strategy(shorttitle="SMS", title="Squeeze Momentum Strategy", overlay=false ) length = input(12, title="BB Length") mult = input(2.0, title="BB MultFactor") lengthKC = input(16, title="KC Length") mult_kc = input(1.5, title="KC MultFactor") //FILTERS useMomAverage = input(false, title="Filter for Momenutum value", type=input.bool) MomentumMin = input(20, title="Min for momentum") // Calculate BB src = ohlc4 ma_1 = sma(src, length) ma_2 = sma(src, lengthKC) range_ma = sma(high - low, lengthKC) dev = mult * stdev(src, length) upper_bb = ma_1 + dev lower_bb = ma_1 - dev upper_kc = ma_2 + range_ma * mult_kc lower_kc = ma_2 - range_ma * mult_kc sqz_on = lower_bb > lower_kc and upper_bb < upper_kc sqz_off = lower_bb < lower_kc and upper_bb > upper_kc no_sqz = sqz_on == false and sqz_off == false val = linreg(src - avg(avg(highest(hl2, lengthKC), lowest(low, lengthKC)), sma(hl2, lengthKC)), lengthKC, 0) bcolor = iff(val > 0, iff(val > nz(val[1]), color.lime, color.green), iff(val < nz(val[1]), color.red, color.maroon)) scolor = no_sqz ? color.blue : sqz_on ? color.black : color.aqua plot(val, color=bcolor, style=plot.style_histogram, linewidth=4) plot(0, color=scolor, style=plot.style_cross, linewidth=2) //LOGIC //momentum filter filterMom = useMomAverage ? abs(val) > MomentumMin / 100000 ? true : false : true //standard condition longCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.lime and filterMom exitLongCondition = bcolor == color.green shortCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.red and filterMom exitShortCondition = bcolor == color.maroon // Risk Management Sysyem stop_loss = input(defval = 600, title="Stop Loss", minval = 0) take_profit = input(defval = 1000, title="Take Profit", minval = 0) trailing_stop = input(defval = 20, title="Trailing Stop", minval = 0) // If the zero value is set for stop loss, take profit or trailing stop, then the function is disabled s_loss = stop_loss >= 1 ? stop_loss : na tk_profit = take_profit >= 1 ? take_profit : na tr_stop = trailing_stop >= 1 ? trailing_stop : na //STRATEGY strategy.entry("SQ_Long", strategy.long, when=longCondition) strategy.exit("Exit Long", from_entry = "SQ_Long", profit = take_profit, trail_points = trailing_stop, loss = s_loss) strategy.close("SQ_Long", exitLongCondition) strategy.entry("SQ_Short", strategy.short, when=shortCondition) strategy.exit("Exit Short", from_entry = "SQ_Short", profit = take_profit, trail_points = trailing_stop, loss = s_loss ) strategy.close("SQ_Short", when=exitShortCondition)