Cette stratégie combine trois indicateurs techniques différents et génère des signaux de négociation en utilisant un double système de moyenne mobile, avec des filtres supplémentaires basés sur la couleur et le corps des chandeliers, pour construire une stratégie de négociation à court terme relativement stable et efficace.
La stratégie utilise des bandes de Bollinger et des canaux KC en combinaison pour identifier les phases de compression et d'expansion sur le marché. Plus précisément, lorsque les bandes de Bollinger sont à l'intérieur du canal KC, cela est considéré comme une compression; lorsque les bandes de Bollinger traversent le canal KC, cela est considéré comme une expansion. La compression représente une volatilité accrue et un éventuel renversement de tendance, et la régression linéaire est utilisée comme indicateur principal de signal de trading à ce moment-là.
Si l'histogramme de régression linéaire est positif (représentant une tendance à la hausse) et que la barre est un chandelier rouge (représentant une fermeture inférieure), en même temps que le corps du chandelier est plus grand que 1/3 du corps moyen des 30 derniers chandeliers, un tel signal de combinaison va long.
La stratégie fournit également une visualisation de l'arrière-plan de compression et d'expansion pour aider à juger de la phase du marché.
Les risques peuvent être réduits en ajustant les paramètres des indicateurs, en optimisant les critères de filtrage, etc.
La stratégie peut être optimisée dans les aspects suivants:
Cette stratégie combine plusieurs indicateurs, tout en identifiant les opportunités de compression, elle augmente les conditions de filtrage pour former une stratégie à court terme relativement robuste et efficace.
/*backtest start: 2023-11-24 00:00:00 end: 2023-12-24 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2017 //@version=2 strategy(shorttitle = "Squeeze str 1.0", title="Noro's Squeeze Momentum Strategy v1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") length = input(20, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = true usecolor = input(true, defval = true, title = "Use color of candle") usebody = input(true, defval = true, title = "Use EMA Body") needbg = input(false, defval = false, title = "Show trend background") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") // Calculate BB source = close basis = sma(source, length) dev = multKC * stdev(source, length) upperBB = basis + dev lowerBB = basis - dev // Calculate KC ma = sma(source, lengthKC) range = useTrueRange ? tr : (high - low) rangema = sma(range, lengthKC) upperKC = ma + rangema * multKC lowerKC = ma - rangema * multKC sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC) sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC) noSqz = (sqzOn == false) and (sqzOff == false) val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0) bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon)) scolor = noSqz ? blue : sqzOn ? black : gray trend = val > 0 ? 1 : val < 0 ? -1 : 0 //Background col = needbg == false ? na : trend == 1 ? lime : red bgcolor(col, transp = 80) //EMA Body body = abs(close - open) emabody = ema(body, 30) / 3 //Signals bar = close > open ? 1 : close < open ? -1 : 0 up = trend == 1 and (bar == -1 or usecolor == false) and (body > emabody or usebody == false) dn = trend == -1 and (bar == 1 or usecolor == false) and (body > emabody or usebody == false) if up strategy.entry("Long", strategy.long) if dn strategy.entry("Short", strategy.short)