0bps

Strategy vault / Trend following

Multi EMA Crossover Strategy

This is a quantitative trading strategy based on multiple exponential moving average (EMA) crossovers, designed to identify market trends by capturing crossover points of EMAs at different time periods and generate…

Author
ianzeng123
Complexity
Starter · 75 lines
Parameters
0
Backtest bar
1h · intraday
Tested on
BNB/USDT · futures

IMG IMG

Overview

This is a quantitative trading strategy based on multiple exponential moving average (EMA) crossovers, designed to identify market trends by capturing crossover points of EMAs at different time periods and generate trading signals. The strategy aims to capture market momentum through progressive confirmation and provide an intuitive visualization mechanism for trend judgment.

Strategy Principles

The core logic is based on crossover signals from four different EMA periods:

  1. First Entry Signal: 1-day EMA crosses above 5-day EMA, indicating initial upward momentum
  2. Second Entry Signal: 3-day EMA crosses above 10-day EMA, confirming stronger upward trend
  3. Third Entry Signal: 5-day EMA crosses above 20-day EMA, showing further trend development
  4. Fourth Entry Signal: 10-day EMA crosses above 40-day EMA, demonstrating long-term bullish momentum

The strategy intuitively displays market sentiment through color coding: blue tones represent bullish, red tones represent bearish. Color intensity reflects the relative position of short-term EMAs to long-term EMAs.

Strategy Advantages

  1. Progressive Confirmation: Multiple EMA crossovers provide layered trend confirmation
  2. Visual Feedback: Bar colors quickly present market sentiment changes
  3. High Flexibility: Suitable for trend-driven markets like Bitcoin
  4. Dynamic Position Management: Gradual position increase reduces single-trade risk
  5. Trend Tracking Capability: Can capture market momentum across different time scales

Strategy Risks

  1. Lagging Characteristic: EMAs as lagging indicators may react slowly to sudden price changes
  2. False Breakout Risk: Potential for generating incorrect signals in oscillating markets
  3. Multiple Position Risk: Pyramid-style position building may increase overall risk exposure

Strategy Optimization Directions

  1. Introduce additional filtering conditions, such as volume confirmation or volatility indicators
  2. Incorporate stop-loss mechanisms like Kelly Criterion for single-trade risk control
  3. Adjust EMA parameters for different market environments
  4. Enhance trend strength assessment module
  5. Introduce machine learning algorithms for dynamic entry strategy adjustment

Summary

The Multi-EMA Crossover Strategy provides traders with a systematic method of capturing market trends through progressive signal generation and intuitive visualization. Despite certain limitations, the strategy remains valuable through continuous optimization and risk management.

Source Pine Script

/*backtest
start: 2025-02-08 00:00:00
end: 2025-04-02 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © joll3d

//@version=5
strategy("Multi-EMA Crossover Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, pyramiding=4, default_qty_value=25)

// Calculate EMAs
ema1 = ta.ema(close, 1)
ema5 = ta.ema(close, 5)
ema3 = ta.ema(close, 3)
ema10 = ta.ema(close, 10)
ema20 = ta.ema(close, 20)
ema40 = ta.ema(close, 40)

// Define crossover conditions
longCondition1 = ta.crossover(ema1, ema5)
longCondition2 = ta.crossover(ema3, ema10)
longCondition3 = ta.crossover(ema5, ema20)
longCondition4 = ta.crossover(ema10, ema40)

shortCondition1 = ema1 < ema5
shortCondition2 = ema3 < ema10
shortCondition3 = ema5 < ema20
shortCondition4 = ema10 < ema40

// Execute long entries
if (longCondition1)
    strategy.entry("Long 1-5", strategy.long)
if (longCondition2)
    strategy.entry("Long 3-10", strategy.long)
if (longCondition3)
    strategy.entry("Long 5-20", strategy.long)
if (longCondition4)
    strategy.entry("Long 10-40", strategy.long)

if (shortCondition1)
    strategy.close("Long 1-5")
if (shortCondition2)
    strategy.close("Long 3-10")
if (shortCondition3)
    strategy.close("Long 5-20")
if (shortCondition4)
    strategy.close("Long 10-40")

// Calculate trend strength
bullishStrength = 0
bullishStrength := (ema1 > ema5 ? 1 : 0) + 
                 (ema3 > ema10 ? 1 : 0) + 
                 (ema5 > ema20 ? 1 : 0) + 
                 (ema10 > ema40 ? 1 : 0)

//set bar colors
bullishColor = color.blue
semiBullishColor = color.rgb(175, 213, 243)
semiBearishColor = color.rgb(245, 178, 178)
bearishColor = color.red

barColor = bearishColor
if bullishStrength == 2
    barColor := semiBearishColor
if bullishStrength == 3
    barColor := semiBullishColor
if bullishStrength == 4
    barColor := bullishColor

barcolor(barColor)

Published by ianzeng123 on the FMZ strategy square · last modified 2025-04-03. 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-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