MACD Trend Following Strategy

Author: ChaoZhang, Date: 2023-11-15 17:08:15



This strategy is named the MACD Trend Following Strategy. It is a quantitative strategy that utilizes the MACD indicator to determine price trends and follows the trends to trade. The strategy aims to capture mid-to-long-term trends and adjust positions in a timely manner when trend reversals occur.

Strategy Logic

The strategy uses the MACD indicator to determine price trends. The MACD is a breakout indicator formed by the fast EMA line (12-day) and the slow EMA line (26-day). The difference between these two lines forms the MACD histogram, and the 9-day EMA of the histogram is the MACD signal line. When the MACD line crosses above the signal line, it is a golden cross, indicating an upward trend. When the MACD line crosses below the signal line, it is a dead cross, indicating a downward trend.

The strategy first calculates the MACD line and signal line, then computes the difference delta between the two lines. When delta crosses above 0, a buy signal is generated. When delta crosses below 0, a sell signal is generated. Based on these two signals, the strategy adjusts positions accordingly. To filter out noise, the strategy also introduces an EMA line - valid trade signals are only generated when the price breaks through this EMA line.

Specifically, the strategy logic is:

  1. Calculate the MACD line, signal line and the difference delta
  2. Determine if delta crossing above or below 0 signifies a trend reversal
  3. Compute an EMA line to serve as a filter
  4. When delta crosses above 0 and price is above EMA, generate buy signal
  5. When delta crosses below 0 and price is below EMA, generate sell signal

With this design, the strategy is able to follow mid-to-long-term trends and quickly adjust positions when trends reverse. It avoids being misled by short-term market noises.


The strategy has the following advantages:

  1. Use MACD to accurately detect trend reversal points for entry and exit timing
  2. Adopt EMA filter to avoid interference from short-term market noises
  3. Only follow mid-to-long-term trends, avoiding whipsaws in ranging markets
  4. Simple and clear logic, easy to understand and modify the code
  5. Flexibility in controlling trading frequency by adjusting parameters
  6. High capital utilization to fully track mid-to-long-term trends


There are some risks to be mindful of:

  1. MACD as a trend following indicator can generate false signals in choppy markets
  2. EMA filter may filter out some valid trading opportunities
  3. Improper parameter settings may lead to over- or under-trading
  4. Unable to respond to short-term market changes due to lagging nature
  5. May miss optimal timing at trend turning points due to lag


  1. Optimize parameters and adjust EMA filter to reduce false signals
  2. Incorporate other indicators for confirmation to uncover more trades
  3. Implement stop loss to control loss on single trades
  4. Shorten holding period to improve flexibility


The strategy can be further optimized in the following ways:

  1. Add other indicators to form a combined system for higher accuracy
  2. Introduce profit taking and stop loss mechanisms for better risk control
  3. Incorporate volume indicators to avoid false breakouts
  4. Adapt parameters dynamically based on market conditions to improve robustness
  5. Refine entry and exit logic to improve timing
  6. Scale in positions to better follow trends and reduce risk

Significant improvement can be achieved through methods like indicator combos, adaptive parameters, stop loss/profit taking etc.


In summary, the MACD Trend Following Strategy utilizes the simple and effective MACD indicator to identify mid-to-long-term trends, and implements a clear trend following logic. It has the capacity to capture trends as well as reasonable risk control measures. With further optimizations, the strategy can become a very practical quant trading system. It suits investors seeking steady long-term gains over short-term profits.

start: 2022-11-14 00:00:00
end: 2023-10-27 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]

strategy(title = "Noro's MACD Strategy v1.0", shorttitle = "MACD str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
usefil = input(false, defval = false, title = "Use EMA filter")
lenfil = input(5, defval = 5, minval = 1, maxval = 50, title = "EMA filter period")

fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)

MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

ema = ema(close, lenfil)
trend = crossover(delta, 0) == true ? 1 : crossunder(delta, 0) == true ? -1 : trend[1]
up = trend == 1 and (low < ema or usefil == false) ? 1 : 0
dn = trend == -1 and (high > ema or usefil == false) ? 1 : 0

plot(ema, color = black, transp = 0)

if (up == 1)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if (dn == 1)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)