
La estrategia combina tres indicadores técnicos diferentes, utiliza un sistema de doble línea uniforme para generar señales de negociación y utiliza el color y la entidad de la línea K como condiciones de filtrado adicionales, para construir una estrategia de negociación de línea corta más estable y efectiva.
Toda la estrategia utiliza una combinación de bandas de Brin y canales de KC para identificar las fases de compresión y expansión del mercado. En concreto, cuando la banda de Brin está dentro del canal de KC se considera compresión y cuando la banda de Brin atraviesa el canal de KC se considera expansión. La compresión representa la posibilidad de un aumento de la oscilación y una reversión de la tendencia, en la que se utiliza la regresión lineal como principal indicador de señales de negociación.
Si el histograma de regresión lineal es positivo, representando una tendencia ascendente, y la barra es la línea K roja, representando la recesión negativa de la barra, y la entidad de la línea K es mayor que el 1⁄3 de la media de las entidades de las últimas 30 líneas de K, esta combinación de señales es más; por el contrario, si el histograma de regresión lineal es negativo, la barra es la línea K verde, y la entidad también es más grande, entonces se vacía.
La estrategia proporciona al mismo tiempo un contexto de compresión y expansión visibles para ayudar a juzgar las etapas del mercado.
Se puede reducir el riesgo mediante ajustes en los parámetros indicadores y la optimización de las condiciones de filtración.
La estrategia puede ser optimizada en los siguientes aspectos:
Esta estrategia integra varios indicadores, aumenta las condiciones de filtración al mismo tiempo que identifica las oportunidades de compresión, formando una estrategia de línea corta más sólida y eficiente. A través de la optimización de los parámetros y las condiciones de filtración, se obtienen mejores resultados. Además, el marco de la estrategia es flexible y fácil de adaptar para su uso en diferentes variedades, lo que merece ser probado y optimizado aún 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)