Estrategia de compresión de doble promedio móvil de impulso

El autor:¿ Qué pasa?, Fecha: 2023-12-25 17:01:28
Las etiquetas:

img

Resumen general

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.

Estrategia lógica

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.

Análisis de ventajas

  • El uso de múltiples indicadores para la combinación puede filtrar eficazmente las señales falsas
  • La compresión representa puntos de reversión potenciales y mejora el rendimiento de la estrategia
  • El filtro corporal evita ser engañado por pequeñas ondas de falsos brotes
  • Fácil de obtener mejores resultados mediante la optimización de parámetros

Análisis de riesgos

  • La regresión lineal puede emitir fácilmente señales erróneas, lo que puede conducir a pérdidas
  • El efecto de las bandas de Bollinger y los canales KC para juzgar la compresión no es ideal.
  • Los criterios de filtración son demasiado severos, posiblemente faltan mejores puntos de entrada
  • Las reducciones pueden ser mayores, deben soportar un cierto grado de tolerancia.

Los riesgos pueden reducirse ajustando los parámetros de los indicadores, optimizando los criterios de filtrado, etc.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Pruebe diferentes combinaciones de parámetros y longitudes para encontrar los parámetros óptimos
  2. Aumentar o disminuir las condiciones de filtración para encontrar el nivel óptimo de filtración
  3. Utilice métodos de aprendizaje automático para encontrar automáticamente parámetros óptimos
  4. Efectos de ensayo en variedades específicas y ajuste de parámetros según las diferentes variedades
  5. Añadir estrategia de stop loss para controlar pérdidas individuales

Conclusión

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)

Más.