Multi-Indicator Momentum Breakout Strategy with Adaptive Trailing Stop System

OBV RSI MFI EMA Net Volume Trailing Stop momentum BREAKOUT
Created on: 2025-07-08 14:35:20 Modified on: 2025-07-08 14:35:20
Copy: 0 Number of hits: 273
avatar of ianzeng123 ianzeng123
2
Follow
319
Followers

 Multi-Indicator Momentum Breakout Strategy with Adaptive Trailing Stop System  Multi-Indicator Momentum Breakout Strategy with Adaptive Trailing Stop System

Overview

This strategy is a quantitative trading system that combines multiple indicators, primarily utilizing the synergy between volume confirmation and momentum indicators to capture market breakout opportunities. The strategy integrates On-Balance Volume (OBV), Net Volume, Relative Strength Index (RSI), and Money Flow Index (MFI), along with Exponential Moving Average (EMA) for trend confirmation, and employs a dynamic trailing stop mechanism to optimize exit points, effectively balancing profitability and risk control.

According to backtest data, the strategy achieved an 83.20% win rate on a 15-minute timeframe over the past 12 months, with an average profit of 746.18 USDT per trade. The best single trade yielded 65,654 USDT, and a total of 381 trades were completed. These figures indicate that the strategy possesses considerable stability and profit potential in high-frequency trading environments.

Strategy Principle

The core logic of this strategy is based on a joint confirmation mechanism of multiple indicators, with specific operational principles as follows:

  1. Entry Conditions: The system primarily captures long opportunities, triggering buy signals when all of the following conditions are met:

    • OBV indicator is higher than its 21-period simple moving average, indicating volume supports price increases
    • Net volume is positive, confirming that buying pressure exceeds selling pressure in the current period
    • RSI indicator is above 45, indicating sufficient momentum without being excessively overbought
    • MFI indicator is below 50, suggesting that potential for capital inflow remains ample
  2. Exit Mechanism: Employs a triple-protection dynamic trailing stop system:

    • Trigger Offset: Activates trailing stop when price rises more than 0.35% above entry price
    • Trail Offset: Triggers position closure when price retraces more than 0.3% from the highest point
    • Maximum Loss Control: Forces position closure if price drops more than 3% below entry price, regardless of whether the trailing stop is activated
  3. Technical Indicator Combination:

    • Comparison of OBV with its moving average to detect volume accumulation trends
    • Net volume as a real-time indicator of short-term buying and selling pressure
    • RSI to identify price momentum status
    • MFI to evaluate capital flow direction and market activity
    • 21-period EMA to confirm overall trend direction

This multi-layered confirmation mechanism ensures the quality of entry signals, while dynamic trailing stops effectively lock in profits and control risk.

Strategy Advantages

Through in-depth analysis of the strategy’s code structure and logic, the following significant advantages can be summarized:

  1. Multi-dimensional Signal Confirmation: Combining indicators from three dimensions—price, volume, and momentum—greatly reduces the probability of false signals. When OBV, Net Volume, RSI, and MFI simultaneously meet conditions, the reliability of entry signals significantly improves.

  2. Volume-Supported Price Action: Through dual verification of OBV and Net Volume, the strategy ensures price movements are supported by sufficient trading volume, avoiding the trap of “price movements without volume.”

  3. Intelligent Dynamic Stop Loss: The strategy does not use fixed stop losses but automatically adjusts stop loss positions based on price behavior. This method can protect capital while giving price sufficient room to fluctuate.

  4. Layered Risk Control: Through the three-layer mechanism of trigger offset, trail offset, and maximum loss, the strategy achieves refined risk management, preventing major losses caused by the failure of a single protection mechanism.

  5. High-Frequency Trading Adaptability: Optimized for the 15-minute timeframe, the strategy can capture intraday fluctuations and create multiple trading opportunities by leveraging short-term market sentiment fluctuations.

  6. Stable Win Rate Performance: The 83.20% win rate demonstrates consistent signal quality, which is crucial for the long-term sustainability of quantitative trading strategies.

Strategy Risks

Despite the strategy’s excellent performance, through code analysis, we can still identify the following potential risks:

  1. Volatility Dependence: The strategy relies on sufficient market volatility to trigger the trailing stop mechanism. In low-volatility environments, this may lead to prolonged position holding without effectively locking in profits. Solution: A time-based take-profit mechanism could be added, or trigger offset parameters could be adjusted during low-volatility periods.

  2. Large Average Losses: Backtest data shows average losses (-30,713 USDT) are much larger than average profits (7,097 USDT). Despite the high win rate, a few large losses could seriously impact overall performance. Solution: Consider setting stricter maximum loss controls or adding more exit filtering conditions.

  3. Low Profit Factor: The profit factor of 0.231 indicates room for improvement in risk-reward ratio. Solution: Reassess the stop-loss strategy, possibly reducing the maximum loss percentage or adding partial profit-locking mechanisms.

  4. Single Direction Preference: The strategy is primarily optimized for long opportunities and may perform poorly in consistently declining markets. Solution: Consider activating the short conditions already defined but unused in the code, or add overall market trend filters.

  5. Parameter Sensitivity: The three key parameters of trailing stops (trigger offset, trail offset, maximum loss) significantly impact strategy performance. Improper parameter settings may lead to premature exits or excessive losses. Solution: Conduct parameter sensitivity analysis to determine optimal parameter ranges, and consider dynamically adjusting these parameters based on market volatility.

Strategy Optimization Directions

Based on in-depth analysis of the strategy code, here are several feasible optimization directions:

  1. Adaptive Parameter Adjustment: Currently, the strategy uses fixed trailing stop parameters. Consider dynamically adjusting trigger offset and trail offset based on market volatility (such as the ATR indicator). Increase offsets in high-volatility markets and decrease them in low-volatility markets to better adapt to different market environments.

  2. Add Trend Strength Filtering: Incorporate trend strength assessment into entry conditions, such as adding ADX (Average Directional Index), entering only when the trend is strong enough to avoid excessive trading in range-bound markets. This can effectively reduce false breakout signals.

  3. Batch Entry and Exit Mechanisms: Modify the code to implement batch position building and liquidation. For example, divide funds into three portions, enter with 13 when basic conditions are met, add positions when conditions strengthen, and similarly complete exits in three stages. This can optimize average holding price and reduce timing pressure.

  4. Integrate Market Environment Analysis: Add market environment assessment on higher timeframes, such as determining trend direction on 1-hour or 4-hour charts, executing 15-minute signals only when supported by the larger trend to improve signal quality.

  5. Optimize Profit Factor: Add partial profit-locking mechanisms. For example, when profits reach a certain percentage, close part of the position to lock in profits, with the remainder continuing to use trailing stops. This balances the contradiction between high win rate and improving average profit-loss ratio.

  6. Enhance Short Strategy: Activate the short conditions already defined in the code and specifically optimize for short strategies, enabling the strategy to maintain stable performance across different market environments.

  7. Time Filters: Add time filtering conditions to avoid known periods of low liquidity or high volatility, such as before and after major economic data releases, to reduce risks brought by abnormal market conditions.

Summary

This multi-indicator momentum breakout strategy cleverly combines volume analysis, momentum indicators, and trend confirmation to build a logically rigorous trading system. Its core advantage lies in using multi-dimensional signal confirmation to improve entry quality while achieving dynamic risk management through adaptive trailing stop mechanisms.

Although the 83.20% high win rate is impressive, the fact that average losses exceed average profits indicates room for improvement in risk control. By implementing the suggested optimization measures, especially dynamic parameter adjustment, batch operations, and partial profit locking, the strategy has the potential to significantly improve its overall risk-reward ratio while maintaining a high win rate.

For experienced quantitative traders, this strategy provides a solid framework that can be customized according to personal risk preferences and capital management principles. Most crucially, traders should understand the logical principles behind the strategy rather than focusing solely on past backtest performance, as market environments are constantly changing, and successful strategies need to possess adaptability and robustness.

Strategy source code
/*backtest
start: 2025-06-07 00:00:00
end: 2025-07-04 08:00:00
period: 2m
basePeriod: 2m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("BullFinder_15M_OBV_RSI_MFI", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === Göstergeler ===
// OBV
obv = ta.cum(math.sign(ta.change(close)) * volume)
obvMA = ta.sma(obv, 21)

// Net Volume
netVol = request.security(syminfo.tickerid, "1", volume - volume[1])

// RSI & MFI
rsi = ta.rsi(close, 14)
mfi = ta.mfi(hlc3, 14)
ema21 = ta.ema(close, 21)

// === Trailing Stop Parametreleri ===
trigger_offset = input.float(0.35, "Trigger Offset (%)") / 100
trail_offset   = input.float(0.3,  "Trail Offset (%)") / 100
max_loss       = input.float(3.0,  "Max Loss (%)")     / 100

// === Durum Değişkenleri ===
var float highestPrice = na
var bool  trailActive = false

// === GİRİŞ KOŞULLARI ===
// Long (Aynı kaldı)
longCond = obv > obvMA and netVol > 0 and rsi > 45 and mfi < 50

// Short (Genişletildi - v2.9)
shortCond1 = rsi > 70 and obv < obv[1] and netVol < 0 and close < close[1]              // Reversal
shortCond2 = rsi > 65 and mfi > 80 and close < ema21                                    // Weak Pullback
shortCond  = shortCond1 or shortCond2

// === Giriş Emirleri ===
if longCond
    strategy.entry("Long", strategy.long)
    highestPrice := close
    trailActive := false

if shortCond
    // strategy.entry("Short", strategy.short)
    highestPrice := close
    trailActive := false

// === Long Trailing Stop ===
if strategy.position_size > 0
    highestPrice := math.max(highestPrice, high)
    triggerPrice = strategy.opentrades.entry_price(0) * (1 + trigger_offset)
    lossLevel    = strategy.opentrades.entry_price(0) * (1 - max_loss)
    trailLevel   = highestPrice * (1 - trail_offset)

    if not trailActive and close > triggerPrice
        trailActive := true

    if (trailActive and close < trailLevel) or close < lossLevel
        strategy.close("Long")

// === Short Trailing Stop ===
if strategy.position_size < 0
    highestPrice := math.min(highestPrice, low)
    triggerPrice = strategy.opentrades.entry_price(0) * (1 - trigger_offset)
    lossLevel    = strategy.opentrades.entry_price(0) * (1 + max_loss)
    trailLevel   = highestPrice * (1 + trail_offset)

    if not trailActive and close < triggerPrice
        trailActive := true

    if (trailActive and close > trailLevel) or close > lossLevel
        strategy.close("Short")


// === ALERT ŞARTLARI ===
alertcondition(longCond, title="BullFinder Long Signal", message="BullFinder: Long Entry on {{ticker}} at {{close}}")