Dual EMA and Relative Strength Adaptive Trading Strategy
This strategy is a comprehensive trading system that combines a dual EMA system, Relative Strength Index (RSI), and Relative Strength (RS) analysis. The strategy confirms trends through the crossover of 13-day and…

Overview
This strategy is a comprehensive trading system that combines a dual EMA system, Relative Strength Index (RSI), and Relative Strength (RS) analysis. The strategy confirms trends through the crossover of 13-day and 21-day Exponential Moving Averages (EMA) while utilizing RSI and RS values relative to a benchmark index for signal confirmation, implementing a multi-dimensional trading decision mechanism. It also includes risk control mechanisms based on 52-week highs and re-entry condition judgments.
Strategy Principles
The strategy employs a multiple signal confirmation mechanism:
- Entry signals require the following conditions:
- EMA13 crosses above EMA21 or price above EMA13
- RSI above 60
- Positive Relative Strength (RS)
- Exit conditions include:
- Price falls below EMA21
- RSI below 50
- RS turns negative
- Re-entry conditions:
- Price crosses above EMA13 and EMA13 above EMA21
- RS remains positive
- Or price breaks above last week's high
Strategy Advantages
- Multiple signal confirmation reduces false breakout risks
- Integration of relative strength analysis effectively filters strong performers
- Adopts adaptive timeframe adjustment mechanism
- Comprehensive risk control system
- Intelligent re-entry mechanism
- Real-time trade status visualization
Strategy Risks
- Potential frequent trading in choppy markets
- Multiple indicators may lead to lagging signals
- Fixed RSI thresholds may not suit all market conditions
- RS calculation depends on benchmark index accuracy
- 52-week high stop-loss might be too loose
Strategy Optimization Directions
- Introduction of adaptive RSI thresholds
- Optimization of re-entry condition logic
- Addition of volume analysis dimension
- Enhancement of profit-taking and stop-loss mechanisms
- Implementation of volatility filters
- Optimization of relative strength calculation periods
Summary
The strategy builds a comprehensive trading system by combining technical analysis and relative strength analysis. Its multiple signal confirmation mechanism and risk control system make it highly practical. Through the suggested optimization directions, there is room for further improvement. Successful implementation requires traders to have a deep understanding of the market and make appropriate parameter adjustments based on specific trading instrument characteristics.
Source Pine Script
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-03 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA 13 & 21 Entry Exit", overlay=true)
// Define the EMAs
ema13 = ta.ema(close, 13)
ema21 = ta.ema(close, 21)
// Define the RSI
rsi = ta.rsi(close, 14)
// Calculate the closing price relative to Nifty 50
//nifty50 = request.security("NSE:NIFTY", timeframe.period, close)
//closeRelative = close / nifty50
// Define a base period (e.g., 123) and adjust it based on the timeframe
//basePeriod = 123
// Calculate the effective period based on the timeframe
//effectivePeriod = basePeriod * (timeframe.isintraday ? (60 / timeframe.multiplier) : 1)
// Calculate the EMA
//rs = ta.ema(closeRelative, effectivePeriod)
// Define the Relative Strength with respect to NIFTY 50
nifty50 = request.security("swap", "D", close)
rs = ta.ema(close / nifty50, 55 )
// Define the previous 2-week low and last week's high
twoWeekLow = ta.lowest(low, 10) // 10 trading days roughly equal to 2 weeks
lastWeekHigh = ta.highest(high, 5) // 5 trading days roughly equal to 1 week
fiftytwoWeekhigh = ta.highest(high, 52*5) // 252 tradingdays roughly equal to 52 week.
// Long condition: EMA 21 crossing above EMA 55, price above EMA 21, RSI > 50, and RS > 0
longCondition = ta.crossover(ema13, ema21) or close > ema13 and rsi > 60 and rs > 0
// Exit condition: Price closing below EMA 55 or below the previous 2-week low
exitCondition = close < ema21 or rsi < 50 or rs < 0 //or close < fiftytwoWeekhigh*0.80
// Re-entry condition: Price crossing above EMA 21 after an exit, EMA 21 > EMA 55, and RS > 1
reEntryCondition = ta.crossover(close, ema13) and ema13 > ema21 and rs > 0
// Re-entry condition if trailing stop loss is hit: Price crossing above last week's high
reEntryAfterSL = ta.crossover(close, lastWeekHigh)
// Plot the EMAs
plot(ema13 ,color=color.green, title="EMA 13",linewidth = 2)
plot(ema21, color=color.red, title="EMA 21",linewidth = 2)
// Plot buy and sell signals
plotshape(series=longCondition, location=location.abovebar, color=color.rgb(50, 243, 130), style=shape.flag, title="Buy Signal")
plotshape(series=exitCondition, location=location.belowbar, color=color.red, style=shape.xcross, title="Sell Signal")
plotshape(series=reEntryCondition or reEntryAfterSL, location=location.belowbar, color=color.blue, style=shape.labelup, title="Re-entry Signal")
//plotshape(series = fiftytwoWeekhigh,location=location.abovebar, color=color.blue,style=shape.flag, title="52WH")
// Plot background color for RS > 0
//bgcolor(rs > 0 ? color.new(color.green, 90) : na, title="RS Positive Background")
// Plot the previous 2-week low and last week's high
// plot(twoWeekLow, color=color.orange, title="2-Week Low")
// plot(lastWeekHigh, color=color.purple, title="Last Week High")
// Strategy logic
if (longCondition or reEntryCondition or reEntryAfterSL)
strategy.entry("Long", strategy.long)
if (exitCondition)
strategy.close("Long")
// Calculate Stop Loss (SL) and Profit
var float entryPrice = na
var float stopLoss = na
var float profit = na
if (strategy.opentrades > 0)
entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)
stopLoss := fiftytwoWeekhigh * 0.80
profit := (close - entryPrice) / entryPrice * 100
// Display the strategy table
var table strategyTable = table.new(position.top_right, 4, 2, border_width = 1)
// Make the table movable
tableX = input.int(0, title="Table X Position")
tableY = input.int(0, title="Table Y Position")
// Add size options for the table
tableSize = input.string("small", title="Table Size", options=["tiny", "small", "large"])
// Adjust table size based on user input
tableWidth = tableSize == "tiny" ? 2 : tableSize == "small" ? 4 : 6
tableHeight = tableSize == "tiny" ? 1 : tableSize == "small" ? 2 : 3
// Create the table with the specified size
//table = table.new(position.top_right, tableWidth, tableHeight, border_width = 1)
// Position the table based on user input
// table.cell(strategyTable, tableX, tableY, "Entry Price", bgcolor=#18eef9)
// table.cell(strategyTable, tableX, tableY + 1, str.tostring(entryPrice, format.mintick), bgcolor=#18eef9)
// table.cell(strategyTable, tableX + 1, tableY, "Stop Loss (20%)", bgcolor=color.red)
// table.cell(strategyTable, tableX + 1, tableY + 1, str.tostring(stopLoss, format.mintick), bgcolor=color.red)
// table.cell(strategyTable, tableX + 2, tableY, "Profit (%)", bgcolor=color.green)
// table.cell(strategyTable, tableX + 2, tableY + 1, str.tostring(profit, format.percent), bgcolor=color.green)
Published by ChaoZhang on the FMZ strategy square · last modified 2024-12-04. Collected in the Quant Trading Vault. Unvalidated research: re-test with your own data and costs before trusting it.
Build this with AgenKit
A spec is not a trading system. Paste this into your coding agent and AgenKit runs a specialist team — architecture, test-first build, risk gates, review — with paper trading on by default.
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/Dual-EMA-and-Relative-Strength-Adaptive-Trading-Strategy.md- npx agenkit install engineering-kit in your project
- Paste the command into your agent and approve each phase
- Get tests, backtest, risk controls and a paper-trading switch
Understand it first
Before you run this, read the lesson behind the idea and how to backtest it honestly. Specs like this one are the survivors of an unknown number of trials; deflate their results accordingly.
Related specs
- Bull Market Tracking SystemPine Script · Breakout · 1h
- Dual MA Momentum Breakout StrategyPine Script · Breakout · 1h
- EMA and Bollinger Bands Breakout StrategyPine Script · Breakout · 1h
- Exponential Moving Average Candle Stop Trading StrategyPine Script · Breakout · 1d
- Fast RSI Breakout Trading StrategyPine Script · Breakout · 2d
- Force Breakthrough StrategyPine Script · Breakout · 30m