0bps

Strategy vault / Momentum

Multi EMA Crossover Momentum Trend Following Strategy

This strategy is a trend-following system based on multiple Exponential Moving Averages (EMAs). It identifies market trends by calculating the averages of short-term and long-term EMA groups and generates trading…

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

IMG

Overview

This strategy is a trend-following system based on multiple Exponential Moving Averages (EMAs). It identifies market trends by calculating the averages of short-term and long-term EMA groups and generates trading signals at crossovers. The strategy incorporates take-profit and stop-loss mechanisms to control risk and secure profits.

Strategy Principles

The strategy employs 6 short-term EMAs (3, 5, 8, 10, 12, 15 periods) and 6 long-term EMAs (30, 35, 40, 45, 50, 60 periods). By averaging these EMAs separately, it creates smoother short-term and long-term trend indicators. Long positions are initiated when the short-term average crosses above the long-term average, while short positions are taken when the short-term average crosses below. Each trade is managed with a 10% take-profit and 5% stop-loss level.

Strategy Advantages

  1. Multiple EMAs reduce false signals that might occur with single moving averages, improving signal reliability
  2. Averaging multiple EMAs helps filter market noise and capture major trends more effectively
  3. Clear take-profit and stop-loss settings ensure effective risk control while securing profits
  4. Simple and clear strategy logic makes it easy to understand and implement
  5. Bilateral trading capability allows profit opportunities in both upward and downward markets

Strategy Risks

  1. May generate frequent false breakout signals in ranging markets, leading to consecutive losses
  2. Moving average systems have inherent lag, potentially missing trend beginnings or maintaining positions after trend endings
  3. Fixed percentage take-profit and stop-loss levels may not be suitable for all market conditions
  4. In highly volatile markets, positions might be stopped out before market reversals

Strategy Optimization Directions

  1. Incorporate volatility indicators to adjust take-profit and stop-loss levels dynamically
  2. Add volume confirmation indicators to improve signal reliability
  3. Dynamically adjust EMA parameters based on different market conditions
  4. Implement trend strength filters to trade only in strong trend environments
  5. Consider adding market sentiment indicators to optimize entry timing

Summary

This is a well-structured trend-following strategy that provides relatively reliable trading signals through the combination of multiple EMAs. While it carries some inherent lag risks, the overall performance can be further enhanced through appropriate take-profit and stop-loss settings and the suggested optimization directions. The strategy is particularly suitable for markets exhibiting clear trends.

Source Pine Script

/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Pavan Guppy Strategy", shorttitle="Pavan Avg", overlay=true, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Short-term EMAs
shortEMA1 = ta.ema(close, 3)
shortEMA2 = ta.ema(close, 5)
shortEMA3 = ta.ema(close, 8)
shortEMA4 = ta.ema(close, 10)
shortEMA5 = ta.ema(close, 12)
shortEMA6 = ta.ema(close, 15)

// Long-term EMAs
longEMA1 = ta.ema(close, 30)
longEMA2 = ta.ema(close, 35)
longEMA3 = ta.ema(close, 40)
longEMA4 = ta.ema(close, 45)
longEMA5 = ta.ema(close, 50)
longEMA6 = ta.ema(close, 60)

// Average short-term EMAs
shortAvg = (shortEMA1 + shortEMA2 + shortEMA3 + shortEMA4 + shortEMA5 + shortEMA6) / 6.0

// Average long-term EMAs
longAvg = (longEMA1 + longEMA2 + longEMA3 + longEMA4 + longEMA5 + longEMA6) / 6.0

// Plot averaged EMAs
plot(shortAvg, color=color.green, linewidth=2, title="Averaged Short-term EMAs")
plot(longAvg, color=color.red, linewidth=2, title="Averaged Long-term EMAs")

// Define the target and stop loss percentages
takeProfitPerc = 10
stopLossPerc = 5

// Generate buy signal when shortAvg crosses above longAvg
if ta.crossover(shortAvg, longAvg)
    strategy.entry("Buy", strategy.long)

// Generate sell signal when shortAvg crosses below longAvg
if ta.crossunder(shortAvg, longAvg)
    strategy.entry("Sell", strategy.short)

// Calculate take profit and stop loss prices for long trades
longTakeProfit = close * (1 + (takeProfitPerc / 100.0))
longStopLoss = close * (1 - (stopLossPerc / 100.0))

// Set take profit and stop loss for long positions
strategy.exit("Take Profit/Stop Loss", from_entry="Buy", limit=longTakeProfit, stop=longStopLoss)

// Calculate take profit and stop loss prices for short trades
shortTakeProfit = close * (1 - takeProfitPerc / 100.0)
shortStopLoss = close * (1 + stopLossPerc / 100.0)

// Set take profit and stop loss for short positions
strategy.exit("Take Profit/Stop Loss", from_entry="Sell", limit=shortTakeProfit, stop=shortStopLoss)

Published by ChaoZhang on the FMZ strategy square · last modified 2024-12-12. 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/Multi-EMA-Crossover-Momentum-Trend-Following-Strategy.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