Esta estrategia es una estrategia de seguimiento de tendencias y ruptura basada en el indicador de bandas recursivas desarrollado por alexgrover.
El indicador de bandas recursivas consta de una banda superior, una banda inferior y una línea media.
Bandas superiores = Max ((Bar anterior
Aquí n es un coeficiente de escala, y la volatilidad se puede elegir entre ATR, desviación estándar, rango verdadero medio o un método especial de RFV. El parámetro de longitud controla la sensibilidad, los valores más grandes hacen que el indicador se active con menos frecuencia.
La estrategia comprueba primero si la banda inferior y la banda superior están en tendencia en la misma dirección para evitar fallas.
Cuando el precio se rompe por debajo de la banda inferior, ir largo. Cuando el precio se rompe por encima de la banda superior, ir corto.
Además, se implementa la lógica de stop loss.
Las ventajas de esta estrategia son:
También hay algunos riesgos con esta estrategia:
Estos riesgos se pueden gestionar mediante la optimización de parámetros, la aplicación de stop loss, el aumento del umbral de deslizamiento, etc.
Algunas direcciones para optimizar la estrategia:
En resumen, esta es una estrategia de seguimiento de tendencias muy práctica y eficiente. Combina el marco recursivo para la eficiencia computacional, utiliza soporte/resistencia de tendencia para determinar tendencias principales, agrega condiciones de impulso para filtrar fallas y garantizar la calidad de la señal. Con el ajuste adecuado de parámetros y el control de riesgos, puede lograr buenos resultados. Merece más investigación y optimización para adaptarse a regímenes de mercado más complejos.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=5 // Original indicator by alexgrover strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000) length = input.int(260, step=10, title='Length') src = input(close, title='Source') method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method') bandDirectionCheck = input.bool(true, title='Bands Hold Direction') lookback = input(3) //---- atr = ta.atr(length) stdev = ta.stdev(src, length) ahlr = ta.sma(high - low, length) rfv = 0. rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1] //----- f(a, b, c) => method == a ? b : c v(x) => f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x)))) //---- sc = 2 / (length + 1) a = 0. a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src))) b = 0. b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src))) c = (a+b)/2 // Colors beColor = #675F76 buColor = #a472ff // Plots pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band') pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band') pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band') fill(pC, pA, color=color.new(beColor,90)) fill(pC, pB, color=color.new(buColor,90)) // Band keeping direction // By Adulari longc = 0 shortc = 0 for i = 0 to lookback-1 if b[i] > b[i+1] longc:=longc+1 if a[i] < a[i+1] shortc:=shortc+1 bhdLong = if bandDirectionCheck longc==lookback else true bhdShort = if bandDirectionCheck shortc==lookback else true // Strategy if b>=low and bhdLong strategy.entry(id='Long',direction=strategy.long) if high>=a and bhdShort strategy.entry(id='Short',direction=strategy.short) // TP at middle line //if low<=c and strategy.position_size<0 and strategy.position_avg_price>close //strategy.exit(id="Short",limit=close) //if high>=c and strategy.position_size>0 and strategy.position_avg_price<close //strategy.exit(id="Long",limit=close)