Esta estratégia é um sistema de negociação quantitativo baseado na teoria da reversão média, combinando Bandas de Bollinger, indicadores RSI e mecanismo dinâmico de stop-loss baseado em ATR. A estratégia negocia identificando desvios extremos de preços da média, indo longo quando o preço toca a faixa de Bollinger mais baixa e o RSI está em território supervendido e indo curto quando o preço toca a faixa de Bollinger superior e o RSI está em território supercomprado, enquanto usa o ATR para definir dinamicamente os níveis de stop-loss e take-profit para uma gestão eficaz do risco-recompensa.
A estratégia emprega Bandas de Bollinger de 20 períodos como indicador principal de tendência, com um multiplicador de desvio padrão de 2,0 para determinar os limites do movimento dos preços. Um RSI de 14 períodos é incorporado como um indicador suplementar, com leituras abaixo de 30 consideradas supervendidas e acima de 70 consideradas supercompradas. As posições longas são iniciadas quando o preço cai abaixo da faixa inferior e o RSI está abaixo de 30, indicando condições potenciais de supervenda, enquanto as posições curtas são tomadas quando o preço cai acima da faixa superior e o RSI está acima de 70, indicando condições potenciais de supercompra.
A estratégia constrói um sistema de negociação de reversão média abrangente através da aplicação combinada de Bandas de Bollinger e RSI. A introdução de paradas dinâmicas baseadas em ATR controla efetivamente o risco, fornecendo características favoráveis de risco-recompensa. Embora haja espaço para otimização, o conceito geral de design é claro e prático.
/*backtest start: 2024-11-19 00:00:00 end: 2024-11-26 00:00:00 period: 15m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("SOL/USDT Mean Reversion Strategy", overlay=true) // Input parameters length = input(20, "Bollinger Band Length") std_dev = input(2.0, "Standard Deviation") rsi_length = input(14, "RSI Length") rsi_oversold = input(30, "RSI Oversold") rsi_overbought = input(70, "RSI Overbought") // Calculate indicators [middle, upper, lower] = ta.bb(close, length, std_dev) rsi = ta.rsi(close, rsi_length) // Entry conditions long_entry = close < lower and rsi < rsi_oversold short_entry = close > upper and rsi > rsi_overbought // Exit conditions long_exit = close > middle or rsi > rsi_overbought short_exit = close < middle or rsi < rsi_oversold // Strategy execution if (long_entry) strategy.entry("Long", strategy.long) if (short_entry) strategy.entry("Short", strategy.short) if (long_exit) strategy.close("Long") if (short_exit) strategy.close("Short") // Stop loss and take profit atr = ta.atr(14) strategy.exit("Long SL/TP", "Long", stop=strategy.position_avg_price - 2*atr, limit=strategy.position_avg_price + 3*atr) strategy.exit("Short SL/TP", "Short", stop=strategy.position_avg_price + 2*atr, limit=strategy.position_avg_price - 3*atr) // Plot indicators plot(middle, color=color.yellow, title="BB Middle") plot(upper, color=color.red, title="BB Upper") plot(lower, color=color.green, title="BB Lower") // Plot entry and exit points plotshape(long_entry, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small) plotshape(short_entry, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) plotshape(long_exit, title="Long Exit", location=location.abovebar, color=color.orange, style=shape.circle, size=size.small) plotshape(short_exit, title="Short Exit", location=location.belowbar, color=color.orange, style=shape.circle, size=size.small)