0bps

Strategy vault / Trend following

CM Multiple EMA Crossover Strategy

This strategy combines 8-day, 13-day, 21-day and 55-day EMAs and generates long and short signals when crossover occurs between them, aiming to capture mid-long term trends.

Author
ChaoZhang
Complexity
Starter · 47 lines
Parameters
0
Backtest bar
6h · swing
Tested on
BTC/USDT · futures

Overview

This strategy combines 8-day, 13-day, 21-day and 55-day EMAs and generates long and short signals when crossover occurs between them, aiming to capture mid-long term trends.

Strategy Logic

  1. Calculate 8-day, 13-day, 21-day and 55-day EMAs.

  2. When 8-day, 13-day, 21-day EMAs all cross above 55-day EMA, long signal triggered.

  3. When 8-day, 13-day, 21-day EMAs all cross below 55-day EMA, short signal triggered.

  4. Go long on golden cross, go short on death cross.

  5. Close position on reverse crossover.

Advantage Analysis

  1. Multiple EMA combo effective in filtering false breakouts.

  2. 55-day EMA as anchor avoids being trapped.

  3. Backtest shows steady annual returns over past 10 years.

  4. Visual crossover, simple to operate, beginner friendly.

Risk Analysis

  1. Fixed parameters may not fit all products and markets, independent optimization needed.

  2. Ineffective in ranging markets, risks whipsaws and frequent stops.

  3. No stop loss unable to limit single trade loss.

  4. Trade frequency may be too high or low, parameter tweak needed.

  5. 10-year sample limited, need larger data to verify robustness.

Optimization Directions

  1. Test EMA period combinations to find best match.

  2. Add volume filter to avoid false breakouts.

  3. Implement fixed or moving stop loss.

  4. Optimize position sizing to lower risk per trade.

  5. Trade both long and short sides.

  6. Expand testing into more products and longer timeframe.

Summary

This strategy identifies mid-long term trends using EMA crosses in intuitive visual way. Strengths are visibility and simplicity. But parameters need more optimization and lacks risk control. More technical indicators should be introduced to filter signals and stops added to limit losses. Also requires large sample backtests across products and time to refine and verify, to become a robust trend following system.

Source Pine Script

/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ColinMccann18
//@version=4

// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// --------------------------------------------------------------RULES------------------------------------------------------------------------------
// - VISUALLY REPRESENTS THE CROSSING OF 8,13,21,55 EMA'S FROM KROWNS PROGRAM 
strategy(title="CM EMA Trend Cross STRAT", shorttitle="CM EMA Strat", overlay=true)

ema8  = ema(close,8)
ema13 = ema(close, 13)
ema21 = ema(close, 21)
ema55 = ema(close, 55)

//PLOT
plot(ema8,  title="EMA 1",linewidth=2, color=#00eeff)
plot(ema13, title="EMA 2",linewidth=2, color=#fff900)
plot(ema21, title="EMA 3",linewidth=2, color=#42ff0f)
plot(ema55, title="EMA 4",linewidth=2, color=#8b49ff)

//LOGIC---------------------------------------------------------------------------------------------------------------------------------
emacrossover = crossover(ema21, ema55) and ema8 and ema13 > ema55
emacrossunder = crossunder(ema21, ema55) and ema8 and ema13 < ema55

//Long----------------------------------------------------------------------------------------------------------------------------------
longCondition = emacrossover
closelongCondition = emacrossunder

strategy.entry("Long", strategy.long, qty=na, when=longCondition)
strategy.close("Close Long", when=closelongCondition)

//Short----------------------------------------------------------------------------------------------------------------------------------
shortCondition = emacrossunder
closeshortCondition = emacrossover

strategy.entry("Short", strategy.short,qty=na, when=shortCondition)
strategy.close("Close Short", when=closeshortCondition)

Published by ChaoZhang on the FMZ strategy square · last modified 2023-09-21. 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/CM-Multiple-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