0bps

Strategy vault / Trend following

Moving Average Ribbon Trend Strategy

The Moving Average Ribbon Trend Strategy is a trend-following strategy based on moving averages. It uses a single moving average to construct a price channel and determines the trend direction based on the price…

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

IMG

Overview

The Moving Average Ribbon Trend Strategy is a trend-following strategy based on moving averages. It uses a single moving average to construct a price channel and determines the trend direction based on the price relative to the channel, then places trades accordingly. This strategy works well in trending markets and is able to capture longer-term price trends.

Strategy Logic

The strategy calculates a simple moving average with a specified period length (default 20 periods) and builds a price channel using the MA values. The upper and lower bands of the channel are the highest and lowest values of the MA respectively. If the closing price is above the upper band, an uptrend is determined. If the closing price is below the lower band, a downtrend is identified.

When a trend change is detected, the strategy will place trades. If the trend changes from down to up, a long position will be opened. If the trend changes from up to down, a short position will be opened. Existing long positions will be closed if the trend turns down, and existing short positions will be closed if the trend turns up.

Specifically, the trading logic is:

  • Open long if closing price > previous upper band
  • Open short if closing price < previous lower band
  • Close long if closing price < lower band
  • Close short if closing price > upper band

The strategy uses a single MA to construct the price channel and identify trend changes by price breakouts. It is simple, intuitive and easy to implement, suitable as a trend following strategy.

Advantage Analysis

The Moving Average Ribbon Trend Strategy has the following advantages:

  • Simple logic, easy to understand and implement, lowers execution difficulty
  • Uses single MA, fewer parameters, avoids overfitting
  • Price channel clearly identifies trend turning points
  • Customizable channel width to adjust sensitivity
  • MA breakout filters some false breakouts
  • Position size accumulates along the trend, captures trend moves
  • Position adjusted by MA, actively controls risk

In summary, the strategy is based on simple logic, uses the price channel to identify trend changes, and can effectively follow longer-term price trends. It is suitable as a trend following strategy.

Risk Analysis

The strategy also has some risks:

  • MA lag may miss best entry timing for trend change
  • Whipsaws may cause unnecessary losses in ranging markets
  • Long term trend trading can face larger drawdowns, requires adequate capital
  • Single parameter may cause overfitting, underperform in live trading
  • Unable to distinguish cycles, may be insensitive to shorter fluctuations

The risks can be addressed by:

  • Adjust MA period to reduce lag
  • Add filters to avoid whipsaws in ranging markets
  • Optimize position sizing to limit losses
  • Parameter tuning with live data
  • Add multiple MAs to identify trends on different levels

Enhancement Opportunities

The strategy can be enhanced in the following aspects:

  • Optimize MA indicator: Test different MAs like WMA to improve performance.

  • Add filters: Add filters like volume, volatility before entry to avoid whipsaws.

  • Multiple timeframes: Use MAs on different timeframes to identify more trends.

  • Dynamic parameters: Allow dynamic adjustment of MA period and channel width based on market conditions.

  • Position sizing: Adjust position size based on market conditions to limit losses. Can set profit targets to reduce size.

  • Machine learning: Use ML to find optimal parameter combinations.

  • Ensemble methods: Combine with other trend following strategies for more robustness.

In summary, the strategy can be enhanced comprehensively in terms of indicator selection, filters, timeframes, dynamic parameters, position sizing etc. This will make the strategy more robust and flexible across different market environments.

Conclusion

The Moving Average Ribbon Trend Strategy is a simple trend following strategy. It uses a single MA to build a price channel and identifies trend direction by channel breakouts, aiming to capture medium- to long-term trends. The strategy has advantages like simple logic, few parameters, and ease of implementation. But it also has risks like lagging in trend identification and being whipsawed. Further enhancements can be made through optimizing MA, adding filters, dynamic parameters etc. to improve live performance. Overall, the strategy provides an intuitive approach to using price channels for trend identification and serves as a basic trend following strategy.

Parameters

NameDefaultWhat it controls
v_input_120MA Length
v_input_2_ohlc40MA Source: ohlc4 | high | low | open | hl2 | hlc3 | hlcc4 | close

Source Pine Script

/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
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/
// © noro

//@version=4
strategy(title = "Noro's Trend Ribbon Strategy", shorttitle = "Trend Ribbon str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_value = 0.1)

len = input(20, minval = 5, title = "MA Length")
src = input(ohlc4, title = "MA Source")

//MA
ma = sma(src, len)
plot(ma, color = color.black)

//Channel
h = highest(ma, len)
l = lowest(ma, len)
ph = plot(h)
pl = plot(l)

//Trend
trend = 0
trend := close > h[1] ? 1 : close < l[1] ? -1 : trend[1]

//BG
col = trend == 1 ? color.blue : color.red
fill(ph, pl, color = col, transp = 50)

//Trading
if close > h[1]
    strategy.entry("Long", strategy.long)
if close < l[1]
    strategy.entry("Short", strategy.short)

Published by ChaoZhang on the FMZ strategy square · last modified 2023-11-02. 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/Moving-Average-Ribbon-Trend-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