0bps

Strategy vault / Trend following

Multi Timeframe Heikin Ashi Moving Average Trend Following Trading System

This strategy is a multi-timeframe trend following system based on Heikin-Ashi candlesticks and Exponential Moving Average (EMA) crossovers. It combines the smoothing properties of Heikin-Ashi candlesticks with the…

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

IMG

Overview

This strategy is a multi-timeframe trend following system based on Heikin-Ashi candlesticks and Exponential Moving Average (EMA) crossovers. It combines the smoothing properties of Heikin-Ashi candlesticks with the trend-following capabilities of moving averages across different timeframes, using MACD as an additional filter to accurately capture market trends. The strategy employs a hierarchical timeframe design, calculating and validating signals across 60-minute, 180-minute, and 15-minute timeframes.

Strategy Principles

The core logic includes several key components:

  1. Heikin-Ashi calculation: Smooths original price data through special OHLC calculations to reduce market noise.
  2. Multi-timeframe EMA system: Calculates Heikin-Ashi EMA on 180-minute timeframe, forming crossover signals with slow EMA on 60-minute timeframe.
  3. MACD filter: Calculates MACD indicator on 15-minute timeframe to validate trading signals.
  4. Signal generation rules: Generates buy signals when fast Heikin-Ashi EMA crosses above slow EMA with MACD confirmation (if enabled); reverse for sell signals.

Strategy Advantages

  1. Strong signal smoothing: Heikin-Ashi candlesticks effectively reduce false signals.
  2. Multi-timeframe validation: Using different timeframes increases signal reliability.
  3. Effective trend following: EMA crossover system effectively captures medium to long-term trends.
  4. Flexible filtering mechanism: Optional MACD filter provides additional signal confirmation.
  5. Strong parameter adaptability: Multiple key parameters can be optimized for different market characteristics.

Strategy Risks

  1. Choppy market risk: May generate frequent false breakout signals in sideways markets.
  2. Lag risk: Multi-timeframe validation may lead to slightly delayed entries.
  3. Parameter sensitivity: Different parameter combinations may result in significant performance variations.
  4. Market environment dependency: Strategy performs better in strong trend markets, may underperform in other conditions.

Optimization Directions

  1. Add volatility filtering: Introduce ATR or Bollinger Bands for market volatility assessment.
  2. Optimize timeframe selection: Adjust timeframe combinations based on specific instrument characteristics.
  3. Improve stop-loss mechanism: Add trailing stops or volatility-based dynamic stop-losses.
  4. Enhance position sizing: Dynamically adjust position sizes based on signal strength and market volatility.
  5. Include market environment analysis: Add trend strength indicators to differentiate market conditions.

Summary

This strategy constructs a complete trend following trading system using multi-timeframe Heikin-Ashi and EMA systems combined with MACD filtering. The design thoroughly considers signal reliability and system stability, capable of adapting to different market environments through parameter optimization and risk control mechanisms. The strategy's core strengths lie in signal smoothing and multi-validation mechanisms, while attention must be paid to choppy market risks and parameter optimization issues.

Source Pine Script

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

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

//@version=5
strategy("Heikin Ashi Candle Time Frame @tradingbauhaus", shorttitle="Heikin Ashi Candle Time Frame @tradingbauhaus", overlay=true)

// Inputs
res = input.timeframe(title="Heikin Ashi Candle Time Frame", defval="60")
hshift = input.int(1, title="Heikin Ashi Candle Time Frame Shift")
res1 = input.timeframe(title="Heikin Ashi EMA Time Frame", defval="180")
mhshift = input.int(0, title="Heikin Ashi EMA Time Frame Shift")
fama = input.int(1, title="Heikin Ashi EMA Period")
test = input.int(1, title="Heikin Ashi EMA Shift")
sloma = input.int(30, title="Slow EMA Period")
slomas = input.int(1, title="Slow EMA Shift")
macdf = input.bool(false, title="With MACD filter")
res2 = input.timeframe(title="MACD Time Frame", defval="15")
macds = input.int(1, title="MACD Shift")

// Heikin Ashi calculation
var float ha_open = na
ha_close = (open + high + low + close) / 4
ha_open := na(ha_open[1]) ? (open + close) / 2 : (ha_open[1] + ha_close[1]) / 2
ha_high = math.max(high, math.max(ha_open, ha_close))
ha_low = math.min(low, math.min(ha_open, ha_close))

// Adjusted Heikin Ashi Close for different timeframes
mha_close = request.security(syminfo.tickerid, res1, ha_close[mhshift])

// MACD calculation
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
macdl = request.security(syminfo.tickerid, res2, macdLine[macds])
macdsl = request.security(syminfo.tickerid, res2, signalLine[macds])

// Moving Averages
fma = ta.ema(mha_close[test], fama)
sma = ta.ema(ha_close[slomas], sloma)
plot(fma, title="Heikin Ashi EMA", color=color.green, linewidth=2)
plot(sma, title="Slow EMA", color=color.red, linewidth=2)

// Strategy Logic
golong = ta.crossover(fma, sma) and (macdl > macdsl or not macdf)
goshort = ta.crossunder(fma, sma) and (macdl < macdsl or not macdf)

// Plot Shapes for Buy/Sell Signals
plotshape(golong, color=color.green, text="Buy", style=shape.triangleup, location=location.belowbar)
plotshape(goshort, color=color.red, text="SELL", style=shape.triangledown, location=location.abovebar)

// Strategy Orders
strategy.entry("Long", strategy.long, when=golong)
strategy.close("Long", when=goshort)
strategy.entry("Short", strategy.short, when=goshort)
strategy.close("Short", when=golong)

// Alerts
alertcondition(golong, "Heikin Ashi BUY", "")
alertcondition(goshort, "Heikin Ashi SELL", "")


Published by ChaoZhang on the FMZ strategy square · last modified 2025-01-06. 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-Timeframe-Heikin-Ashi-Moving-Average-Trend-Following-Trading-System.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