资源加载中... loading...

Bollinger Bands + RSI + Multi-MA Trend Strategy

Author: ChaoZhang, Date: 2024-05-27 15:20:40
Tags: BBRSIMASMAMACD

img

Overview

This strategy combines Bollinger Bands, RSI, multiple moving averages, and the MACD indicator to construct a complete trading system. Firstly, it uses Bollinger Bands to determine price volatility and the position of the price relative to the middle band to identify trends. Simultaneously, it employs the RSI indicator to assess overbought and oversold conditions and detect potential trend reversals using RSI divergences. Multiple moving averages are used for trend tracking and determining support and resistance levels. Finally, the MACD indicator is also used to assist in judging trends and potential reversals. By comprehensively considering these indicators, the strategy formulates entry and exit conditions to build a complete trading strategy.

Strategy Principles

  1. Use a 20-period Bollinger Band with 2 standard deviations to determine the trend based on the position of the closing price relative to the middle band.
  2. Calculate the 14-period RSI and use the crossover of RSI with the 30 and 70 levels to identify oversold and overbought conditions, recognizing potential reversals.
  3. Calculate simple moving averages with periods of 34, 89, 144, 233, 377, and 610. Confirm the trend through the bullish arrangement of the moving averages, which can also serve as support and resistance levels.
  4. Compute the MACD indicator based on the 12, 26, 9 parameters and use the crossover of the MACD histogram with the zero axis to assist in judging trend reversals.
  5. Comprehensively assess the above indicators to formulate entry and exit logic:
    • Entry: Open a long position when the closing price is above the middle Bollinger Band and the short-term moving average is above the long-term moving average.
    • Exit: Close half of the position when the closing price falls below the middle Bollinger Band, and close all positions when the short-term moving average falls below the long-term moving average.

Strategy Advantages

  1. Bollinger Bands can objectively quantify price volatility, providing a basis for trend determination.
  2. Introducing the RSI indicator helps identify overbought and oversold conditions and captures potential trend reversal opportunities.
  3. The combination of multiple moving averages allows for a more comprehensive analysis of trend conditions across different time scales.
  4. The MACD indicator can serve as an auxiliary judgment for trends and reversals, improving the reliability of signals.
  5. The entry and exit logic incorporates the idea of position management, gradually reducing positions to control risk when the trend is uncertain.

Strategy Risks

  1. In choppy markets, Bollinger Bands and moving average systems may generate frequent and contradictory signals.
  2. The RSI and MACD indicators may remain in overbought or oversold zones for extended periods during strong trending markets, losing their predictive power.
  3. Parameter selection (such as Bollinger Band period, moving average periods, etc.) has a certain subjectivity, and different parameters may lead to different results.
  4. The lack of a stop-loss mechanism may amplify the risk of individual trades.
  5. The strategy may not be able to respond promptly to extreme events such as black swans, resulting in significant drawdowns.

Strategy Optimization Directions

  1. Perform more systematic optimization of the parameters for each indicator, such as the period and width of Bollinger Bands, the period and thresholds of RSI, etc.
  2. Introduce more confirmation signals, such as changes in trading volume, to improve the reliability of signals.
  3. Incorporate stop-loss and take-profit mechanisms into the entry and exit conditions to better control the risk of individual trades.
  4. Consider introducing a position adjustment mechanism to flexibly adjust positions under different market conditions and improve the risk-reward ratio.
  5. Design contingency plans for extreme events, such as hedging based on the VIX index or dynamically weighting Alpha factors.

Summary

This strategy constructs a relatively comprehensive trading system from multiple dimensions, including trend identification, overbought and oversold judgments, multi-time scale analysis, and position control. However, the strategy needs further optimization in dealing with choppy markets and extreme events, and it lacks more systematic parameter optimization and risk control. In the future, the strategy can continue to improve in terms of more refined signal filtering, dynamic weight adjustment, and response to extreme events. Through continuous backtesting optimization and live trading verification, this strategy has the potential to grow into a robust and sustainable quantitative trading strategy.


/*backtest
start: 2023-05-21 00:00:00
end: 2024-05-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bollinger Bands + RSI Strategy with MA", overlay=true)

// Bollinger Bands
length = input.int(20, title="BB Length")
mult = input.float(2.0, title="BB Mult")
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper_band = basis + dev
lower_band = basis - dev

// RSI
rsi_length = input.int(14, title="RSI Length")
rsi_oversold = input.int(30, title="RSI Oversold", minval=0, maxval=100)
rsi_overbought = input.int(70, title="RSI Overbought", minval=0, maxval=100)
rsi = ta.rsi(close, rsi_length)

// RSI Divergence
rsi_divergence_bottom = ta.crossunder(rsi, rsi_oversold)
rsi_divergence_peak = ta.crossunder(rsi_overbought, rsi)

// Moving Averages
ma34 = ta.sma(close, 34)
ma89 = ta.sma(close, 89)
ma144 = ta.sma(close, 144)
ma233 = ta.sma(close, 233)
ma377 = ta.sma(close, 377)
ma610 = ta.sma(close, 610)

// MACD Calculation
[macd_line, signal_line, _] = ta.macd(close, 12, 26, 9)
macd_histogram = macd_line - signal_line

// MACD Divergence
macd_divergence_bottom = ta.crossunder(macd_histogram, 0)
macd_divergence_peak = ta.crossover(macd_histogram, 0)

// Conditions for Buy and Sell
basis_gt_ma34 = basis > ma34
ma34_gt_ma89 = ma34 > ma89

// Entry condition
buy_condition = basis_gt_ma34 and ma34_gt_ma89 
sell_condition =  basis <ma34

// Calculate position size
position_size = 1.0  // 100% capital initially

// Update position size based on conditions
if (sell_condition)
    position_size := 0.5  // Sell half of the position
if (not basis_gt_ma34)
    position_size := 0.0  // Sell all if basis < ma34

// Entry and exit strategy
if (buy_condition)
    strategy.entry("Buy", strategy.long, qty=position_size)
if (sell_condition)
    strategy.close("Buy")

// Plot Bollinger Bands and Moving Averages
bb_fill_color = basis > basis[1] ? color.new(color.blue, 90) : color.new(color.blue, 10)
plot(basis, color=color.blue, title="Basis")
plot(upper_band, color=color.red, title="Upper Band")
plot(lower_band, color=color.green, title="Lower Band")
fill(plot1=plot(upper_band), plot2=plot(lower_band), color=bb_fill_color, title="BB Fill")
plot(ma34, color=color.orange, title="MA34")
plot(ma89, color=color.purple, title="MA89")
plot(ma144, color=color.gray, title="MA144")
plot(ma233, color=color.blue, title="MA233")
plot(ma377, color=color.red, title="MA377")
plot(ma610, color=color.green, title="MA610")

// Plot RSI Divergence
plotshape(series=rsi_divergence_bottom, style=shape.triangleup, location=location.abovebar, color=color.green, size=size.small)
plotshape(series=rsi_divergence_peak, style=shape.triangledown, location=location.belowbar, color=color.red, size=size.small)

// Plot MACD Histogram Divergence
plotshape(series=macd_divergence_bottom, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(series=macd_divergence_peak, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

template: strategy.tpl:40:21: executing "strategy.tpl" at <.api.GetStrategyListByName>: wrong number of args for GetStrategyListByName: want 7 got 6