The Momentum Indicator Crossover Strategy is a trading approach based on the combination of Exponential Moving Average (EMA) and Relative Strength Index (RSI) signals. Designed to leverage buy and sell signals based on the crossover of two EMA lines, this strategy offers simplicity and effectiveness in managing trades in the financial markets.
The core of this strategy is the crossover system of fast and slow EMA lines. The strategy defines three EMA lines with different parameters: ema1
, ema2
and ema3
. Among them, ema1
represents short-term trend, ema2
represents medium-term trend, and ema3
represents long-term trend. When the short-term trend crosses above the medium-term trend, a buy signal is generated. When the short-term trend falls below the medium-term trend, a sell signal is generated.
To filter false signals, the strategy also defines two additional conditions: bodybar1 > bodybar2
and close > entrybar
(for buy signal) or close < entrybar
(for sell signal). This ensures that the recent two candlesticks meet the direction of the signal, and the price breaks through the entry point to avoid redundant entry.
In addition, the strategy incorporates the RSI indicator to evaluate overbought and oversold conditions. The overbought area of RSI is used to define excessive buying signals, while the oversold area is used to define excessive selling signals. This helps avoid wrong signals in overheated and over-cooled markets.
The advantages of this strategy include:
The risks of this strategy include:
The strategy can be optimized in the following aspects:
The Momentum Indicator Crossover Strategy integrates the strengths of EMA and RSI and forms trading signals based on indicator crossovers. The strategy is simple and practical, suitable for beginners, and can also be expanded and optimized according to actual needs to improve strategy performance. With strict risk management, the strategy promises stable excess returns.
/*backtest start: 2022-12-20 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('EMA Crossover Strategy', shorttitle='EMA Crossover', overlay=true) // Define input for position size as a percentage of equity position_size_pct = input(1, title='Position Size (%)') / 100 //Input EMA len1 = input.int(25, minval=1, title='EMA 1') src1 = input(close, title='Source') ema1 = ta.ema(src1, len1) len2 = input.int(100, minval=1, title='EMA 2') src2 = input(close, title='Source') ema2 = ta.ema(src2, len2) len3 = input.int(200, minval=1, title='EMA 3') src3 = input(close, title='Source') ema3 = ta.ema(src3, len3) //End of format //Format RSI lenrsi = input(14, title='RSI length') outrsi = ta.rsi(close,lenrsi) //plot(outrsi, title='RSI', color=color.new(color.blue, 0), linewidth=1) //hline(70, 'Overbought', color=color.red) //hline(30, 'Oversold', color=color.green) //End of format bodybar1 = math.abs(close - open) bodybar2 = math.abs(close[1] - open[1]) // Plot the EMAs plot(ema1, color=color.new(color.blue, 0), title='EMA 1') plot(ema2, color=color.new(color.red, 0), title='EMA 2') //plot(ema3, color=color.new(#ffffff, 0), title='EMA 3') // EMA Crossover conditions emaCrossoverUp = ta.crossover(ema1, ema2) emaCrossoverDown = ta.crossunder(ema1, ema2) var entrybar = close // Initialize entrybar with the current close // Calculate crossovers outside of the if statements emaCrossoverUpOccured = ta.crossover(close, ema1) and ema1 > ema2 and bodybar1 > bodybar2 and close > entrybar emaCrossoverDownOccured = ta.crossunder(close, ema1) and ema1 < ema2 and bodybar1 > bodybar2 and close < entrybar plotshape(series=emaCrossoverUpOccured, location=location.abovebar, color=color.new(color.green, 0), style=shape.triangleup, title='New Buy Order', size=size.tiny) plotshape(series=emaCrossoverDownOccured, location=location.belowbar, color=color.new(color.red, 0), style=shape.triangledown, title='New Sell Order', size=size.tiny) // Define trading logic with custom position size and RSI conditions if emaCrossoverUp or emaCrossoverUpOccured strategy.entry('Buy', strategy.long) entrybar := close // Update entrybar when entering a new buy position entrybar if emaCrossoverDown or emaCrossoverDownOccured strategy.entry('Sell', strategy.short) entrybar := close // Update entrybar when entering a new sell position entrybar