0bps

Strategy vault / Trend following

Dual EMA Crossover Trading Strategy 427290

The dual EMA crossover trading strategy is a trend following strategy that uses the crossover of two EMAs of different lengths to determine market trend and make trades. This simple and straightforward strategy can…

Author
ChaoZhang
Complexity
Starter · 35 lines
Parameters
3
Backtest bar
4h · intraday
Tested on
BTC/USDT · futures

Overview

The dual EMA crossover trading strategy is a trend following strategy that uses the crossover of two EMAs of different lengths to determine market trend and make trades. This simple and straightforward strategy can effectively track medium- to long-term trends, making it very suitable for swing traders.

Strategy Logic

The strategy mainly uses the values and crossover of a short-term and long-term EMA to determine trend direction. It first calculates a short-term EMA (e.g. 13 periods) and a long-term EMA (e.g. 26 periods), then computes the percentage crossover between the two EMAs. If the short EMA is above the long EMA and the crossover is larger than a threshold (e.g. 5%), it signals an upward trend and long trades are taken. If the short EMA is below the long EMA and the crossover is larger than the threshold, it signals a downward trend and short trades are taken. Trades are closed when price crosses back above or below the short EMA.

The key logic is:

  1. Calculate short-term and long-term EMAs
  2. Check if short EMA is above or below long EMA
  3. Compute percentage crossover between the two EMAs
  4. Determine trend direction for long or short trades
  5. Close trades when price crosses back the short EMA

This allows the strategy to effectively track medium- to long-term trends and switch direction when the trend changes. The crossover threshold also avoids unnecessary trades during non-trending periods.

Advantages

  • Simple and effective for tracking long-term trends
  • EMAs help filter out short-term market noise
  • Configurable EMA periods and crossover threshold for flexibility
  • Crossover threshold ensures trades only when trend is strong
  • Short EMA breakout for stop loss helps manage risk

Risks and Mitigations

  • Unable to exit before trend reversal, larger drawdowns
  • Can get whipsawed during range-bound price action
  • Need to set suitable EMA periods and threshold per instrument

Risks can be reduced by:

  1. Adding filters to identify trend reversal signals for early exits
  2. Increasing trend filter rules to avoid trading range-bound action
  3. Optimizing EMA periods and threshold for each instrument

Enhancement Opportunities

The strategy can be enhanced in areas like:

  1. Parameter optimization via backtesting to find optimal EMA periods and threshold

  2. Trend filtering using additional indicators like MACD, Bollinger Bands to avoid whipsaws

  3. Stop loss strategies like trailing stops or time-based stops to limit losses

  4. Profit taking by moving stop loss to lock in partial profits after hits

  5. Quantitative optimization using machine learning to auto-tune parameters and filters

  6. Portfolio optimization by combining with non-correlated strategies to lower drawdown and increase robustness

Through parameter optimization, better filters, stop loss, profit taking, and quantitative & portfolio optimization, the strategy can be made more robust, adaptive, and scientifically effective.

Conclusion

The dual EMA crossover is a simple and direct trend following strategy suitable for swing trading. It only requires two EMAs to determine trend direction, ideal for medium- to long-term trend trading. The strategy can also be enhanced through parameter tuning, better filters, stop loss, and other quantitative optimizations to make it more robust. Easy to implement and optimize, it is a recommended trend trading strategy.

Parameters

NameDefaultWhat it controls
v_input_10.95diffMinimum
v_input_213Small EMA
v_input_326Long EMA

Source Pine Script

/*backtest
start: 2023-08-19 00:00:00
end: 2023-08-23 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("2-EMA Strategy", overlay=true, initial_capital=100, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

diffMinimum = input(0.95, step=0.01)

small_ema = input(13, title="Small EMA")
long_ema = input(26, title="Long EMA")

ema1 = ema(close, small_ema)
ema2 = ema(close, long_ema)


orderCondition = ema1 > ema2?((ema1/ema2)*100)-100 > diffMinimum:((ema2/ema1)*100)-100 > diffMinimum

longCondition = close > ema1 and ema1 > ema2
if (longCondition and orderCondition)
    strategy.entry("Long", strategy.long)

shortCondition = close < ema1 and ema1 < ema2
if (shortCondition and orderCondition)
    strategy.entry("Short", strategy.short)
    
strategy.close("Short", when=close > ema1)
strategy.close("Long", when=close < ema1)
    
plot(ema(close, small_ema), title="EMA 1", color=green, transp=0, linewidth=2)
plot(ema(close, long_ema), title="EMA 2", color=orange, transp=0, linewidth=2)

Published by ChaoZhang on the FMZ strategy square · last modified 2023-09-19. 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/Dual-EMA-Crossover-Trading-Strategy-427290.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