dev-resources.site
for different kinds of informations.
Multi-Indicator Adaptive Trading Strategy Based on RSI, MACD and Volume
Overview
This strategy is a comprehensive trading system that combines the relative strength index (RSI), moving average convergence divergence (MACD), Bollinger Bands (BB) and volume analysis. The strategy uses the coordination of multi-dimensional technical indicators to conduct a comprehensive analysis of market trends, volatility and volume to find the best trading opportunities.
Strategy Principle
The core logic of the strategy is based on the following aspects:
- Use RSI (14) to determine the overbought or oversold state of the market. RSI below 30 is considered oversold.
- Use MACD (12, 26, 9) to determine the trend direction, and use MACD golden cross as a long signal
- Confirm the validity of price action by calculating the difference between up volume and down volume (Delta Volume)
- Combined with Bollinger Bands to assess price volatility and optimize entry timing
- When RSI is oversold, MACD is golden cross and Delta Volume is positive, the system will issue the best buy signal.
- When MACD crosses or RSI exceeds 60, the system will automatically close the position to control the risk
Strategy Advantages
- Multi-indicator cross-validation improves the reliability of trading signals
- Confirm the validity of price trends through volume analysis
- Includes adaptive moving average type selection to enhance strategy flexibility
- It has a complete risk control mechanism, including stop loss and stop profit settings
- Strategy parameters can be optimized and adjusted according to different market conditions
Strategy Risks
- Combining multiple indicators may cause signal lag
- False signals may be generated in a sideways market
- Excessive parameter optimization may lead to overfitting
- High-frequency trading may lead to higher transaction costs
- When the market fluctuates violently, it may cause a large retracement
Strategy Optimization Direction
- Introduce an adaptive parameter mechanism to dynamically adjust indicator parameters according to market conditions
- Added trend strength filter to reduce false signals in sideways markets
- Optimize the stop-loss and stop-profit mechanism to improve the efficiency of capital utilization
- Added volatility filtering mechanism to adjust positions in high volatility environment
- Develop intelligent fund management system to achieve dynamic position control
Summary
This is a composite trading strategy that integrates multiple technical indicators, capturing market opportunities through multi-dimensional analysis such as RSI, MACD, and trading volume. The strategy has strong adaptability and scalability, and also has a perfect risk control mechanism. Through continuous optimization and improvement, the strategy is expected to maintain stable performance in different market environments.
Strategy source code
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Liraz sh Strategy - RSI MACD Strategy with Bullish Engulfing and Net Volume", overlay=true, currency=currency.NONE, initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3)
// Input parameters
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "RSI Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
fastLength = input.int(12, minval=1, title="MACD Fast Length")
slowLength = input.int(26, minval=1, title="MACD Slow Length")
signalLength = input.int(9, minval=1, title="MACD Signal Length")
startDate = input(timestamp("2018-01-01"), title="Start Date")
endDate = input(timestamp("2069-12-31"), title="End Date")
// Custom Up and Down Volume Calculation
var float upVolume = 0.0
var float downVolume = 0.0
if close > open
upVolume += volume
else if close < open
downVolume += volume
delta = upVolume - downVolume
plot(upVolume, "Up Volume", style=plot.style_columns, color=color.new(color.green, 60))
plot(downVolume, "Down Volume", style=plot.style_columns, color=color.new(color.red, 60))
plotchar(delta, "Delta", "—", location.absolute, color=delta > 0 ? color.green : color.red)
// MA function
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
// RSI calculation
up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"
// MACD calculation
fastMA = ta.ema(close, fastLength)
slowMA = ta.ema(close, slowLength)
macd = fastMA - slowMA
signalLine = ta.sma(macd, signalLength)
hist = macd - signalLine
// Bullish Engulfing Pattern Detection
bullishEngulfingSignal = open[1] > close[1] and close > open and close >= open[1] and close[1] >= open and (close - open) > (open[1] - close[1])
barcolor(bullishEngulfingSignal ? color.yellow : na)
// Plotting RSI and MACD
plot(rsi, "RSI", color=#7E57C2)
plot(rsiMA, "RSI-based MA", color=color.yellow)
hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
hline(30, "RSI Lower Band", color=#787B86)
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title="Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title="Lower Bollinger Band", color=color.green)
plot(macd, title="MACD", color=color.blue)
plot(signalLine, title="Signal Line", color=color.orange)
plot(hist, title="Histogram", style=plot.style_histogram, color=color.gray)
// Best time to buy condition
bestBuyCondition = rsi < 30 and ta.crossover(macd, signalLine) and delta > 0
// Plotting the best buy signal line
var line bestBuyLine = na
if (bestBuyCondition )
bestBuyLine := line.new(bar_index[1], close[1], bar_index[0], close[0], color=color.white)
// Strategy logic
longCondition = (ta.crossover(macd, signalLine) or bullishEngulfingSignal) and rsi < 70 and delta > 0
if (longCondition )
strategy.entry("Long", strategy.long)
// Reflexive exit condition: Exit if MACD crosses below its signal line or if RSI rises above 60
exitCondition = ta.crossunder(macd, signalLine) or (rsi > 60 and strategy.position_size > 0)
if (exitCondition )
strategy.close("Long")
Strategy parameters
The original address: https://www.fmz.com/strategy/474952
Featured ones: