Estrategia de ruptura de tendencia unilateral


Fecha de creación: 2024-01-18 14:59:30 Última modificación: 2024-01-18 14:59:30
Copiar: 1 Número de Visitas: 614
1
Seguir
1617
Seguidores

Estrategia de ruptura de tendencia unilateral

Descripción general

La estrategia de ruptura de choque de tendencia de un solo lado es una estrategia de ruptura que utiliza el canal de precios y el juicio de la tendencia. Su objetivo es identificar la dirección de la tendencia, entrar en la zona de choque y salir después de alcanzar el objetivo de ganancias establecido.

Principio de estrategia

La estrategia opera calculando la trayectoria ascendente y descendente del canal de precios para determinar si el precio ha roto el canal. En concreto, la estrategia primero calcula los precios más altos y más bajos del ciclo N más reciente y calcula la línea media del precio. Luego calcula la distancia media absoluta del precio a la línea media y obtiene la trayectoria ascendente y descendente.

Cuando se determina una tendencia, la estrategia verifica si las líneas K más recientes están todas cerradas por encima de la vía (señales de múltiples cabezas) o por debajo de la vía (señales de cabezas vacías). Cuando se determina una tendencia, la estrategia espera que los precios oscilen, se forma una señal de ruptura cerca de la vía superior o inferior, y se entra en la vía de entrada inversa.

Además, la estrategia también juzga la ruptura de la entidad de la línea K como una señal de entrada complementaria. La estrategia establece un objetivo de ganancias después de la entrada y se detiene activamente cuando el precio alcanza el objetivo.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. El uso de los canales de precios para determinar la dirección de la tendencia puede reducir la probabilidad de falsos reveses
  2. La entrada inversa puede generar ganancias cuando la tendencia cambia
  3. La ruptura de la entidad como señal complementaria para mejorar la precisión de entrada
  4. Configuración de objetivos de frenado para que el frenado sea automático

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. Parámetros de canal de precios mal configurados que pueden causar un canal demasiado grande o demasiado pequeño
  2. La inversión en una tendencia fuerte puede causar grandes pérdidas
  3. La brecha de entidades puede dar lugar a falsas señales.
  4. El parón está mal configurado y puede perder parte de sus ganancias

Para reducir el riesgo, se pueden ajustar los parámetros para reducir el rango de los canales, evitar la inversión de la posición en una tendencia fuerte, optimizar la lógica de parada, etc.

Dirección de optimización

La estrategia también puede ser optimizada en las siguientes direcciones:

  1. Aumentar los indicadores de tendencia para asegurar la precisión de la tendencia
  2. Optimización de los parámetros de ruptura de la entidad para reducir la tasa de señales falsas de cabeza
  3. El tiempo de entrada combinado con más indicadores filtrados
  4. Ajuste dinámico de la posición de la parada

Resumir

La estrategia unilateral de ruptura de la tendencia de la oscilación a través del canal de precios y la tendencia de juicio, el método de invertir la construcción de la posición en la zona de oscilación de beneficio. Tiene la tendencia de juicio, la detención de la iniciativa de ventajas, pero también existe un cierto riesgo. Mediante la confirmación de varios indicadores, la optimización de los parámetros y otros medios para reducir el riesgo de aumentar la ganancia espacio.

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