Multi-factor Trend Trading Strategy

Author: ChaoZhang, Date: 2024-01-29 15:17:38



The multi-factor trend trading strategy comprehensively utilizes various technical indicators such as moving averages, Bollinger bands, support and resistance levels, Fibonacci retracements, etc., to identify stock price trends and perform trend-following trading. The strategy combines breakout trading and moving average crossover signals to capture price momentum in a timely manner while determining stock price trends, with the aim of outperformance.

Strategic Principle

The multi-factor trend trading strategy is mainly based on the following key elements:

  1. Moving averages track price trends. A combination of a fast moving average (9-day) and a slow moving average (21-day) is employed. Buy signals are generated when the fast MA crosses above the slow MA and sell signals when cross below.

  2. Support and resistance levels determine momentum. Preset support and resistance levels. Buy signals are generated when the price breaks above resistance, capturing the upward breakout in price. Sell signals when break below support, tracking downward penetration.

  3. Bollinger bands identify abnormal volatility. The upper and lower bands of Bollinger bands judge whether stock prices have entered a consolidation period, and discover abnormal volatility through penetration of the bands.

  4. Fibonacci retracement determines reversal points. Use Fibonacci retracement levels to determine whether rising stock prices have shown significant pullback to reach reversal points.

By combining these signals and judgment rules, the strategy can effectively identify price trends and grasp the timing of entries and exits. At the same time, it incorporates breakout signals from fast moving averages, support/resistance and Bollinger bands to track price momentum and implement trend trading.


The multi-factor trend trading strategy has the following advantages:

  1. Integrates multiple technical indicators to determine price trends and improve accuracy.

  2. Fast MAs combined with support/resistance levels and Bollinger bands breakouts increase precision in capturing trading opportunities.

  3. Applying Fibonacci retracements to determine price reversal points mitigates trading risk.

  4. Tracking strong price trends is expected to achieve higher excess returns.

  5. Combining trend and momentum indicators provides consideration of both long-term trends and short-term situations for steady returns.

Risk Analysis

The multi-factor trend trading strategy also carries some risks:

  1. Probability of false breakouts in stock prices, which may miss true trends or cause unnecessary losses. This can be mitigated by adjusting parameter combinations.

  2. Complex multi-signal judgments and parameter settings increase the possibility of model overfit or failure. Parameter tuning and optimization is needed to improve robustness.

  3. Prolonged price consolidation may put the strategy at risk of losses and anxiety. In such cases, position sizing should be reduced and switch to short-term trading.

  4. Individual stock risks and overall market risks should be fully considered to avoid impacts from events like insufficient liquidity and news shocks.

Optimization Directions

The multi-factor trend trading strategy can also be optimized in several aspects:

  1. Evaluate the effects of different parameter cycles and find the optimal parameter combination. For example, test the 5, 10-day fast and slow MA combinations.

  2. Incorporate automatic stop-loss mechanisms. Adopt stop-loss exit to lock in profits when prices pullback to stop-loss lines, avoiding enlargement of losses.

  3. Incorporate volatility metrics to judge if the market has entered panic or exuberance stages, and dynamically adjust position sizing.

  4. Add machine learning models for price trend prediction and classification to determine entries and exits while reducing misjudgments.

  5. Evaluate effects of multi-factor weight configurations on strategy stability and excess returns. Optimize weight allocation to enhance robustness.


The multi-factor trend trading strategy utilizes a combination of technical analysis methods including moving averages, Bollinger bands, support/resistance levels etc. to determine price trends. The abundant set of signal judgment rules reduces risks of misjudgments compared to single-indicator decisions and improves decision accuracy. Additionally, mechanisms to track short-term price momentum and confirmation of reversal points take both long-term trends and short-term situations into consideration, positioning investors to trade along with trends and garner sustained profits. Nonetheless parameter settings and trend judgments contain a certain degree of subjectivity. Substantial backtests and optimizations are needed to find the optimal parameter combinations for robust and profitable operations of the strategy.

start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]

strategy("Combined Strategy", overlay=true)

// Moving Averages
fastMA = sma(close, 9)
slowMA = sma(close, 21)

// Bollinger Bands
bb_upper = sma(close, 20) + 2 * stdev(close, 20)
bb_lower = sma(close, 20) - 2 * stdev(close, 20)

// Support and Resistance
support = 1500  // Replace with your support level
resistance = 1600  // Replace with your resistance level

// Trend Following (MA Crossovers)
maCrossUp = crossover(fastMA, slowMA)
maCrossDown = crossunder(fastMA, slowMA)

// Breakout Trading
breakoutUp = close > resistance
breakoutDown = close < support

// Entry Conditions
longCondition = maCrossUp or breakoutUp
shortCondition = maCrossDown or breakoutDown

// Exit Conditions
exitLongCondition = crossunder(close, slowMA)
exitShortCondition = crossover(close, slowMA)

strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)

strategy.exit("ExitLong", from_entry="Long", when=exitLongCondition)
strategy.exit("ExitShort", from_entry="Short", when=exitShortCondition)

// Plotting Support and Resistance Lines
plot(support,, style=plot.style_line, linewidth=2)
plot(resistance,, style=plot.style_line, linewidth=2)

// Plotting Bollinger Bands

// Plotting Moving Averages
plot(fastMA,, title="Fast MA")
plot(slowMA, color=color.purple, title="Slow MA")