Estrategia Martingala de impulso con media móvil doble


Fecha de creación: 2023-12-25 17:01:28 Última modificación: 2023-12-25 17:01:28
Copiar: 0 Número de Visitas: 564
1
Seguir
1623
Seguidores

Estrategia Martingala de impulso con media móvil doble

Descripción general

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.

Principio de estrategia

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 13 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.

Análisis de las ventajas estratégicas

  • El uso de varios indicadores en combinación puede filtrar de manera eficaz las falsas señales
  • La compresión representa un posible punto de inflexión para aumentar la efectividad de la estrategia
  • El filtro de entidad evita ser engañado por falsas rupturas de bandas pequeñas
  • Fácil de obtener mejores resultados mediante optimización de parámetros

Análisis de riesgos estratégicos

  • La regresión lineal es propensa a emitir señales erróneas que pueden causar pérdidas
  • Los resultados de la compresión en la banda de Brin y en el canal KC no son óptimos.
  • Las condiciones de filtración son demasiado rigurosas y pueden perderse mejores puntos de entrada.
  • El retiro podría ser mayor y requeriría un cierto grado de tolerancia.

Se puede reducir el riesgo mediante ajustes en los parámetros indicadores y la optimización de las condiciones de filtración.

Dirección de optimización de la estrategia

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Intentar diferentes combinaciones y longitudes de parámetros para encontrar el mejor
  2. Aumentar o disminuir las condiciones de filtración para encontrar el nivel óptimo de filtración
  3. La búsqueda automática de los parámetros óptimos mediante métodos de aprendizaje automático
  4. Efectos de las pruebas en variedades específicas, ajuste de parámetros según las diferentes variedades
  5. Aumentar las estrategias de stop loss para controlar las pérdidas individuales

Resumir

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.

Código Fuente de la Estrategia
/*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)