
Chiến lược này được gọi là Chiến lược giao dịch VWAP kênh giá, nó là một chiến lược dựa trên kênh giá để thực hiện giao dịch VWAP. Ý tưởng chính của chiến lược này là: trong kênh giá, sử dụng đường trung bình của chỉ số VWAP và đường trung bình di chuyển lên xuống để đánh giá điểm mua và bán, mở vị trí theo tỷ lệ phần trăm tổng tài sản của vị trí cố định khi phá vỡ đường kênh và đóng cửa khi quay trở lại đường trung bình VWAP.
Chiến lược này tính giá giao dịch trung bình với giá hiện tại thông qua chỉ số VWAP. VWAP đại diện cho giá trung bình, là tỷ lệ giữa giá giao dịch và 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 sử dụng đường trung bình của chỉ số VWAP và đường dẫn lệch của nó. Tỷ lệ đường dẫn lệch được thiết lập thông qua các tham số longlevel1 và shortlevel1. Khi giá phá vỡ đường dẫn lệch trên, mở nhiều lệnh theo tỷ lệ vị trí của tham số lotsizelong; Khi giá phá vỡ đường dẫn lệch dưới, mở nhiều lệnh theo tỷ lệ vị trí của tham số lotsizeshort.
Cài đặt tham số của chiến lược này phản ánh đầy đủ ý tưởng về 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 tỷ lệ vị trí tùy theo sở thích của mình, để đạt được mức độ giao dịch khác nhau.
Chiến lược giao dịch này có một số ưu điểm:
Vì chỉ số VWAP có thể phản ánh tốt mức trung bình của giá, giao dịch dựa trên đường dẫn của nó, có thể khóa trung tâm giá trị một cách hiệu quả và tránh bị lệch bởi vùng dao động ngắn hạn. Đồng thời, sử dụng các kênh tham số khác nhau để kết hợp, xây dựng kho hàng loạt, có thể kiểm soát rủi ro một cách hiệu quả và ngăn chặn rủi ro đơn phương tập trung vào vị trí bùng nổ. Cuối cùng, bằng cách dừng lại kịp thời để trở lại vị trí yên bình gần đường trung bình VWAP, bạn có thể giảm thiểu thiệt hại do giá đảo ngược.
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, nếu gặp phải giá nhảy vọt cực đoan hoặc bất thường trong thời gian ngắn, nó vẫn sẽ gây ra tín hiệu giao dịch và tổn thất không cần thiết. Ngoài ra, nếu tham số kênh được đặt quá thoải mái, nó có thể dễ dàng tạo ra tín hiệu không hiệu quả. Cuối cùng, nếu thiết lập quá rộng, bạn có thể bỏ lỡ thời gian dừng tối ưu và gây thiệt hại.
Phản ứng là thiết lập tham số đánh giá hợp lý, điều chỉnh tham số kênh một cách thích hợp; đồng thời kết hợp với các chỉ số khác để đánh giá giá bất thường, tránh theo dõi mù quáng; cuối cùng đánh giá tối ưu hóa tham số của các cấp kênh khác nhau và phạm vi trở lại, để đạt được hiệu quả ngăn chặ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:
Bạn có thể thêm nhiều lớp đường dẫn và tối ưu hóa các tham số kết hợp để đạt được hiệu quả giao dịch ổn định hơn. Ngoài ra, bạn có thể thêm quy tắc phán đoán khối lượng giao dịch để tránh giá nhảy vọt không hiệu quả gây ra tổn thất giao dịch. Cuối cùng, bạn cũng có thể thiết lập quy tắc dừng lỗ, dừng lỗ khi lỗ giữ vị trí đạt đến một tỷ lệ nhất định, kiểm soát rủi ro hiệu quả.
Chiến lược này kết hợp chỉ số VWAP với kênh giá, để thực hiện một chiến lược giao dịch tương đối ổn định. Các tham số của chiến lược được thiết lập linh hoạt, người dùng có thể điều chỉnh theo sở thích của riêng mình. Chiến lược này có thể xác định hiệu quả hướng trung tâm của giá trị, thông qua các tham số kết hợp và xây dựng kho hàng loạt, để đạt được hiệu quả lợi nhuận ổn định. Mặc dù chiến lược cũng có một số không gian cải tiến, nhưng nói chung là một chiến lược giao dịch định lượng mạnh mẽ.
/*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")