Esta é uma estratégia de seguimento de tendências que combina cruzamento de média móvel com o Índice de Força Relativa (RSI). A estratégia determina a direção da tendência do mercado através de cruzamento de média móvel de curto e longo prazo, enquanto usa o RSI como um filtro de impulso para confirmar a força da tendência, melhorando assim a confiabilidade dos sinais de negociação. A estratégia também incorpora stop-loss e take-profit baseados em porcentagem para gerenciamento de riscos.
A estratégia emprega médias móveis simples (SMA) de 9 períodos e 21 períodos como indicadores primários de tendência. Os sinais longos são gerados quando o MA de curto prazo cruza acima do MA de longo prazo e o RSI está acima de 50, enquanto os sinais curtos ocorrem quando o MA de curto prazo cruza abaixo do MA de longo prazo e o RSI está abaixo de 50.
Esta é uma estratégia de tendência bem estruturada com lógica clara. Ela fornece direção de tendência básica através de cruzamento de MA, confirmação de momento através de RSI, combinada com mecanismos de gerenciamento de risco para formar um sistema de negociação completo. Embora tenha algumas limitações inerentes, através de otimização e ajuste contínuos, a estratégia tem o potencial de manter um desempenho estável em diferentes ambientes de mercado. A chave para o sucesso está na otimização de parâmetros e execução do controle de risco.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-10 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Moving Average Crossover + RSI Strategy", overlay=true, shorttitle="MA RSI Strategy") // --- Input Parameters --- shortMA = input.int(9, title="Short MA Period", minval=1) longMA = input.int(21, title="Long MA Period", minval=1) rsiLength = input.int(14, title="RSI Length", minval=1) rsiOverbought = input.int(70, title="RSI Overbought Level", minval=50, maxval=100) rsiOversold = input.int(30, title="RSI Oversold Level", minval=0, maxval=50) stopLossPercent = input.float(1, title="Stop Loss Percentage", minval=0.1, maxval=10.0) / 100 takeProfitPercent = input.float(2, title="Take Profit Percentage", minval=0.1, maxval=10.0) / 100 // --- Calculate Moving Averages --- shortMA_value = ta.sma(close, shortMA) longMA_value = ta.sma(close, longMA) // --- Calculate RSI --- rsi_value = ta.rsi(close, rsiLength) // --- Buy and Sell Conditions --- longCondition = ta.crossover(shortMA_value, longMA_value) and rsi_value > 50 shortCondition = ta.crossunder(shortMA_value, longMA_value) and rsi_value < 50 // --- Plot Moving Averages --- plot(shortMA_value, color=color.blue, linewidth=2, title="Short MA") plot(longMA_value, color=color.red, linewidth=2, title="Long MA") // --- Plot RSI (Optional) --- hline(rsiOverbought, "Overbought", color=color.red) hline(rsiOversold, "Oversold", color=color.green) plot(rsi_value, color=color.purple, title="RSI") // --- Strategy Execution --- if (longCondition) strategy.entry("Long", strategy.long) if (shortCondition) strategy.entry("Short", strategy.short) // --- Risk Management (Stop Loss and Take Profit) --- longStopLoss = close * (1 - stopLossPercent) longTakeProfit = close * (1 + takeProfitPercent) shortStopLoss = close * (1 + stopLossPercent) shortTakeProfit = close * (1 - takeProfitPercent) // Set the stop loss and take profit for long and short positions strategy.exit("Long Exit", from_entry="Long", stop=longStopLoss, limit=longTakeProfit) strategy.exit("Short Exit", from_entry="Short", stop=shortStopLoss, limit=shortTakeProfit)