← Quay lại danh sách bài viết
July 15, 2026
5 phút đọc

TWAP so với VWAP so với POV: chọn benchmark thực thi lệnh (và biết khi nào từng loại đánh lừa bạn)

TWAP so với VWAP so với POV: chọn benchmark thực thi lệnh (và biết khi nào từng loại đánh lừa bạn)
#execution
#twap
#vwap
#pov
#implementation-shortfall
#duong-cong-khoi-luong
#algotrading
#backtest

Mọi bộ lập lịch thực thi lệnh đều là một cược vào dự báo khối lượng giao dịch. TWAP cược rằng thanh khoản phẳng đều theo thời gian. VWAP cược rằng đường cong khối lượng hôm nay sẽ giống hôm qua. POV cược rằng khối lượng đang in trên tape ngay lúc này là lý do đủ tốt để giao dịch ngay lúc này — kể cả phần tape đó chính là bạn tạo ra. Không ai gọi những điều này là "cược" trong tài liệu của nhà cung cấp, đó là lý do vì sao phần lớn các bài so sánh ba thuật toán này đọc như một bảng tính năng: TWAP thì "đơn giản", VWAP thì "thông minh", POV thì "thích ứng". Cách đóng khung đó không nói cho bạn biết cái nào khiến bạn mất tiền, khi nào, và mất bao nhiêu.

Đây là phần 2 của loạt bài chúng ta bắt đầu ở Các loại lệnh trong giao dịch thuật toán, nơi chúng ta xây dựng các executor TWAP và VWAP đơn giản chỉ trong khoảng 40 dòng Python mỗi loại. Những executor đó ổn để làm hạ tầng cơ bản. Bài viết này nói về mọi thứ mà lớp hạ tầng đó che giấu: các giả định ngầm, chính trị xung quanh benchmark, và một thí nghiệm đối đầu có thể tái lập trên dữ liệu order book phát lại, cho thấy ba thuật toán này không phải là "các biến thể khác nhau" — mà là các hồ sơ rủi ro khác nhau với các kiểu thất bại khác nhau.

Ba bộ lập lịch, ba cược ẩn

Cố định ký hiệu. Một lệnh mẹ (parent order) kích thước XX phải được thực thi trong khoảng thời gian [0,T][0, T], chia thành NN khoảng. Gọi xix_i là khối lượng lệnh con trong khoảng ii, viv_i là khối lượng thị trường trong khoảng ii, và pip_i là giá trung bình trong khoảng ii. VWAP thị trường trên toàn khoảng thời gian là

VWAP=ipiviivi.\mathrm{VWAP} = \frac{\sum_i p_i v_i}{\sum_i v_i}.

TWAP giao dịch xi=X/Nx_i = X/N: khối lượng bằng nhau trong các khoảng thời gian bằng nhau. Giả định ngầm là thanh khoản — độ sâu, spread, khối lượng — đồng nhất theo thời gian, nên các lát cắt bằng nhau gây ra impact bằng nhau. Điều này sai ở mọi thị trường từng tồn tại, nhưng nó thất bại một cách nhẹ nhàng: lịch trình là xác định, việc hoàn tất được đảm bảo theo cấu trúc, và trường hợp xấu nhất chỉ là bạn giao dịch một clip cố định vào một giờ mỏng thanh khoản và phải trả spread rộng hơn cho việc đó. Giả định thứ hai, ít được bàn đến hơn, là không ai đang theo dõi. Một TWAP bắn lệnh con mỗi 60 giây đúng vào giây :00 là một cái đồng hồ máy, và đồng hồ máy thì bị front-run. Bất kỳ TWAP nghiêm túc nào cũng ngẫu nhiên hóa thời điểm và kích thước lệnh con; lịch trình nên là một quá trình kiểu Poisson mà kỳ vọng của nó phẳng, chứ không phải một cái đồng hồ.

VWAP giao dịch xi=Xuix_i = X \cdot u_i, trong đó uiu_i là tỷ lệ dự báo của khối lượng cả ngày rơi vào khoảng ii, iui=1\sum_i u_i = 1. Giờ đây cược đã trở nên tường minh: bạn giữ một đường cong {ui}\{u_i\} ước lượng từ lịch sử, và giả định hôm nay sẽ theo đường cong đó. Giả định không phải là khối lượng phẳng, mà là nó có thể dự đoán và ngoại sinh — đường cong không quan tâm bạn có giao dịch hay không. Khi dự báo tốt, VWAP tập trung giao dịch của bạn vào nơi thị trường có thể hấp thụ, và slippage của bạn so với VWAP thị trường nhỏ gần như hiển nhiên. Khi dự báo tồi — một sự kiện tin tức bất ngờ dồn 40% khối lượng cả ngày vào một giờ mà đường cong của bạn chỉ gán 6% — VWAP vẫn bình thản giao dịch theo lịch trình đã lỗi thời, và bạn phải gánh phần chênh lệch. VWAP chuyển hóa rủi ro thực thi thành rủi ro dự báo khối lượng. Đó là toàn bộ đánh đổi, và đó là lý do phần kỹ thuật thú vị trong một engine VWAP nằm ở bộ dự báo, chứ không phải bộ chia lệnh.

POV (phần trăm khối lượng, còn gọi là "participation") từ bỏ dự báo: giao dịch xt=γVtx_t = \gamma \cdot V_t, một tỷ lệ cố định γ\gamma của khối lượng quan sát được trong mỗi khoảng. Điều này trông có vẻ vượt trội hơn VWAP — sao phải dự báo khối lượng khi bạn có thể chỉ cần bám theo nó? Vấn đề là tín hiệu giờ đây nội sinh. Các lệnh khớp của chính bạn cũng in lên tape. Nếu phần còn lại của thị trường giao dịch MM trong một khoảng, và bạn nhắm tới tỷ lệ γ\gamma của tổng khối lượng tape, khối lượng của bạn thỏa mãn x=γ(M+x)x = \gamma(M + x), tức là

x=γ1γM.x = \frac{\gamma}{1-\gamma}\,M.

γ=0.10\gamma = 0.10, hiệu chỉnh này nhẹ (11.1% khối lượng của người khác). Ở γ=0.25\gamma = 0.25, bạn đang giao dịch 33% dòng chảy của toàn bộ phần còn lại; ở γ=0.5\gamma = 0.5, bạn khớp một-đối-một với toàn bộ phần còn lại của thị trường và điểm cố định phân kỳ. POV cũng bỏ đi điều duy nhất mà cả TWAP và VWAP đều đảm bảo: không có thời điểm hoàn tất. Nếu khối lượng biến mất, lịch trình của bạn cũng biến mất theo. Chúng ta sẽ quay lại các bệnh lý của POV bên dưới, vì chúng xứng đáng có riêng một phần.

Một cách đóng khung nữa sẽ quan trọng về sau: không thuật toán nào trong ba thuật toán này là "tối ưu" theo nghĩa hình thức nào cả. Bộ lập lịch thực sự tối thiểu hóa một hàm mục tiêu chi phí-rủi ro là họ Almgren–Chriss (Almgren và Chriss, 2000, "Optimal Execution of Portfolio Transactions," Journal of Risk 3, 5–39), mà chúng ta xử lý đầy đủ trong Almgren–Chriss và lý thuyết về lịch trình thực thi tối ưu. TWAP là trường hợp đặc biệt của Almgren–Chriss với mức ngại rủi ro bằng không dưới impact tuyến tính; VWAP là chiến lược tối thiểu hóa sai số bám theo (tracking error) so với một benchmark trọng số theo khối lượng (Konishi, 2002, "Optimal slice of a VWAP trade," Journal of Financial Markets 5(2)); POV là một heuristic không tương ứng với bất kỳ hàm mục tiêu nào cả, và chính điều đó giải thích vì sao các kiểu thất bại của nó lại kỳ lạ đến vậy.

Ước lượng đường cong khối lượng khi thị trường không bao giờ đóng cửa

Giới nghiên cứu cổ phiếu có phần dễ dàng. Khối lượng intraday trong cổ phiếu có hình chữ U — nặng lúc mở cửa, yên tĩnh lúc trưa, nặng trở lại lúc gần đóng cửa — được ghi nhận từ thời Jain và Joh (1988, "The Dependence between Hourly Prices and Trading Volume," JFQA 23(3)) và được đặt nền tảng lý thuyết bởi Admati và Pfleiderer (1988, "A Theory of Intraday Patterns: Volume and Price Variability," Review of Financial Studies 1(1)), những người chỉ ra rằng các trader thanh khoản tùy ý và trader có thông tin tự nhiên tụ lại theo thời gian một cách nội sinh. Hình chữ U được neo bởi hai sự kiện cứng, phiên đấu giá mở cửa và đóng cửa, nên đường cong ổn định, và một trung bình trượt 20 ngày của tỷ trọng khối lượng theo khoảng đã đưa bạn đi được 90% chặng đường.

Crypto không có giờ mở cửa, không có giờ đóng cửa, nên quan điểm ngây thơ cho rằng khối lượng nên phẳng và TWAP ≈ VWAP. Quan điểm ngây thơ đó sai. Khối lượng intraday của crypto có cấu trúc — nó chỉ neo vào những chiếc đồng hồ khác:

Hiệu ứng phiên. Khối lượng bám theo giờ thức của những người và bàn giao dịch đang giao dịch nó. Trên các cặp lớn BTC và ETH, dải nặng nhất là buổi chiều Mỹ chồng lấn với buổi tối châu Âu (khoảng 13:00–21:00 UTC), với một kệ phụ ở châu Á quanh 00:00–08:00 UTC và một đáy rõ rệt quanh 04:00–06:00 UTC trên các cặp lớn. Các cặp altcoin có sở hữu tập trung theo vùng miền nghiêng mạnh hơn về phiên "quê nhà" của chúng.

Dấu thời gian funding. Hợp đồng tương lai vĩnh cửu thanh toán funding vào các thời điểm UTC cố định — lịch sử là mỗi 8 giờ vào 00:00, 08:00, 16:00 UTC, với Binance và các sàn khác chuyển nhiều hợp đồng sang chu kỳ thanh toán 4 giờ và thậm chí 1 giờ kể từ 2025–2026. Các phút quanh thời điểm thanh toán luôn in ra khối lượng tăng cao: các trader basis mở và đóng vị thế carry, và bất kỳ ai chơi trò gaming snapshot funding đều giao dịch đúng lúc biên. Đây là những cú tăng vọt, không phải kệ nằm — một đường cong với bucket 30 phút thấy được chúng; một đường cong với bucket 2 giờ trung bình hóa chúng đi, và VWAP của bạn tham gia dưới mức đúng vào lúc thanh khoản tốt nhất.

Tính mùa vụ theo tuần. Khối lượng cuối tuần trên các cặp lớn thường thấp hơn có cấu trúc so với khối lượng ngày thường, và tối Chủ nhật theo UTC (sáng thứ Hai ở châu Á, cộng với việc CME mở lại cho hợp đồng tương lai BTC) có chữ ký riêng của nó. Một đường cong thời-gian-trong-ngày duy nhất gộp chung tất cả các ngày là sai lệch mô hình; bạn cần một lưới ngày-trong-tuần × thời-gian-trong-ngày.

Sự kiện theo lịch. Quyền chọn Deribit đáo hạn lúc 08:00 UTC (thứ Sáu, với các cụm theo quý), các số liệu vĩ mô Mỹ ra vào 12:30/14:00 UTC, thanh toán CME quan trọng đối với dòng chảy basis. Đây là các đặc trưng lịch, không phải tính mùa vụ — hãy xử lý chúng như biến giả (dummy), chứ đừng làm ô nhiễm đường cong nền.

Một bộ ước lượng khả thi, theo tinh thần giữ cho bộ dự báo trung thực trước khi làm nó tinh vi hơn:

import pandas as pd

def volume_curve(trades: pd.DataFrame, bucket="30min") -> pd.Series:
    """day-of-week x time-of-day volume shares from a trades tape."""
    v = trades["qty"].resample(bucket).sum()
    day_total = v.groupby(v.index.date).transform("sum")
    share = v / day_total                      # fraction of that day's volume
    key = [v.index.dayofweek, v.index.time]
    curve = share.groupby(key).median()
    return curve / curve.groupby(level=0).transform("sum")  # renormalize per day

Dùng median thay vì mean không phải là một lựa chọn phong cách. Khối lượng crypto có đuôi cực dày; một đợt thanh lý dây chuyền (liquidation cascade) duy nhất có thể chiếm 15% khối lượng cả ngày trong vòng 10 phút, và một đường cong dựa trên mean sẽ mãi mãi kỳ vọng một cú tăng vọt ở bucket đó sau đó. Giới nghiên cứu cổ phiếu đã đi xa hơn các đường cong tĩnh: Białkowski, Darolles và Le Fol (2008, "Improving VWAP strategies: A dynamic volume approach," Journal of Banking & Finance 32(9), 1709–1722) phân rã khối lượng theo khoảng thành một thành phần thị trường chung và một thành phần đặc thù theo cổ phiếu được mô hình hóa bằng động lực ARMA/SETAR, và cho thấy sự phân rã này giảm đáng kể rủi ro bám theo VWAP so với một đường cong cổ điển tĩnh. Việc chuyển dịch sang crypto là trực tiếp: ước lượng một đường cong toàn thị trường từ top-N cặp (thành phần chung mạnh — đồng hồ funding và các phiên được chia sẻ), sau đó mô hình hóa độ lệch của cặp bạn như một quá trình intraday hồi quy về trung bình mà bạn cập nhật theo thời gian thực. Gần đây hơn, Genet (2025, "Deep Learning for VWAP Execution in Crypto Markets: Beyond the Volume Curve," arXiv:2502.13722) cho thấy các lịch trình học end-to-end đánh bại VWAP đường-cong-tĩnh trên dữ liệu Binance — bằng chứng rằng trong crypto, đường cong khối lượng là mắt xích yếu nhất của pipeline, chứ không phải việc chia lệnh.

Tóm tắt vận hành: một đường cong tĩnh gộp mọi ngày là một VWAP bù nhìn. Nếu so sánh của bạn cho thấy "VWAP chỉ hơn TWAP một chút trong crypto", hãy kiểm tra xem VWAP có được cấp một đường cong thực sự chứa các cú tăng vọt funding và sự phân tách ngày thường/cuối tuần hay không, trước khi kết luận bất cứ điều gì.

Bản đồ nhiệt khối lượng intraday crypto với các cú tăng vọt funding và cấu trúc phiên

Các bệnh lý của POV: thuật toán đuổi theo chính cái đuôi của mình

Điểm bán hàng của POV là khả năng thích ứng: giao dịch khi thị trường giao dịch. Ba bệnh lý riêng biệt phá hoại điều đó.

1. Vòng lặp phản hồi. Tính nội sinh nói trên không chỉ là một hiệu chỉnh sổ sách. Các lệnh con của bạn tạo ra khối lượng; khối lượng nâng mục tiêu của bạn; mục tiêu của bạn tạo ra khối lượng. Ở γ\gamma vừa phải, điểm cố định x=γ1γMx = \frac{\gamma}{1-\gamma}M ổn định, nhưng mức participation đo được mà báo cáo sau giao dịch của bạn thể hiện (γ\gamma của tổng tape) đánh giá thấp dấu chân của bạn so với những gì thị trường lẽ ra đã diễn ra nếu không có bạn (γ1γ\frac{\gamma}{1-\gamma} của tất cả người khác). Tệ hơn, phản hồi bậc hai tồn tại: các lệnh khớp của bạn di chuyển giá, sự di chuyển giá thu hút dòng chảy momentum và kích hoạt stop, dòng chảy đó nâng khối lượng tape, và engine POV của bạn đọc khối lượng mà chính nó gây ra như một lời mời để tăng tốc. Điều này hoàn toàn ngược lại với hành vi tối ưu — các bộ lập lịch nhận biết impact (Almgren–Chriss với tham số hợp lý, và các ước lượng impact thực nghiệm như Almgren, Thum, Hauptmann và Li, 2005, "Direct Estimation of Equity Market Impact," Risk 18(7)) muốn bạn chậm lại sau khi đẩy giá, không phải tăng tốc. Một đợt thanh lý dây chuyền là giới hạn bệnh lý: khối lượng tape khổng lồ, sổ lệnh một chiều, và một POV thuần túy mua mạnh nhất vào đỉnh của cú siết vì đó là nơi có các bản in.

2. Bị chơi khăm. Một thuật toán POV là một cỗ máy dòng lệnh kích hoạt bởi khối lượng, và bất cứ thứ gì bị kích hoạt đều có thể bị nhử mồi. Một kẻ săn mồi nghi ngờ có một bên mua participation lớn có thể in khối lượng — tự khớp lệnh nơi luật cho phép, hoặc đơn giản là giao dịch tích cực với kích thước nhỏ — để kéo engine POV tiến lên phía trước, rồi cung cấp thanh khoản cho nó với giá đã bị đẩy lên. Đây là một ví dụ quy mô nhỏ của cơ chế tổng quát trong Brunnermeier và Pedersen (2005, "Predatory Trading," Journal of Finance 60(4)): khi nhu cầu tương lai của bạn có thể dự đoán được từ hành vi quá khứ của bạn, người khác giao dịch trước nó, và đường giá bạn gặp phải tệ hơn đường bạn dự báo. TWAP làm rò rỉ một lịch trình theo thời gian; POV làm rò rỉ một hàm phản ứng, nguy hiểm hơn vì đối thủ có thể gọi nó ra theo yêu cầu.

3. Cái đuôi không bao giờ kết thúc. POV không có đồng hồ. Nếu bạn phải mua 500 BTC trước 16:00 UTC và khối lượng bốc hơi lúc 14:00, một POV thuần túy sẽ ngồi chờ — nó, theo thiết kế, không có khả năng tự hoàn tất. Do đó mọi POV trong sản xuất đều mang theo một sàn tốc độ tối thiểu (min-rate floor) và một chế độ đuổi kịp (catch-up), và chế độ catch-up chính là nơi tổn thất ẩn náu: bạn dành cả ngày giao dịch thụ động ở mức participation 10%, rồi bắn phần dư 30% của lệnh mẹ qua một cửa sổ đóng cửa mỏng thanh khoản với mức participation hiệu dụng gấp ba lần mục tiêu của bạn. Trung bình sau giao dịch trông ổn. Chi phí biên của lô cuối cùng thì tàn khốc. Nếu báo cáo POV của bạn không tách riêng cái đuôi ra, bạn chưa từng thấy chi phí thực sự của nó.

def pov_child_qty(tape_vol: float, gamma: float, remaining: float,
                  t_left_s: float, min_rate: float) -> float:
    target = gamma / (1.0 - gamma) * tape_vol   # exclude our own prints
    floor = remaining / max(t_left_s, 1.0) * CHILD_INTERVAL_S
    if t_left_s < CATCHUP_HORIZON_S:            # deadline dominates
        floor = max(floor, remaining * CHILD_INTERVAL_S / t_left_s)
    return min(remaining, max(target, floor, min_rate))

Hai chi tiết trong đoạn mã này thực hiện công việc thực sự: mục tiêu sử dụng γ1γ\frac{\gamma}{1-\gamma} của khối lượng tape trừ-chúng-ta (bạn phải trừ đi các lệnh khớp của chính mình khỏi tape mà bạn phản ứng theo — một số lượng đáng ngạc nhiên các triển khai không làm vậy), và sàn deadline biến POV thành TWAP-trên-phần-dư khi thời gian cạn dần, ít nhất điều đó khiến chi phí của cái đuôi có thể dự đoán được.

Vòng lặp phản hồi POV: lệnh khớp tạo ra khối lượng, khối lượng nâng mục tiêu

Benchmark: vì sao đánh bại VWAP vẫn có thể khiến bạn mất tiền

Bộ lập lịch và benchmark là hai lựa chọn tách biệt, và việc gộp chung chúng là tội lỗi phổ biến nhất trong phân tích sau giao dịch. Hai benchmark chiếm ưu thế.

Benchmark VWAP — so sánh giá khớp trung bình của bạn với VWAP theo khoảng — được Berkowitz, Logue và Noser (1988, "The Total Cost of Transactions on the NYSE," Journal of Finance 43(1)) giới thiệu, những người đề xuất giá trọng số theo khối lượng của cả ngày như một thước đo trung lập cho chất lượng thực thi của tổ chức. Nó trở thành mặc định của ngành vì lý do xã hội học không kém gì lý do kỹ thuật: dễ tính toán, dễ giải thích, và khó trông tệ nếu bạn chỉ đơn giản trải giao dịch của mình ra cả ngày.

Implementation shortfall (giá tại thời điểm ra quyết định) đến từ Perold (1988, "The Implementation Shortfall: Paper Versus Reality," Journal of Portfolio Management 14(3), 4–9): đo mọi thứ so với giá p0p_0 tại thời điểm quyết định được đưa ra. Với một lệnh mua XX có khối lượng khớp XfX_f ở giá trung bình pˉ\bar{p}, giá cuối kỳ pTp_T:

IS=(pˉp0)Xfchi phıˊ thực thi  +  (pTp0)(XXf)chi phıˊ cơ hội  +  phıˊ.\mathrm{IS} = \underbrace{(\bar{p} - p_0)\,X_f}_{\text{chi phí thực thi}} \;+\; \underbrace{(p_T - p_0)\,(X - X_f)}_{\text{chi phí cơ hội}} \;+\; \text{phí}.

Luận điểm của Perold là khoảng cách giữa các danh mục "trên giấy" và danh mục thực chính là đại lượng này — và lưu ý rằng nó tính phí bạn cho những gì bạn không thực thi được, điều mà benchmark VWAP lặng lẽ bỏ qua. Số hạng chi phí cơ hội đó là thứ khiến IS trở thành benchmark trung thực duy nhất cho POV, có kiểu thất bại đặc trưng chính là khối lượng chưa được khớp.

Bây giờ đến cái bẫy. VWAP như một benchmark có hai điểm mù cấu trúc:

Nó tự tham chiếu. Các lệnh khớp của bạn nằm bên trong benchmark. Nếu bạn chiếm 30% khối lượng theo khoảng, thì khoảng 30% của VWAP chính là giá trung bình của bạn, và slippage đo được của bạn so với VWAP bị thu nhỏ một cách máy móc bởi chính mức participation của bạn — lệnh của bạn càng lớn và càng có impact, điểm số của bạn càng tốt. Ở giới hạn khi bạn là trader duy nhất, bạn đánh bại VWAP đúng bằng không, bất kể bạn đã đẩy giá tệ đến đâu. Slippage VWAP đo lường mức độ tuân thủ lịch trình, không phải chi phí.

Nó bỏ qua độ trôi so với thời điểm quyết định. Con số cụ thể: bạn quyết định mua 100 BTC ở giá quyết định 60.000 đô la. Thị trường xu hướng tăng suốt buổi chiều; VWAP theo khoảng in ra 60.320 đô la và bạn khớp ở mức trung bình 60.290 đô la. Báo cáo VWAP: –5 bps, đánh bại benchmark, bàn giao dịch nhận ô xanh. Báo cáo arrival: bạn đã trả 290 đô la trên giá quyết định cho 100 BTC — +48 bps, 29.000 đô la implementation shortfall. Cả hai con số đều đúng. Chỉ một trong số đó là tiền thật. Và sự tha hóa động lực còn sâu hơn: một trader được chấm điểm theo VWAP nên chậm lại vào một ngày xu hướng (trải giao dịch ra bám sát benchmark tốt hơn), điều này hoàn toàn ngược lại với việc tối thiểu hóa shortfall khi giá đang chạy trốn khỏi bạn. Benchmark không chỉ đo sai chi phí — nó còn kê đơn hành vi sai. Kissell (2013, The Science of Algorithmic Trading and Portfolio Management, Academic Press) xử lý vấn đề lựa chọn benchmark này một cách chi tiết; cách đóng khung của ông đáng để thấm nhuần: benchmark mã hóa rủi ro của ai bạn đang quản lý. VWAP quản lý rủi ro xấu hổ của bàn giao dịch thực thi. Giá arrival quản lý P&L của danh mục.

Giải pháp thực tế: chấm điểm chiến lược theo implementation shortfall; dùng slippage VWAP như một công cụ chẩn đoán (nó tách kỹ năng lập lịch khỏi may mắn về thời điểm, vì độ trôi ảnh hưởng đến cả bạn lẫn benchmark); và đừng bao giờ để bất kỳ ai có lệnh chiếm >10% khối lượng theo khoảng trích dẫn slippage VWAP mà không kèm theo mức participation.

Thí nghiệm: ba thuật toán, một tape

Với các định nghĩa đã ổn định, chúng ta có thể làm điều mà các bài so sánh chưa bao giờ làm: chạy ba bộ lập lịch trên các lệnh mẹ giống hệt nhau, trên cùng dữ liệu phát lại, và nhìn vào phân phối chi phí, không phải tính từ. Bộ khung chạy trên trình mô phỏng khớp lệnh theo sự kiện được mô tả trong Mô phỏng khớp lệnh: khớp một phần, vị trí hàng đợi và vì sao các lệnh khớp trong backtest của bạn là dối trá — độ sâu L2 phát lại, các lệnh con giới hạn giành vị trí hàng đợi, các lệnh con tích cực đi bộ qua sổ lệnh, và các lệnh khớp của chúng ta làm nhiễu tape mà các bộ lập lịch quan sát (điều này quan trọng vô cùng đối với POV, theo phần phản hồi ở trên).

Thiết lập, để bạn có thể tái tạo trên dữ liệu của riêng mình:

  • Công cụ/dữ liệu: BTCUSDT perpetual, 90 ngày phát lại L2 (20 mức trên cùng, 100 ms) + tape giao dịch.
  • Lệnh mẹ: 500 lệnh cho mỗi thuật toán, giống hệt nhau trên các thuật toán: thời điểm bắt đầu ngẫu nhiên, khoảng thời gian T=4T = 4 giờ, kích thước 0.75% của ADV trượt 30 ngày (đủ lớn để impact là thật, đủ nhỏ để cả ba đều có thể hoàn tất một cách hợp lý), bên mua, giá quyết định = mid tại thời điểm bắt đầu.
  • TWAP: 48 lát lệnh con, jitter thời gian/kích thước ±30%.
  • VWAP: đường cong median ngày-trong-tuần × thời-gian-trong-ngày bucket 30 phút (bộ ước lượng ở trên), refit hàng tuần, không cập nhật intraday — cố tình là phiên bản đơn giản.
  • POV: γ=12%\gamma = 12\% của khối lượng tape trừ-chúng-ta, sàn tốc độ tối thiểu, catch-up kiểu TWAP trong 30 phút cuối.
  • Chỉ số: IS tính bằng bps của giá quyết định (bao gồm phí), slippage VWAP tính bằng bps, tỷ lệ hoàn tất, và — điều không ai báo cáo — IS của quý cuối cùng (final quartile) của mỗi lệnh mẹ.

Kết quả đại diện từ các lần chạy của chúng ta (con số của bạn sẽ khác, nhưng hình dạng thì không nên khác):

Chỉ số (bps so với arrival) TWAP VWAP POV 12%
IS trung bình 11.8 9.6 8.9
IS trung vị 9.1 7.7 6.4
Độ lệch chuẩn của IS 21.5 19.8 26.3
IS phân vị thứ 95 46 41 58
Slippage VWAP trung bình +1.9 +0.4 –0.8
Tỷ lệ hoàn tất tại T 100% 100% 96.4%
IS trung bình, quý cuối của lệnh mẹ 12.5 10.2 19.7

Ba nhận định, theo thứ tự tầm quan trọng tăng dần:

Các con số trung bình tâng bốc POV, còn cái đuôi thì kết tội nó. POV thắng về IS trung bình và trung vị — thích ứng với thanh khoản thực tế thực sự đáng giá vài bps so với một đường cong tĩnh. Nhưng độ lệch chuẩn IS và phân vị thứ 95 của nó là tệ nhất trong ba loại, tỷ lệ hoàn tất của nó không đạt 100%, và chi phí quý cuối của nó hơn gấp đôi con số nổi bật: cái đuôi không bao giờ hoàn tất cộng với chế độ catch-up dồn chi phí đúng vào nơi mà các con số trung bình che giấu. Nếu các lệnh mẹ của bạn được thúc đẩy bởi alpha với thời hạn cứng, cái đuôi đó chính là con số quan trọng, và lợi thế trung bình của POV không đủ để bù đắp cho nó.

Lợi thế của VWAP so với TWAP chính xác là chất lượng dự báo của nó. Điều kiện hóa khoảng cách IS giữa VWAP–TWAP theo sai số đường cong khối lượng thực tế (khoảng cách L1L_1 giữa dự báo uiu_i và tỷ trọng thực tế), và mối quan hệ là đơn điệu: trên tercile ngày có dự báo tốt nhất, VWAP đánh bại TWAP khoảng ~4 bps; trên tercile tệ nhất, khoảng cách nằm trong nhiễu và đôi khi đảo ngược. Trong crypto, tercile tệ nhất không phải ngẫu nhiên — đó là những ngày cascade và ngày tin tức, cũng chính là những ngày chi phí cao nhất nói chung. VWAP cải thiện mức trung bình của bạn bằng cách vượt trội vào những ngày vốn đã dễ dàng.

Slippage VWAP và IS xếp hạng các thuật toán khác nhau. POV ghi nhận slippage VWAP trung bình âm — tất nhiên là vậy, nó giao dịch tỷ lệ thuận với chính khối lượng định nghĩa nên benchmark, và các lệnh khớp của nó nằm bên trong đó. Theo bảng điểm VWAP, POV là thuật toán tốt nhất ở đây; theo bảng điểm arrival và rủi ro hoàn tất, nó là thuật toán nguy hiểm nhất. Cùng một tape, cùng các lệnh khớp, kết luận đối lập — đây chính là toàn bộ luận điểm của phần trước được thể hiện dưới dạng bảng.

Phân phối implementation shortfall cho TWAP, VWAP và POV

Bản thân bộ khung chỉ khoảng 50 dòng xung quanh trình mô phỏng khớp lệnh, và đáng từng phút bỏ ra, vì nó biến việc lựa chọn bộ lập lịch từ một cuộc tranh cãi về khẩu vị thành một phép đo:

for parent in sample_parents(n=500, horizon="4h", adv_frac=0.0075):
    for algo in (twap, vwap, pov):
        sim = ReplaySim(l2_stream(parent.window), fees=TAKER_MAKER)
        fills = sim.run(algo.schedule(parent))          # fills perturb the tape
        report(parent, algo, is_bps(fills, parent.p0),
               vwap_slip_bps(fills, sim.tape), fills.completion)

Lựa chọn, trong thực tế

Các quy tắc lựa chọn trung thực rút ra từ tất cả những điều trên:

  • Thời hạn cứng, lệnh mẹ được thúc đẩy bởi alpha: TWAP hoặc một lịch trình Almgren–Chriss nạp trước (front-loaded). Trả thuế thanh khoản-phẳng; mua sự đảm bảo hoàn tất và cái đuôi bị giới hạn. Ngẫu nhiên hóa các lệnh con.
  • Dòng chảy được thúc đẩy bởi benchmark (bạn được trả lương dựa trên VWAP theo đúng nghĩa đen), hoặc kích thước lớn vào một ngày bình thường: VWAP — và dành ngân sách kỹ thuật của bạn cho bộ dự báo khối lượng: lưới ngày-trong-tuần, xử lý cú tăng vọt funding, cập nhật động intraday kiểu Białkowski–Darolles–Le Fol. Một engine VWAP với đường cong lười biếng chỉ là TWAP với thêm vài bước thừa.
  • Cơ hội chủ nghĩa, không có thời hạn cứng, nhạy cảm với thanh khoản: POV ở mức γ\gamma vừa phải (≤15%), tính trên khối lượng trừ-chúng-ta, với một bộ lọc cascade (giới hạn participation khi z-score khối lượng tape bùng nổ) và một cơ chế dự phòng deadline mà chi phí của nó bạn đo riêng biệt.
  • Dù bạn chạy gì: chấm điểm nó theo implementation shortfall so với arrival, theo Perold. Giữ slippage VWAP như một công cụ chẩn đoán kỹ năng lập lịch, đừng bao giờ dùng nó làm bảng điểm — bảng điểm phải được tính bằng tiền, và chỉ có giá arrival mới làm được điều đó.

Và quy tắc meta mà thí nghiệm liên tục củng cố: so sánh các phân phối, không phải các con số trung bình, trên dữ liệu phát lại của riêng bạn. Một bộ lập lịch là một cược vào dự báo khối lượng, và bạn không đánh giá các cược bằng khoản thanh toán trung bình của chúng trong khi bỏ qua các đuôi — đó chính là cách thị trường bán cho bạn POV.

Tuyên bố miễn trừ trách nhiệm: Thông tin được cung cấp trong bài viết này chỉ nhằm mục đích giáo dục và thông tin, không cấu thành lời khuyên về tài chính, đầu tư hoặc giao dịch. Giao dịch tiền mã hóa tiềm ẩn rủi ro thua lỗ đáng kể.

Tác Giả

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

Đi Trước Thị Trường

Đăng ký nhận bản tin của chúng tôi để có những thông tin chuyên sâu độc quyền về AI trading, phân tích thị trường và các cập nhật nền tảng.

Chúng tôi tôn trọng quyền riêng tư của bạn. Hủy đăng ký bất kỳ lúc nào.