MACD Crossover Strategy with RSI Confirmation

Author: ChaoZhang, Date: 2024-02-27 15:07:28



This strategy combines the Moving Average Convergence Divergence (MACD) indicator with the Relative Strength Index (RSI) indicator. It checks if RSI is above 50 when MACD golden cross happens to confirm buy signals, and checks if RSI is below 50 when MACD death cross happens to confirm sell signals. This helps filter out some false signals and improves the stability of the strategy.

Strategy Logic

The core of the strategy lies in the MACD indicator crossovers and the RSI indicator judgments of overbought/oversold levels.

The MACD indicator consists of the MACD line, signal line and histogram. When the MACD line crosses above the signal line, a buy signal known as the golden cross is generated. When the MACD line crosses below the signal line, a sell signal known as the death cross is generated. The golden cross indicates the uptrend is strengthening and long positions can be considered. The death cross indicates the downtrend is strengthening and short positions can be considered.

The RSI indicator judges overbought/oversold levels. If RSI is above 50, it signals that the market is in uptrend and buy signals are more reliable. If RSI is below 50, it signals that the market is in downtrend and sell signals are more reliable.

Therefore, when MACD golden cross happens and RSI is above 50, it enhances the reliability of the buy signal triggered by the golden cross. When MACD death cross happens and RSI is below 50, it enhances the reliability of the sell signal triggered by the death cross.

The trading rules for this strategy are:

  1. Go long when MACD golden cross happens and RSI is above 50.

  2. Go short when MACD death cross happens and RSI is below 50.

  3. Exit after a fixed number of bars since the MACD crossover.

Advantage Analysis

The strategy combines the strengths of both the MACD and RSI indicators to effectively filter out false signals and avoid bad trades. The main advantages are:

  1. MACD is the core indicator here for determining market trend and crossover signals. It has advantages like good trend following, clear indicator meanings, and widespread usage.

  2. RSI helps judge overbought/oversold levels and filter unreliable signals. It is easy to use with simple parameter tuning.

  3. The two indicators complement each other when used together. MACD determines trend direction and crossover signals, while RSI assists in filtering the signals. This combination is clear and easy to implement.

  4. The fixed exit mechanism can lock in profits and manage risks. It prevents excessive losses due to overstaying in trades.

Risk Analysis

Despite the many advantages, there are still some potential risks to consider for this strategy:

  1. MACD may generate incorrect or lagging signals, i.e. the crossover signals can lag, causing missed best entry points during fast price changes.

  2. RSI may also generate false signals. It may whipsaw above and below the 50 line during market consolidations, generating frequent but unreliable trade signals.

  3. The fixed exit mechanism fails to fully capture trending moves. Exiting too early during strong trends means missing out on profit opportunities.

  4. The strategy is more suitable for short-term trading. Its efficacy may diminish in medium-to-long term trading which requires considering more complex factors.

To mitigate the above risks, methods like parameter tuning, optimizing indicator combos, using stops, combining other factors etc. can be employed.

Optimization Directions

The following aspects of the strategy can be optimized:

  1. Optimize MACD parameters by testing different fast/slow line differences to find the best fit.

  2. Optimize RSI parameters by testing combinations of short/long-term RSI.

  3. Add stop loss mechanisms to limit losses in a timely manner.

  4. Incorporate other factors like volume and volatility to further confirm signal reliability.

  5. Dynamically adjust exit rules based on market conditions rather than fixed number of bars. This can help lock in more profits during strong trends.

  6. Employ machine learning techniques to continually monitor and improve strategy performance over time.


The MACD and RSI crossover strategy combines the strengths of two widely used technical indicators. It can effectively determine market trends, identify reversal signals, while avoiding lots of false signals through the RSI filter. Overall, this simple and easy-to-use strategy works well for short-term mean reversion style trading. Of course, no strategy can be perfect. We still need to continually optimize the combinations and management mechanisms, and incorporate more factors to deal with the ever-changing market environments.

start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at
// © ayamtech1
strategy("MACD Crossover Strategy with RSI Confirmation", overlay=true)

// Input parameters
fast_length = input(12, title="MACD Fast Length")
slow_length = input(26, title="MACD Slow Length")
signal_smoothing = input(9, title="MACD Signal Smoothing")
exit_after_bars = input(3, title="Exit After Bars")
rsi_length = input(14, title="RSI Length")

// MACD calculation
[macdLine, signalLine, _] = ta.macd(close, fast_length, slow_length, signal_smoothing)

// MACD crossover conditions
bullish_cross = ta.crossover(macdLine, signalLine)
bearish_cross = ta.crossunder(macdLine, signalLine)

// RSI calculation
rsi = ta.rsi(close, rsi_length)

// Variables to track RSI crossing
var above_50 = false
var below_50 = false

// Check for RSI crossing above 50
if (rsi > 50 and rsi[1] <= 50)
    above_50 := true

// Check for RSI crossing below 50
if (rsi < 50 and rsi[1] >= 50)
    below_50 := true

// Strategy execution
if (bullish_cross and above_50)
    strategy.entry("Buy", strategy.long)
if (bearish_cross and below_50)
    strategy.entry("Sell", strategy.short)

// Exit condition
exit_condition_long = ta.barssince(bullish_cross) >= exit_after_bars
exit_condition_short = ta.barssince(bearish_cross) >= exit_after_bars

if (exit_condition_long)
if (exit_condition_short)

// Plot MACD lines
plot(macdLine,, title="MACD Line")
plot(signalLine,, title="Signal Line")

// Plot buy and sell signals
plotshape(series=bullish_cross and above_50, title="Bullish Cross", location=location.belowbar,, style=shape.triangleup, size=size.small)
plotshape(series=bearish_cross and below_50, title="Bearish Cross", location=location.abovebar,, style=shape.triangledown, size=size.small)