Chiến lược này được gọi là Chiến lược giao dịch VWAP kênh giá. Đây là một chiến lược thực hiện giao dịch VWAP dựa trên các kênh giá. Ý tưởng chính của chiến lược này là: trong kênh giá, sử dụng đường trung bình động của chỉ số VWAP và các đường kênh offset trên và dưới của nó để đánh giá điểm mua và bán. Khi các đường kênh bị phá vỡ, mở các vị trí theo tỷ lệ phần trăm cố định của tổng tài sản và đóng các vị trí khi giá quay trở lại đường trung bình động VWAP.
Chiến lược này tính toán giá giao dịch trung bình hiện tại thông qua chỉ số VWAP. VWAP đại diện cho giá trung bình và là tỷ lệ doanh thu so với khối lượng giao dịch. Chỉ số VWAP phản ánh mức độ lệch giữa giá hiện tại và giá giao dịch trung bình trong lịch sử.
Chiến lược này sử dụng đường trung bình động của chỉ số VWAP và các đường kênh Offset của nó. Tỷ lệ của các đường kênh Offset được thiết lập thông qua các tham số
Các thiết lập tham số của chiến lược này hoàn toàn phản ánh ý tưởng giao dịch kênh. Người dùng có thể điều chỉnh chiều rộng kênh và kích thước các vị trí như một tỷ lệ phần trăm tổng tài sản theo sở thích của riêng họ, do đó nhận ra mức độ khác nhau của tần suất giao dịch.
Chiến lược giao dịch này có những lợi thế sau:
Vì chỉ số VWAP có thể phản ánh tốt mức giá trung bình, nên giao dịch dựa trên các đường kênh của nó có thể khóa hiệu quả các điểm trung bình giá trị và tránh bị thiên vị bởi biến động ngắn hạn. Đồng thời, kết hợp các kênh với các thông số khác nhau và xây dựng các vị trí theo lô có thể kiểm soát rủi ro hiệu quả và ngăn ngừa sự tập trung rủi ro một mặt dẫn đến thanh lý bắt buộc. Cuối cùng, bằng cách lấy lợi nhuận kịp thời để đóng các vị trí gần sự hồi quy của đường trung bình động VWAP có thể giảm tổn thất do đảo ngược giá.
Chiến lược này cũng có một số rủi ro cần lưu ý:
Chỉ số VWAP không nhạy cảm với biến động giao dịch tần số cao. Trong trường hợp có khoảng cách giá cực cao hoặc bất thường ngắn hạn, nó vẫn sẽ kích hoạt các tín hiệu giao dịch và lỗ không cần thiết. Ngoài ra, nếu các tham số kênh được đặt quá lỏng lẻo, nó sẽ dễ dàng tạo ra các tín hiệu thâm nhập giá không hợp lệ. Cuối cùng, nếu phạm vi các vị trí đóng trong các hoạt động hồi quy được đặt quá rộng, nó có thể bỏ lỡ thời điểm tốt nhất để kiếm lợi nhuận và gây ra tổn thất bị mắc kẹt.
Các biện pháp đối phó là đánh giá hợp lý các thiết lập tham số và điều chỉnh các tham số kênh một cách thích hợp; trong khi kết hợp các chỉ số khác để đánh giá sự bất thường về giá và tránh các tín hiệu mù quáng; cuối cùng đánh giá tối ưu hóa tham số của các kênh ở các cấp độ và phạm vi hồi quy khác nhau để đạt được hiệu ứng thu lợi nhuận tốt hơn.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Ngoài ra, các quy tắc đánh giá khối lượng giao dịch có thể được thêm vào để tránh các khoảng cách giá không hợp lệ gây ra lỗ giao dịch. Cuối cùng, các quy tắc dừng lỗ cũng có thể được thiết lập để khi lỗ vị trí đạt một tỷ lệ phần trăm nhất định, dừng lỗ để thoát khỏi các vị trí, kiểm soát hiệu quả rủi ro.
Chiến lược này kết hợp chỉ số VWAP với các kênh giá để đạt được một chiến lược giao dịch tương đối ổn định. Cài đặt tham số chiến lược linh hoạt cho người dùng điều chỉnh theo sở thích của riêng họ. Chiến lược này có thể xác định hiệu quả hướng của điểm trung bình giá trị. Thông qua sự kết hợp tham số và xây dựng hàng loạt các vị trí, lợi nhuận ổn định có thể đạt được. Mặc dù vẫn còn chỗ để cải thiện trong chiến lược, nói chung đây là một chiến lược giao dịch định lượng có tính thực tế cao.
/*backtest start: 2023-02-12 00:00:00 end: 2024-02-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "VWAP Bands Backtest", shorttitle = "VWAP Bands Backtest", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3) //Settings lotsizelong = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot long, %") lotsizeshort = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot short, %") short1 = input(true, title = "short 1") long1 = input(true, title = "long 1") shortlevel1 = input(1.0, title = "Short line 1") longlevel1 = input(-1.0, title = "Long line 1") needoffset = input(true, title = "Offset") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Variables size = strategy.position_size mult = 1 / syminfo.mintick truetime = true //VWAP ma = vwap(hlc3) //Levels longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close shortline1 = short1? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close //Lines colorlong1 = long1 ? color.lime : na colorshort1 = short1 ? color.red : na offset = needoffset ? 1 : 0 plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1") plot(ma, offset = offset, color = color.blue, title = "MA line") plot(longline1, offset = offset, color = colorlong1, title = "Long line 1") //Trading lotlong = 0.0 lotshort = 0.0 lotlong := size == 0 ? (strategy.equity / close) * (lotsizelong / 100) : lotlong[1] lotshort := size == 0 ? (strategy.equity / close) * (lotsizeshort / 100) : lotshort[1] if ma > 0 if lotlong > 0 lotslong = 0.0 lotslong := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0 strategy.entry("L1", strategy.long, lotlong, limit = longline1, when = (lotslong == 0 and long1 and truetime)) if lotshort > 0 lotsshort = 0.0 lotsshort := strategy.position_size < 0 ? round(strategy.position_size / lotshort) : 0.0 strategy.entry("S1", strategy.short, lotshort, limit = shortline1, when = (lotsshort == 0 and short1 and truetime)) if strategy.position_size > 0 strategy.exit("TPL", "L1", limit = ma) if strategy.position_size < 0 strategy.exit("TPS", "S1", limit = ma) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("L1") strategy.cancel("S1") strategy.cancel("TPL") strategy.cancel("TPS")