Đây là một chiến lược giao dịch định lượng dựa trên ba chỉ số kỹ thuật: VWAP, MACD và RSI. Chiến lược xác định các cơ hội giao dịch bằng cách kết hợp các tín hiệu từ Giá trung bình cân nhắc khối lượng (VWAP), Sự khác biệt hội tụ trung bình động (MACD) và Chỉ số sức mạnh tương đối (RSI). Nó kết hợp cơ chế lấy lợi nhuận và dừng lỗ dựa trên tỷ lệ phần trăm để quản lý rủi ro và sử dụng quy mô vị trí chiến lược để tối ưu hóa việc sử dụng vốn.
Lý thuyết cốt lõi dựa trên phân tích toàn diện ba chỉ số chính:
Điều kiện mua đòi hỏi:
Các điều kiện bán hàng yêu cầu:
Chiến lược này xây dựng một hệ thống giao dịch tương đối hoàn chỉnh bằng cách kết hợp ba chỉ số kỹ thuật cổ điển: VWAP, MACD và RSI. Thiết kế nhấn mạnh độ tin cậy tín hiệu và quản lý rủi ro thông qua xác minh chéo nhiều chỉ số để cải thiện chất lượng giao dịch. Mặc dù có những khía cạnh cần tối ưu hóa, khung tổng thể là âm thanh và cung cấp khả năng mở rộng tốt. Các nhà giao dịch được khuyên nên xác nhận chiến lược thông qua kiểm tra lại trên các điều kiện thị trường khác nhau và tối ưu hóa các thông số theo các yêu cầu cụ thể trước khi thực hiện trực tiếp.
/*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")