
La estrategia es una estrategia de seguimiento de tendencias y rupturas basada en el indicador de bandas recursivas desarrollado por alexgrover. La estrategia utiliza los indicadores de bandas recursivas para determinar tendencias de precios y resistencias de soporte clave, combinadas con condiciones de impulso para filtrar falsas rupturas y lograr entradas de baja frecuencia pero de alta calidad.
El indicador de la banda recursiva está compuesto por la banda superior, la banda inferior y la línea media. El indicador se calcula de la siguiente manera:
Bandeja superior = valor máximo ((Bandeja superior de la primera línea K, precio de cierre + n*La tasa de fluctuación
Bandas inferiores = mínimos de las bandas inferiores de la primera línea K, precio de cierre - n*La tasa de fluctuación
La línea media es igual a (la banda superior + la banda inferior) / 2
Donde n es un coeficiente de escala, la oscilación puede elegir ATR, diferencia estándar, canal promedio y un método RFV especial. La sensibilidad del indicador está controlada por los parámetros de longitud, y cuanto mayor sea el valor, menos fácilmente se puede disparar.
La estrategia primero detecta si la banda inferior continúa subiendo y la banda superior continúa bajando para eliminar falsas rupturas.
Cuando el precio cae por debajo de la banda inferior, haz más; cuando el precio supera la banda superior, haz menos.
Además, la estrategia tiene una lógica de stop loss.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
Estos riesgos se pueden controlar mediante la optimización de los parámetros, el establecimiento de un stop loss y el aumento de los puntos de deslizamiento.
La estrategia también puede ser optimizada en las siguientes direcciones:
La estrategia en general es una estrategia de seguimiento de tendencias muy práctica y eficiente. Se combina con el ahorro de recursos de computación en el marco recursivo, la aplicación de la resistencia de soporte de tendencia para determinar la dirección de la tendencia principal, el aumento de la filtración de las condiciones de movimiento de las brechas falsas, lo que garantiza la calidad de la señal de negociación.
/*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)