The RSI-CCI Fusion strategy combines the strengths of the RSI and CCI indicators to form a powerful trading approach. It captures both momentum and cyclical dynamics for more comprehensive market assessment.
Calculate RSI and CCI values.
Standardize RSI and CCI using z-score for better comparability.
Fuse standardized RSI and CCI with designated weights.
Compute dynamic upper and lower bands to identify overbought/oversold levels.
Consider short when fusion indicator crosses below upper band. Consider long when crossing above lower band.
Compared to using RSI or CCI alone, advantages of this strategy include:
Integrates strengths of both indicators for better accuracy.
More scientific dynamic bands reduce false signals.
Standardization enables comparability, improving fusion.
Can assess both trend and overbought/oversold conditions.
Some risks of this strategy:
Improper parameters may miss key trade points.
Inadequate weights can weaken an indicator’s role.
Ignoring overall trend may cause counter-trend trades.
Band settings too loose or too tight increase misjudgement risks.
It can be optimized by:
Finding optimal parameters through testing.
Adjusting weights based on market conditions.
Incorporating trend and volume indicators for better accuracy.
Setting stop loss/take profit to control risks.
Optimizing bands to balance sensitivity and noise.
The RSI-CCI fusion strategy improves judgement by consolidating indicators. With proper parameters and risk control, it generally outperforms single indicator strategies. But adjustments based on market conditions are still required.
/*backtest start: 2023-08-19 00:00:00 end: 2023-09-18 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // © Julien_Eche //@version=5 // strategy("RSI-CCI Fusion Strategy", shorttitle="RSI-CCI Fusion Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) length = input(14, title="Length") rsi_weight = input.float(0.5, title="RSI Weight", minval=0.0, maxval=1.0) cci_weight = 1.0 - rsi_weight enableShort = input(false, "Enable Short Positions") src = close rsi = ta.rsi(src, length) cci = ta.cci(src, length) // Standardize the RSI and CCI values using z-score rsi_std = ta.stdev(rsi, length) rsi_mean = ta.sma(rsi, length) rsi_z = (rsi - rsi_mean) / rsi_std cci_std = ta.stdev(cci, length) cci_mean = ta.sma(cci, length) cci_z = (cci - cci_mean) / cci_std // Combine the standardized RSI and CCI combined_z = rsi_weight * rsi_z + cci_weight * cci_z // Rescale to the original scale rescaled = combined_z * ta.stdev(combined_z, length) + ta.sma(combined_z, length) // Calculate dynamic upper and lower bands upper_band = ta.sma(rescaled, length) + ta.stdev(rescaled, length) lower_band = ta.sma(rescaled, length) - ta.stdev(rescaled, length) // Buy and sell conditions buySignal = ta.crossover(rescaled, lower_band) sellSignal = ta.crossunder(rescaled, upper_band) // Enter long position if buySignal strategy.entry("Buy", strategy.long) // Exit long position if sellSignal strategy.close("Buy") // Enter short position if enabled if enableShort and sellSignal strategy.entry("Sell", strategy.short) // Exit short position if enabled if enableShort and buySignal strategy.close("Sell")