Esta estrategia combina tres indicadores técnicos diferentes y genera señales de negociación utilizando un sistema de media móvil dual, con filtros adicionales basados en el color y el cuerpo de los candelabros, para construir una estrategia comercial relativamente estable y efectiva a corto plazo.
La estrategia utiliza Bandas de Bollinger y canales de KC en combinación para identificar las fases de compresión y expansión en el mercado. Específicamente, cuando las Bandas de Bollinger están dentro del canal de KC, se considera compresión; cuando las Bandas de Bollinger rompen el canal de KC, se considera expansión. La compresión representa una volatilidad intensificada y una posible inversión de tendencia, y la regresión lineal se utiliza como el indicador principal de señal de negociación en este momento.
Si el histograma de regresión lineal es positivo (representando una tendencia al alza) y la barra es un candelero rojo (representando un cierre inferior), al mismo tiempo que el cuerpo de la vela es más grande que 1/3 del cuerpo promedio de las 30 velas pasadas, dicha señal de combinación va larga.
La estrategia también proporciona una visualización del contexto de compresión y expansión para ayudar a juzgar la etapa del mercado.
Los riesgos pueden reducirse ajustando los parámetros de los indicadores, optimizando los criterios de filtrado, etc.
La estrategia se puede optimizar en los siguientes aspectos:
Esta estrategia combina múltiples indicadores, al tiempo que identifica oportunidades de compresión, aumenta las condiciones de filtrado para formar una estrategia relativamente robusta y eficiente a corto plazo. A través del parámetro y la optimización de las condiciones de filtrado, se pueden obtener mejores resultados. Además, el marco de la estrategia es flexible y fácil de ajustar para su uso en diferentes variedades, vale la pena probar y optimizar más.
/*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)