La idea central de esta estrategia es combinar el índice de fuerza relativa (RSI) y las bandas de Bollinger, dos indicadores técnicos, para filtrar las señales comerciales duales y minimizar la interferencia de las señales falsas tanto como sea posible, mejorando la calidad de la señal.
Cuando el indicador RSI muestra señales de sobrecompra o sobreventa mientras el precio rompe o retira los rieles superior e inferior de las Bandas de Bollinger, surgirán oportunidades comerciales. Combina las ventajas de los dos indicadores diferentes, teniendo en cuenta tanto las características estadísticas de las fluctuaciones del mercado como la posición larga / corta de los participantes del mercado para formar una base integral para el juicio.
Para la parte del RSI, monitoreamos dos indicadores RSI con diferentes longitudes de ciclo al mismo tiempo. Uno con un ciclo más corto se utiliza para capturar señales de sobrecompra y sobreventa, mientras que otro con un ciclo más largo se utiliza para confirmar inversiones de tendencia. Cuando el RSI de ciclo corto muestra sobrecompra / sobreventa y el RSI de ciclo largo muestra reversión, creemos que se ha formado una oportunidad comercial.
Para la parte de las bandas de Bollinger, monitoreamos si el precio rompe los carriles superior e inferior. Romper el carriles superior de las bandas de Bollinger es el punto de venta, y romper el carriles inferior es el punto de compra. Al mismo tiempo, también monitoreamos si el precio vuelve a las bandas de Bollinger para que las oportunidades de inversión puedan capturarse de manera oportuna.
Cuando las señales RSI y Bollinger Bands aparecen simultáneamente, creemos que la oportunidad de negociación ha tomado forma y se emite una orden de negociación.
Los riesgos pueden evitarse y controlarse mediante la optimización de parámetros, la reducción adecuada de posiciones, la intervención manual, etc.
La estrategia dual de RSI y Bollinger Bands utiliza plenamente las fortalezas de los dos indicadores para generar señales de alta calidad. Con la optimización adecuada de los parámetros y la gestión de riesgos, puede lograr retornos de inversión constantes.
/*backtest start: 2023-11-11 00:00:00 end: 2023-12-04 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Ezieh Str.v2", shorttitle="Ezieh Str.v2", overlay=true, pyramiding=10, currency=currency.USD, slippage=3, commission_type=strategy.commission.cash_per_order, commission_value=0.04, initial_capital=1000) UseDateFilter = input(title="Enable Date Filter" ,type=input.bool ,defval=false ,group="Date & Time" ,tooltip="Turns on/off date filter") StartDate = input(title="Start Date Filter" ,type=input.time ,defval=timestamp("1 Jan 2000 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to start excluding trades") EndDate = input(title="End Date Filter" ,type=input.time ,defval=timestamp("1 Jan 2100 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to stop excluding trades") UseTimeFilter = input(title="Enable Time Session Filter" ,type=input.bool ,defval=false ,group="Date & Time" ,tooltip="Turns on/off time session filter") TradingSession = input(title="Trading Session" ,type=input.session ,defval="1000-2200:1234567" ,group="Date & Time" ,tooltip="No trades will be taken outside of this range") In(t) => na(time(timeframe.period, t)) == false TimeFilter = (UseTimeFilter and not In(TradingSession)) or not UseTimeFilter DateFilter = time >= StartDate and time <= EndDate DateTime = (UseDateFilter ? not DateFilter : true) and (UseTimeFilter ? In(TradingSession) : true) ///////////// RSI L_RSI_Length = input(7 , title="L_Length") L_RSI_OverSold = input(45 , title="L_OverSold") S_RSI_Length = input(14 , title="S_Length") S_RSI_OverBought = input(65 , title="S_OverBought") price = close Lvrsi = rsi(price, L_RSI_Length) Svrsi = rsi(price, S_RSI_Length) ///////////// Bollinger Bands BBlength = input(title="Bollinger Period Length", type=input.integer, defval=100, minval=2) BBmult = 2.1 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation") BBbasis = sma(price, BBlength) BBdev = BBmult * stdev(price, BBlength) BBupper = BBbasis + BBdev BBlower = BBbasis - BBdev source = close plot(BBbasis, color=color.aqua,title="Bollinger Bands SMA Basis Line") p1 = plot(BBupper, color=color.silver,title="Bollinger Bands Upper Line") p2 = plot(BBlower, color=color.silver,title="Bollinger Bands Lower Line") fill(p1, p2) ///////////// Colors switch1=input(true, title="Enable Bar Color?") switch2=input(true, title="Enable Background Color?") ///////////// Condition LongCondition = crossover(Lvrsi, L_RSI_OverSold) and crossover(close ,BBlower) ShortCondition = crossunder(Svrsi, S_RSI_OverBought) and crossunder(close,BBupper) Longexcon = crossunder(low, BBupper) Shortexcon = crossover(low, BBlower) qt = round(strategy.equity/price, 3) ///////////// RSI + Bollinger Bands Strategy if (not na(Lvrsi)) if LongCondition and DateTime strategy.entry("RSI_BB_L", strategy.long, qty=qt, comment="Long") else strategy.cancel(id="RSI_BB_L") if Longexcon strategy.close("RSI_BB_L", qty_percent = 100, comment = "L_exit") if ShortCondition and DateTime strategy.entry("RSI_BB_S", strategy.short, qty=qt, comment="Short") else strategy.cancel(id="RSI_BB_S") if Shortexcon strategy.close("RSI_BB_S", qty_percent = 100, comment = "S_exit") //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)