Esta estratégia combina dois indicadores técnicos: Índice de Força Relativa (RSI) e Divergência de Convergência da Média Móvel (MACD). Ele usa o RSI para determinar as condições de sobrecompra e sobrevenda, e o MACD para identificar a direção da tendência, formando uma estratégia longa-curta completa. Quando o RSI é sobrecomprado, um sinal de venda é gerado e a posição é fechada quando a linha rápida do MACD cruza acima da linha lenta. Quando o RSI é sobrevendido, um sinal de compra é gerado e a posição é fechada quando a linha rápida do MACD cruza abaixo da linha lenta. O ponto de stop-loss é definido calculando metade da mudança média do preço do ativo.
A estratégia é baseada em um sistema de negociação de preços, que é um sistema de negociação de preços baseado em valores de mercado. Usando o RSI para determinar as condições de sobrecompra e sobrevenda, a estratégia entra no início de uma inversão.
Esta estratégia usa o RSI para determinar as condições de sobrecompra e sobrevenda e o MACD para identificar a direção da tendência, formando um sistema de negociação longo-curto completo. A lógica da estratégia é clara e as vantagens são óbvias, enquanto também há certos riscos. Através da otimização de parâmetros, adicionando condições de filtragem, gerenciamento de posição e combinando com outras estratégias, o desempenho desta estratégia pode ser melhorado, tornando-se uma estratégia de negociação robusta.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="RSI & MACD Strategy", shorttitle="RSI & MACD", overlay=true) // Définition des entrées rsi_length = 14 rsi_overbought = 70 rsi_oversold = 30 macd_fast_length = 12 macd_slow_length = 26 macd_signal_length = 9 // Fonction pour calculer le RSI calculate_rsi(source, length) => price_change = ta.change(source) up = ta.rma(price_change > 0 ? price_change : 0, length) down = ta.rma(price_change < 0 ? -price_change : 0, length) rs = up / down rsi = 100 - (100 / (1 + rs)) rsi // Fonction pour calculer le MACD calculate_macd(source, fast_length, slow_length, signal_length) => fast_ma = ta.ema(source, fast_length) slow_ma = ta.ema(source, slow_length) macd = fast_ma - slow_ma signal = ta.ema(macd, signal_length) hist = macd - signal [macd, signal, hist] // Calcul des indicateurs rsi_value = calculate_rsi(close, rsi_length) [macd_line, signal_line, _] = calculate_macd(close, macd_fast_length, macd_slow_length, macd_signal_length) // Conditions d'entrée et de sortie // Entrée en vente : RSI passe de >= 70 à < 70 sell_entry_condition = ta.crossunder(rsi_value, rsi_overbought) // Sortie en vente : MACD fast MA croise au-dessus de slow MA sell_exit_condition = ta.crossover(macd_line, signal_line) // Entrée en achat : RSI passe de <= 30 à > 30 buy_entry_condition = ta.crossover(rsi_value, rsi_oversold) // Sortie en achat : MACD fast MA croise en-dessous de slow MA buy_exit_condition = ta.crossunder(macd_line, signal_line) // Affichage des signaux sur le graphique plotshape(series=sell_entry_condition, title="Sell Entry", location=location.belowbar, color=color.red, style=shape.triangleup, size=size.small) plotshape(series=sell_exit_condition, title="Sell Exit", location=location.abovebar, color=color.green, style=shape.triangledown, size=size.small) plotshape(series=buy_entry_condition, title="Buy Entry", location=location.abovebar, color=color.green, style=shape.triangleup, size=size.small) plotshape(series=buy_exit_condition, title="Buy Exit", location=location.belowbar, color=color.red, style=shape.triangledown, size=size.small) // Entrées et sorties de la stratégie if (sell_entry_condition) strategy.entry("Short", strategy.short) if (sell_exit_condition) strategy.close("Short") if (buy_entry_condition) strategy.entry("Long", strategy.long) if (buy_exit_condition) strategy.close("Long")