0bps

Strategy vault / Mean reversion

Trend Reversal Trading Strategy Based on EMA Crossover

This strategy calculates the exponential moving average (EMA) of fast and slow periods, plots them on the chart, and monitors crossovers in real-time to determine trend reversals. Trading signals are formed by…

Author
ChaoZhang
Complexity
Starter · 47 lines
Parameters
5
Backtest bar
1d · swing
Tested on
BTC/USDT · futures

IMG

Overview

This strategy calculates the exponential moving average (EMA) of fast and slow periods, plots them on the chart, and monitors crossovers in real-time to determine trend reversals. Trading signals are formed by incorporating the RSI oscillator to avoid false signals. A buy signal is generated when the fast EMA crosses above the slow EMA. A sell signal is generated when the fast EMA crosses below the slow EMA.

Strategy Logic

  1. Calculate EMAs of fast and slow periods
  2. Plot on chart and monitor crossovers in real-time
  3. Fast EMA crossing above slow EMA indicates uptrend, buy signal
  4. Fast EMA crossing below slow EMA indicates downtrend, sell signal
  5. Incorporate RSI to avoid false signals
  6. Trend filter to trade only on trend change

Advantage Analysis

  1. EMAs smooth price action, less sensitive to minor fluctuations
  2. RSI filters out false reversal signals
  3. Customizable EMA and RSI parameters for different markets
  4. Simple and intuitive code, easy to understand

Risk Analysis

  1. EMAs have lag, may miss turning points
  2. Fail in ranging, volatile markets
  3. Need to adjust EMA and RSI parameters
  4. Should combine other indicators

Optimization

  1. Add filters to increase signal reliability
  2. Implement stop loss to control risk
  3. Test stability across periods
  4. Incorporate currency strength meter
  5. Optimize risk-reward ratio

Conclusion

The strategy has a clear logic using EMA crossovers to determine trend reversal, filtered by RSI to capture mid- to long-term trends. However, optimization of EMA/RSI parameters and stop loss, as well as the risk of missing reversals and failure in volatile markets remain. With tuned parameters and risk controls, it could serve to identify turning points and formulate investment decisions.

Parameters

NameDefaultWhat it controls
v_input_110Fast EMA Period
v_input_250Slow EMA Period
v_input_314RSI Length
v_input_470Overbought Level
v_input_530Oversold Level

Source Pine Script

/*backtest
start: 2022-12-18 00:00:00
end: 2023-12-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trend Change with EMA Entry/Exit - Intraday", overlay=true)

// Define the fast and slow EMA periods
fast_ema_period = input(10, title="Fast EMA Period")
slow_ema_period = input(50, title="Slow EMA Period")

// Calculate the EMAs
ema_fast = ta.ema(close, fast_ema_period)
ema_slow = ta.ema(close, slow_ema_period)

// Plot the EMAs on the chart
plot(ema_fast, title="Fast EMA", color=color.blue, linewidth=2)
plot(ema_slow, title="Slow EMA", color=color.orange, linewidth=2)

// Detect trend changes (crossovers and crossunders)
is_uptrend = ta.crossover(ema_fast, ema_slow)
is_downtrend = ta.crossunder(ema_fast, ema_slow)

// Relative Strength Index (RSI)
rsi_length = input(14, title="RSI Length")
overbought_level = input(70, title="Overbought Level")
oversold_level = input(30, title="Oversold Level")
rsi_value = ta.rsi(close, rsi_length)

// Trend Filter
is_trending = ta.change(is_uptrend) != 0 or ta.change(is_downtrend) != 0

// Entry and Exit signals
enter_long = is_uptrend and rsi_value < overbought_level and is_trending
exit_long = is_downtrend and is_trending
enter_short = is_downtrend and rsi_value > oversold_level and is_trending
exit_short = is_uptrend and is_trending

strategy.entry("Buy", strategy.long, when=enter_long)
strategy.close("Buy", when=exit_long)
strategy.entry("Sell", strategy.short, when=enter_short)
strategy.close("Sell", when=exit_short)

Published by ChaoZhang on the FMZ strategy square · last modified 2023-12-25. 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.

in Claude Code, Cursor, Codex & 4 more
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/Trend-Reversal-Trading-Strategy-Based-on-EMA-Crossover.md
  1. npx agenkit install engineering-kit in your project
  2. Paste the command into your agent and approve each phase
  3. 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

esc

Try , , or .

↑↓ move↵ open