The resource loading... loading...

VWAP-MACD-RSI Multi-Factor Quantitative Trading Strategy

Author: ChaoZhang, Date: 2024-11-27 16:11:00
Tags: VWAPMACDRSITPSL

img

Overview

This is a quantitative trading strategy based on three technical indicators: VWAP, MACD, and RSI. The strategy identifies trading opportunities by combining signals from Volume Weighted Average Price (VWAP), Moving Average Convergence Divergence (MACD), and Relative Strength Index (RSI). It incorporates percentage-based take-profit and stop-loss mechanisms for risk management and uses strategy position sizing to optimize capital utilization.

Strategy Principles

The core logic is based on the comprehensive analysis of three main indicators:

  1. VWAP serves as the primary trend reference line, with price crossovers indicating potential trend changes
  2. MACD histogram confirms trend strength and direction, with positive values indicating uptrends and negative values indicating downtrends
  3. RSI identifies overbought or oversold market conditions to avoid entering at extreme levels

Buy conditions require:

  • Price crosses above VWAP
  • Positive MACD histogram
  • RSI below overbought level

Sell conditions require:

  • Price crosses below VWAP
  • Negative MACD histogram
  • RSI above oversold level

Strategy Advantages

  1. Multiple technical indicators cross-validation improves signal reliability
  2. VWAP incorporates volume factor for enhanced market depth analysis
  3. RSI filters extreme market conditions, reducing false breakout risks
  4. Percentage-based take-profit and stop-loss adapt to different price ranges
  5. Position sizing based on account equity enables dynamic position management
  6. Clear strategy logic, easy to understand and maintain

Strategy Risks

  1. Choppy markets may generate frequent trades, increasing transaction costs
  2. Multiple indicators might lead to delayed signals, affecting entry timing
  3. Fixed percentage take-profit and stop-loss may not suit all market conditions
  4. Lack of volatility consideration could increase risk during high volatility periods
  5. Absence of trend strength filtering may generate excessive signals in weak trends

Strategy Optimization Directions

  1. Introduce ATR for dynamic adjustment of take-profit and stop-loss levels
  2. Add trend strength filters to reduce false signals in choppy markets
  3. Optimize VWAP period settings, consider multiple VWAP periods combination
  4. Implement volume confirmation mechanism to improve breakout signal reliability
  5. Consider adding time filters to avoid trading during low liquidity periods
  6. Implement dynamic position sizing mechanism based on market conditions

Summary

This strategy constructs a relatively complete trading system by combining three classic technical indicators: VWAP, MACD, and RSI. The design emphasizes signal reliability and risk management through multiple indicator cross-validation to improve trading quality. While there are aspects that need optimization, the overall framework is sound and offers good scalability. Traders are advised to validate the strategy through backtesting across different market conditions and optimize parameters according to specific requirements before live implementation.


/*backtest
start: 2024-10-27 00:00:00
end: 2024-11-26 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

// Input for take-profit and stop-loss
takeProfitPercent = input.float(0.5, title="Take Profit (%)", step=0.1) / 100
stopLossPercent = input.float(0.25, title="Stop Loss (%)", step=0.1) / 100


macdFastLength = input.int(12, title="MACD Fast Length")
macdSlowLength = input.int(26, title="MACD Slow Length")
macdSignalLength = input.int(9, title="MACD Signal Length")


rsiLength = input.int(14, title="RSI Length")
rsiOverbought = input.int(70, title="RSI Overbought Level", step=1)
rsiOversold = input.int(30, title="RSI Oversold Level", step=1)


vwap = ta.vwap(close)


[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)
macdHistogram = macdLine - signalLine

rsi = ta.rsi(close, rsiLength)


plot(vwap, color=color.purple, linewidth=2, title="VWAP")
hline(rsiOverbought, "Overbought", color=color.red, linestyle=hline.style_dotted)
hline(rsiOversold, "Oversold", color=color.green, linestyle=hline.style_dotted)
plot(macdLine, color=color.blue, title="MACD Line")
plot(signalLine, color=color.orange, title="Signal Line")

// Buy Condition
longCondition = ta.crossover(close, vwap) and macdHistogram > 0 and rsi < rsiOverbought

// Sell Condition
shortCondition = ta.crossunder(close, vwap) and macdHistogram < 0 and rsi > rsiOversold

// Execute trades based on conditions
if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Take Profit/Stop Loss", "Long", limit=close * (1 + takeProfitPercent), stop=close * (1 - stopLossPercent))

if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Take Profit/Stop Loss", "Short", limit=close * (1 - takeProfitPercent), stop=close * (1 + stopLossPercent))

// Plot Buy/Sell Signals
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")

Related

More