A estratégia de captura da volatilidade do RSI-Bollinger Band

Autora:ChaoZhang, Data: 12/01/2023 14:17:55
Tags:

img

Resumo

A estratégia de captura de volatilidade RSI-Bollinger Band é uma estratégia de negociação que integra os conceitos de Bollinger Bands (BB), Relative Strength Index (RSI) e Simple Moving Average (SMA) para gerar sinais de negociação.

Os mercados de criptomoedas e ações são altamente voláteis, tornando-os adequados para uma estratégia usando Bandas de Bollinger.

Como funciona

Banda de Bollinger Dinâmica: A estratégia primeiro calcula as Bandas de Bollinger superiores e inferiores com base no comprimento e multiplicador definidos pelo usuário. Em seguida, usa as Bandas de Bollinger e o preço de fechamento para ajustar dinamicamente o valor atual da Banda de Bolling. Finalmente, gera um sinal longo quando o preço atravessa a Banda de Bolling atual e um sinal curto quando o preço atravessa abaixo.

RSI: Se o usuário optar por usar o RSI para sinais, a estratégia também calcula o RSI e sua SMA e os usa para gerar sinais longos e curtos adicionais.

A estratégia então verifica a direção de negociação selecionada e entra em posições longas ou curtas, se for definida em Both, pode entrar em posições longas e curtas.

Por último, a estratégia sai de uma posição quando o preço de fechamento cruza abaixo/acima da actual banda de Bolling para posições longas/cortas, respectivamente.

Análise das vantagens

A estratégia combina os pontos fortes das bandas de Bollinger, do RSI e do SMA para se adaptar à volatilidade do mercado, captar dinamicamente as flutuações e gerar sinais de negociação em níveis de sobrecompra/supervenda.

O RSI complementa os sinais de Bollinger, evitando entradas falsas em mercados variáveis.

Os parâmetros personalizáveis permitem ajustar as preferências individuais de risco.

Análise de riscos

A estratégia baseia-se em indicadores técnicos e não pode prever grandes reversões fundamentalmente orientadas.

As configurações incorretas dos parâmetros de Bollinger podem gerar sinais demasiado frequentes ou demasiado escassos.

O comércio bidirecional aumenta o risco, cuidado com perdas curtas reversas.

Recomenda- se a utilização de paradas para controlar o risco.

Orientações de otimização

  1. Adicione outros filtros como o MACD aos sinais de filtragem.

  2. Incorporar estratégias de stop loss.

  3. Otimizar os parâmetros Bollinger e RSI.

  4. Ajustar parâmetros para diferentes produtos e prazos.

  5. Considere os parâmetros de sintonização em tempo real para se adequarem às condições reais.

Resumo

A estratégia RSI-Bollinger de captura de volatilidade é uma estratégia orientada por indicadores técnicos, combinando os pontos fortes das Bandas de Bollinger, RSI e SMA ajustando dinamicamente as Bandas de Bollinger para capturar flutuações do mercado.


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PresentTrading

//@version=5
// Define the strategy settings
strategy('Volatility Capture RSI-Bollinger - Strategy [presentTrading]', overlay=true)

// Define the input parameters for the indicator
priceSource  = input.source(title='Source', defval=hlc3, group='presentBollingBand') // The price source to use
lengthParam   = input.int(50, 'lengthParam', minval=1, group='presentBollingBand') // The length of the moving average
multiplier = input.float(2.7183, 'Multiplier', minval=0.1, step=.1, group='presentBollingBand') // The multiplier for the ATR
useRSI = input.bool(true, 'Use RSI for signals', group='presentBollingBand') // Boolean input to decide whether to use RSI for signals
rsiPeriod = input.int(10, 'RSI Period', minval=1, group='presentBollingBand') // The period for the RSI calculation
smaPeriod = input.int(5, 'SMA Period', minval=1, group='presentBollingBand') // The period for the SMA calculation
boughtRange = input.float(55, 'Bought Range Level', minval=1, group='presentBollingBand') // The level for the bought range
soldRange = input.float(50, 'Sold Range Level', minval=1, group='presentBollingBand') // The level for the sold range

// Add a parameter for choosing Long or Short
tradeDirection = input.string("Both", "Trade Direction", options=["Long", "Short", "Both"], group='presentBollingBand') // Dropdown input for trade direction

// Calculate the bollingerBand
barIndex = bar_index // The current bar index
upperBollingerBand = ta.sma(high, lengthParam) + ta.stdev(high, lengthParam) * multiplier // Calculate the upper Bollinger Band
lowerBollingerBand = ta.sma(low, lengthParam) - ta.stdev(low, lengthParam) * multiplier // Calculate the lower Bollinger Band

var float presentBollingBand = na // Initialize the presentBollingBand variable
crossCount = 0 // Initialize the crossCount variable

// Calculate the buy and sell signals
longSignal1 = ta.crossover(priceSource, presentBollingBand) // Calculate the long signal
shortSignal1 = ta.crossunder(priceSource, presentBollingBand) // Calculate the short signal

// Calculate the RSI
rsiValue = ta.rsi(priceSource, rsiPeriod) // Calculate the RSI value
rsiSmaValue = ta.sma(rsiValue, smaPeriod) // Calculate the SMA of the RSI value

// Calculate the buy and sell signals
longSignal2 = rsiSmaValue > boughtRange // Calculate the long signal based on the RSI SMA
shortSignal2 = rsiSmaValue < soldRange // Calculate the short signal based on the RSI SMA

presentBollingBand := na(lowerBollingerBand) or na(upperBollingerBand)?0.0 : close>presentBollingBand?math.max(presentBollingBand,lowerBollingerBand) : close<presentBollingBand?math.min(presentBollingBand,upperBollingerBand) : 0.0


if (tradeDirection == "Long" or tradeDirection == "Both") and longSignal1 and (useRSI ? longSignal2 : true) // Use RSI for signals if useRSI is true
    presentBollingBand := lowerBollingerBand // If the trade direction is "Long" or "Both", and the long signal is true, and either useRSI is false or the long signal based on RSI is true, then assign the lowerBollingerBand to the presentBollingBand.
    strategy.entry("Long", strategy.long) // Enter a long position.

if (tradeDirection == "Short" or tradeDirection == "Both") and shortSignal1 and (useRSI ? shortSignal2 : true) // Use RSI for signals if useRSI is true
    presentBollingBand := upperBollingerBand // If the trade direction is "Short" or "Both", and the short signal is true, and either useRSI is false or the short signal based on RSI is true, then assign the upperBollingerBand to the presentBollingBand.
    strategy.entry("Short", strategy.short) // Enter a short position.

// Exit condition
if (strategy.position_size > 0 and ta.crossunder(close, presentBollingBand)) // If the strategy has a long position and the close price crosses under the presentBollingBand, then close the long position.
    strategy.close("Long")
if (strategy.position_size < 0 and ta.crossover(close, presentBollingBand)) // If the strategy has a short position and the close price crosses over the presentBollingBand, then close the short position.
    strategy.close("Short")

//~~ Plot
plot(presentBollingBand,"presentBollingBand", color=color.blue) // Plot the presentBollingBand on the chart.

Mais.