Esta estrategia se basa en el indicador SuperB creado por Rafael Zioni, que identifica las tendencias a través de indicadores de impulso y rastrea automáticamente las tendencias ascendentes y descendentes, pertenecientes a la estrategia de tendencia siguiente.
La estrategia utiliza el indicador SuperB creado por RafaelZioni para identificar tendencias de precios. El indicador SuperB se basa en el rango de fluctuación de precios, el volumen de negociación y la diferencia de precios entre los precios de apertura y cierre para calcular el indicador SpreadVol. El indicador SpreadVol refleja las características de impulso de los precios.
La estrategia juzga las inversiones de tendencia en tiempo real mediante el seguimiento de precios altos y bajos. En una tendencia al alza, se continúan haciendo nuevos máximos, lo que indica un aumento sostenido. Cuando el precio se rompe por debajo del precio máximo por un cierto porcentaje, se convierte en una tendencia a la baja. El método de juicio es similar en una tendencia a la baja. Esto permite juicios oportunos de los puntos de inversión de tendencia.
La estrategia combina indicadores de impulso para determinar la dirección de la tendencia, y luego rastrea los precios más altos y más bajos en tiempo real, lo que puede identificar rápidamente nuevas direcciones de tendencia y rastrear automáticamente las tendencias alcistas y descendentes, evitando los riesgos de perder puntos de compra y puntos de sobrecompra.
El indicador SuperB de RafaelZioni refleja la fuerza y la velocidad de los cambios de precios y puede determinar con precisión las tendencias verdaderas, filtrando eficazmente las fallas.
Solo realiza posiciones largas para reducir los costes de negociación y las pérdidas por deslizamiento causadas por operaciones frecuentes.
La estrategia es propensa a múltiples operaciones falsas en el área de consolidación antes de la ruptura. Los parámetros pueden optimizarse para reducir la sensibilidad a las áreas de consolidación.
La línea de stop loss es propensa a activarse durante los shocks de tendencia.
Cuando se cambia entre largo y corto, las posiciones deben cambiarse de manera oportuna.
Optimizar los parámetros del indicador SuperB para encontrar mejores combinaciones de parámetros y mejorar la estabilidad del indicador.
Optimizar el factor de relación de seguimiento de los precios más altos y más bajos para reducir la sensibilidad a las áreas de consolidación.
Aumentar los criterios de tiempo de retención para evitar que se detenga durante los shocks de tendencia.
Esta estrategia utiliza el indicador SuperB desarrollado por RafaelZioni para determinar la dirección de la tendencia de precios, y juzga las reversiones de tendencia mediante el seguimiento de precios altos y bajos en tiempo real, realizando un seguimiento automático de las tendencias alcistas y descendentes, evitando puntos de compra perdidos y riesgos de sobrecompra. Pertenece a una estrategia de impulso con características de tendencia. Esta estrategia combina indicadores de impulso para determinar las tendencias verdaderas con reglas simples y claras. Puede mejorarse y optimizarse aún más de acuerdo con las sugerencias de optimización y vale la pena investigar y aplicar.
/*backtest start: 2023-01-01 00:00:00 end: 2023-08-19 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(shorttitle='SuperB', title='SuperB By RafaelZioni', overlay=true) long_only = input(title="Only Long?", defval=true) hilow = ((high - low)*100) openclose = ((close - open)*100) vol = (volume / hilow) spreadvol = (openclose * vol) VPT = spreadvol + cum(spreadvol) window_len = 28 v_len = 14 price_spread = stdev(high-low, window_len) vp = spreadvol + cum(spreadvol) smooth = sma(vp, v_len) v_spread = stdev(vp - smooth, window_len) shadow = (vp - smooth) / v_spread * price_spread out = shadow > 0 ? high + shadow : low + shadow // len = input(10) vpt=ema(out,len) // INPUTS // st_mult = input(1, title = ' Multiplier', minval = 0, maxval = 100, step = 0.01) st_period = input(10, title = ' Period', minval = 1) // CALCULATIONS // up= vpt - (st_mult * atr(st_period)) dn = vpt + (st_mult * atr(st_period)) c5=close // factor = input(title="Factor", defval=0.05, minval=0.01, maxval=5, step=0.01, type=input.float) hb = 0.00 ,hb := nz(hb[1]) hl = 0.000, hl := nz(hl[1]) lb = 0.00 ,lb := nz(lb[1]) l1 = 0.000,l1 := nz(l1[1]) c = 0 c := nz(c[1]) + 1 trend = 0,trend := nz(trend[1]),n = dn,x =up if barstate.isfirst c := 0 lb := n hb := x l1 := c5 hl := c5 hl if c == 1 if x >= hb[1] hb := x hl := c5 trend := 1 trend else lb := n l1 := c5 trend := -1 trend if c > 1 if trend[1] > 0 hl := max(hl[1], c5) if x >= hb[1] hb := x hb else if n < hb[1] - hb[1] * factor lb := n l1 := c5 trend := -1 trend else l1 := min(l1[1], c5 ) if n <= lb[1] lb := n lb else if x > lb[1] + lb[1] * factor hb := x hl := c5 trend := 1 trend v = trend == 1 ? hb : trend == -1 ? lb : na plot(v, color=trend == 1 ? color.blue : color.yellow, style=plot.style_circles, linewidth=1, title="trend", transp=0, join=true) // long = trend == 1 and trend[1] == -1 short = trend == -1 and trend[1] == 1 // last_long = 0.0 last_short = 0.0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) buy = crossover(last_long, last_short) sell = crossover(last_short, last_long) /////////////// Positions ////////////// if long strategy.entry("Buy", long=true) if long_only == false strategy.close("Sell") if short if long_only == false strategy.entry("Sell", long=false) strategy.close("Buy") /////////////// Plotting /////////////// plotshape(buy, title="buy", text="Buy", color=color.green, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0) //plot for buy icon plotshape(sell, title="sell", text="Sell", color=color.red, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0) /////////////// Alerts /////////////// alertcondition(buy, title='buy', message='Buy') alertcondition(sell, title='sell', message='Sell')