Estrategia de ruptura de choque de tendencia unilateral

El autor:¿ Qué pasa?, Fecha: 2024-01-18 14:59:30
Las etiquetas:

img

Resumen general

La estrategia de ruptura de choque de tendencia de lado único es una estrategia de ruptura que utiliza los canales de precios y el juicio de tendencia.

Estrategia lógica

La estrategia calcula las bandas superiores e inferiores de un canal de precios utilizando los precios más altos y más bajos durante N períodos recientes. Luego calcula una línea media de precios. Las distancias entre los precios y la línea media se promedian para obtener las bandas de canal.

Para la detección de tendencias, la estrategia comprueba si las velas recientes se cierran por encima (bullish) o por debajo (bearish) del canal.

Las rupturas corporales complementan las señales de entrada cuando la longitud corporal excede un múltiplo de la longitud corporal promedio.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. Los filtros de canal de precios reducen los riesgos de ruptura falsa
  2. Las entradas invertidas se benefician de los shocks de tendencia
  3. Las escapadas del cuerpo mejoran la precisión de entrada.
  4. Objetivo de ganancias permite tomar ganancias activamente

Análisis de riesgos

También hay algunos riesgos:

  1. Un parámetro de canal incorrecto puede ampliar o estrechar excesivamente el canal
  2. Las inversiones en contra de las tendencias fuertes pueden conducir a grandes pérdidas
  3. Los brotes corporales tienden a generar señales falsas en las partes superiores.
  4. Un objetivo de ganancias rígido puede dejar ganancias en la mesa.

Estos pueden abordarse a través del ajuste de parámetros, evitando reversiones durante tendencias fuertes, optimizando la lógica de salida, etc.

Oportunidades de mejora

Algunas maneras de mejorar la estrategia:

  1. Añadir indicadores de tendencia para confirmar las tendencias
  2. Optimizar los parámetros de escape del cuerpo para reducir las señales falsas
  3. Filtros adicionales para el tiempo de entrada
  4. Ajuste dinámico del objetivo de beneficio

Conclusión

La estrategia de ruptura de choque de tendencia de lado único obtiene ganancias de las rupturas contra la tendencia en períodos variados. Tiene la ventaja de la identificación de tendencias y la obtención activa de ganancias, pero también tiene algunos riesgos. Estos riesgos pueden reducirse a través de la confirmación de múltiples factores, optimización de parámetros, etc. La estrategia se adapta al comercio a corto plazo y puede complementar las estrategias de seguimiento de tendencias.


/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Scalper Strategy v1.5", shorttitle = "Scalper str 1.5", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]

//trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)

Más.