Esta estrategia combina las bandas de Bollinger y el indicador del índice de fuerza relativa (RSI) para predecir la volatilidad de los precios y determinar los puntos de entrada óptimos. La lógica es sencilla: observamos los precios de cierre que tocan la banda inferior de Bollinger, después de lo cual hay dos escenarios posibles: o bien el precio rebota de nuevo desde la banda inferior de Bollinger, o continúa cayendo. Para confirmar el movimiento del precio, usamos un segundo indicador, el RSI, para investigar más la tendencia. Por ejemplo, si el precio alcanza la banda inferior de Bollinger pero el valor del RSI no está en territorio de sobreventa, podemos concluir que el precio continuará bajando. Si el valor del RSI está sobreventa, podemos usar esta área como nuestro punto de entrada.
Un stop loss es necesario para evitar la pérdida de demasiado capital si el RSI permanece demasiado tiempo en territorio de sobreventa.
El mejor área de toma de ganancias es cuando el precio se rebota por encima de la banda media/banda superior de Bollinger o cuando el RSI alcanza niveles de sobrecompra, lo que ocurra primero.
Entrada larga:
RSI < 30 y precio de cierre < banda inferior de Bollinger
Salida larga:
Indicador de rentabilidad
La estrategia primero calcula el indicador RSI y establece los límites superior/inferior para determinar los niveles de sobrecompra/sobreventa. Luego calcula las bandas media, superior e inferior de Bollinger. Cuando el precio de cierre toca la banda inferior y el RSI está por debajo de 30, vaya largo. Cuando el RSI está por encima de 70, cierre la posición.
Cuando se ingresa a largo plazo, se establecen puntos de stop loss y take profit.
Esto nos permite comprar en la banda inferior de Bollinger cuando el RSI es bajo y vender cuando el RSI es alto, ganando de la reversión.
Los riesgos pueden mitigarse ajustando los parámetros de Bollinger, utilizando otros indicadores y ampliando el stop loss de manera adecuada.
El perfil general de riesgo/recompensación de esta estrategia es equilibrado y los resultados de backtest son buenos. Se pueden realizar mejoras adicionales a través de la optimización de parámetros y mejoras de indicadores.
[/trans] ¿Qué quieres decir?
/*backtest start: 2023-09-10 00:00:00 end: 2023-09-17 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //strategy(title="Bollinger Band with RSI", shorttitle="BB&RSI", format=format.price, precision=2, pyramiding=50, initial_capital=10000, calc_on_order_fills=false, calc_on_every_tick=true, default_qty_type=strategy.cash, default_qty_value=1000, currency="USD") len = input(14, minval=1, title="Length") src = input(close, "Source", type = input.source) up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) plot(rsi, "RSI", color=#8E1599) band1 = hline(70, "Upper Band", color=#C0C0C0) band0 = hline(30, "Lower Band", color=#C0C0C0) fill(band1, band0, color=#9915FF, transp=90, title="Background") length_bb = input(20,title="BB Length", minval=1) mult = input(2.0, minval=0.001, maxval=50, title="BB StdDev") basis = sma(src, length_bb) dev = mult * stdev(src, length_bb) upper = basis + dev lower = basis - dev offset = input(0, "BB Offset", type = input.integer, minval = -500, maxval = 500) Plot_PnL = input(title="Plot Cummulative PnL", type=input.bool, defval=false) Plot_Pos = input(title="Plot Current Position Size", type=input.bool, defval=false) long_tp_inp = input(10, title='Long Take Profit %', step=0.1)/100 long_sl_inp = input(25, title='Long Stop Loss %', step=0.1)/100 // Take profit/stop loss long_take_level = strategy.position_avg_price * (1 + long_tp_inp) long_stop_level = strategy.position_avg_price * (1 - long_sl_inp) entry_long = rsi < 30 and src < lower exit_long = rsi > 70 plotshape(entry_long, style=shape.labelup, color=color.green, location=location.bottom, text="L", textcolor=color.white, title="LONG_ORDER") plotshape(exit_long, style=shape.labeldown, color=color.red, location=location.top, text="S", textcolor=color.white, title="SHORT_ORDER") strategy.entry("Long",true,when=entry_long) strategy.exit("TP/SL","Long", limit=long_take_level, stop=long_stop_level) strategy.close("Long", when=exit_long, comment="Exit") plot(Plot_PnL ? strategy.equity-strategy.initial_capital : na, title="PnL", color=color.red) plot(Plot_Pos ? strategy.position_size : na, title="open_position", color=color.fuchsia)