
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.
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
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")