这是一个基于VWAP、MACD和RSI三重技术指标的量化交易策略。该策略通过结合成交量加权平均价(VWAP)、移动平均线趋同发散指标(MACD)和相对强弱指标(RSI)的多重信号来识别市场的买卖机会。策略采用百分比止盈止损机制来管理风险,并使用策略仓位管理来优化资金利用。
策略的核心逻辑基于三个主要指标的综合分析: 1. 使用VWAP作为主要的趋势参考线,当价格突破VWAP时视为潜在的趋势转换信号 2. MACD柱状图用于确认趋势的强度和方向,正值表示上涨趋势,负值表示下跌趋势 3. RSI用于识别市场是否处于超买或超卖状态,避免在极端情况下入场
买入条件需同时满足: - 价格向上突破VWAP - MACD柱状图为正值 - RSI未达到超买水平
卖出条件需同时满足: - 价格向下突破VWAP - MACD柱状图为负值 - RSI未达到超卖水平
该策略通过综合运用VWAP、MACD和RSI三个经典技术指标,构建了一个相对完整的交易系统。策略在设计上注重信号的可靠性和风险管理,通过多重指标交叉验证来提高交易质量。虽然存在一些需要优化的方面,但整体框架合理,具有良好的可扩展性。建议交易者在实盘使用前,先通过回测验证策略在不同市场环境下的表现,并根据具体需求对参数进行优化。
/*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")