
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.
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.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
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.
La estrategia también puede ser optimizada en las siguientes direcciones:
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.
/*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)