📝

Draft article

This draft is visible to admins and superusers only. Sign in with an authorized account.

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

Định tuyến lệnh thông minh trong crypto: một lệnh, mười hai sàn, không có NBBO

Định tuyến lệnh thông minh trong crypto: một lệnh, mười hai sàn, không có NBBO
#thực thi lệnh
#định tuyến lệnh thông minh
#vi cấu trúc thị trường
#phân mảnh thanh khoản
#crypto
#quant
#python
#tca

Bạn cần mua 400 BTC. Binance có độ sâu lớn nhất. OKX và Bybit đều thể hiện khối lượng khá tốt ở mức giá rộng hơn một tick. Coinbase báo giá tiêu đề hấp dẫn hơn, nhưng tính bằng USD, chứ không phải USDT. Đỉnh sổ lệnh của Kraken trông tuyệt vời và đã cũ tới 400 mili giây. Upbit thậm chí còn tốt hơn, nhưng bạn chưa có phê duyệt tuân thủ (compliance) cho Hàn Quốc, và cũng chẳng có KRW. Một trader cổ phiếu nhìn vào mớ hỗn độn này sẽ với lấy một bộ định tuyến lệnh thông minh (smart order router) và ngừng suy nghĩ, vì trong thị trường cổ phiếu, các phần khó của định tuyến đã được quy định hóa thành hạ tầng từ hai thập kỷ trước. Trong crypto, chính bạn là hạ tầng đó. Không có băng ghi hợp nhất (consolidated tape), không có quy tắc bảo vệ lệnh (order-protection rule), không có trần phí, không có thanh toán bù trừ ròng — và, cơ bản nhất, không có khả năng giao dịch ở bất cứ nơi nào mà vốn của bạn chưa sẵn có ở đó.

Bài viết này bàn về việc xây dựng bộ định tuyến đó dù sao đi nữa: sổ lệnh hợp nhất và vì sao định tuyến ngây thơ theo giá tốt nhất trên sổ đó lại làm mất tiền, bài toán phân bổ như một chương trình lồi (convex program) mà bạn thực sự có thể giải trong thời hạn của một lệnh con, ràng buộc về vốn khiến SOR trong crypto không thể tách rời khỏi quản lý ngân quỹ (treasury management), định tuyến ưu tiên maker giữa các sàn, và vòng phản hồi TCA cho biết liệu tất cả những điều đó có thực sự hiệu quả hay không. Đây là bài viết song sinh về mặt kỹ thuật với Thực thi arbitrage phức tạp bằng Rust — bài đó nói về nano giây; bài này nói về các quyết định.

Những gì định tuyến cổ phiếu có được miễn phí

Đáng để nói rõ chính xác những gì định tuyến cổ phiếu Mỹ thừa hưởng từ quy định pháp lý, vì mỗi mục trong danh sách này là một thứ mà bạn phải tự xây dựng lại hoặc chấp nhận sống thiếu nó.

Regulation NMS (SEC, 2005) đã làm ba việc quan trọng ở đây. Rule 611, Quy tắc Bảo vệ Lệnh (Order Protection Rule), cấm thực thi ở mức giá tệ hơn một báo giá được bảo vệ đang hiển thị trên sàn khác — gọi là "trade-through" — điều này buộc mọi broker phải định tuyến đến giá hiển thị tốt nhất hoặc quét nó bằng các lệnh quét liên thị trường (intermarket sweep orders). Rule 610 giới hạn phí truy cập mà bất kỳ sàn nào có thể tính khi khớp một báo giá được bảo vệ ở mức 0,003 USD cho mỗi cổ phiếu, nên các mức giá hiển thị có thể so sánh được giữa các sàn trong phạm vi sai lệch 30 mils. Và băng ghi hợp nhất (các SIP) công bố Giá chào mua/chào bán tốt nhất toàn quốc (National Best Bid and Offer — NBBO), một câu trả lời chính thức duy nhất cho câu hỏi "thị trường đang ở đâu."

Kết luận học thuật về kiến trúc này là nó hoạt động tốt đến bất ngờ. O'Hara and Ye (2011), "Is market fragmentation harming market quality?" (Journal of Financial Economics 100(3), 459–474), đã khảo sát các cổ phiếu Mỹ qua nhiều mức độ phân mảnh và phát hiện rằng các cổ phiếu phân mảnh nhiều hơn lại có chi phí giao dịch thấp hơn và thực thi nhanh hơn, với giá gần với bước đi ngẫu nhiên (random walk) hơn. Cụm từ tóm tắt then chốt của họ là: cổ phiếu Mỹ hoạt động như "một thị trường ảo duy nhất với nhiều điểm truy cập." Sự phân mảnh trở nên vô hại khi các bộ định tuyến thông minh cộng với cơ chế bảo vệ khỏi trade-through khâu các mảnh vỡ lại với nhau. Foucault and Menkveld (2008), "Competition for Order Flow and Smart Order Routing Systems" (Journal of Finance 63(1), 119–158), đã chỉ ra cơ chế này tại thị trường Hà Lan: khi một sổ lệnh giới hạn thứ hai (EuroSETS của LSE) gia nhập cạnh tranh với Euronext, độ sâu hợp nhất tăng lên, và nguồn cung thanh khoản trên một sàn bị kìm hãm trực tiếp bởi tỷ lệ trade-through của sàn đó — các bộ định tuyến bỏ qua một sàn sẽ triệt tiêu động lực báo giá của sàn đó.

Ngay cả trong thế giới được quy định chặt chẽ này, góc nhìn hợp nhất vẫn là một sự dối trá ở các khung thời gian ngắn. Ding, Hanna, and Hendershott (2014), "How Slow Is the NBBO? A Comparison with Direct Exchange Feeds" (Financial Review 49(2), 313–332), đã đo NBBO của SIP so với một NBBO được xây dựng từ các luồng dữ liệu trực tiếp của sàn giao dịch trong cùng một trung tâm dữ liệu và phát hiện các sai lệch xảy ra nhiều lần mỗi giây ở các mã cổ phiếu hoạt động mạnh, thường kéo dài một đến hai mili giây — thuần túy là độ trễ tổng hợp và truyền tải. Hãy ghi nhớ con số đó: đây là phiên bản cổ phiếu của một vấn đề mà trong crypto tệ hơn từ một đến hai bậc độ lớn.

Giờ hãy xóa bỏ toàn bộ những điều trên. Crypto không có NBBO vì không có SIP. Không có quy tắc trade-through: một sàn sẵn sàng khớp lệnh cho bạn ở mức giá tệ hơn năm tick so với báo giá của sàn khác, và chẳng ai nộp đơn khiếu nại gì cả. Không có trần phí: phí taker dao động từ các mức đàm phán dưới một basis point đến các biểu phí bán lẻ 10 bps, nên thứ tự theo giá hiển thị và thứ tự theo giá ròng thường xuyên mâu thuẫn nhau. Và không có thanh toán bù trừ hợp nhất: mỗi sàn là một hầm chứa (silo) riêng với số dư phải nạp trước. Bạn chính là SIP, bộ định tuyến, và công ty thanh toán bù trừ, tất cả cùng một lúc.

Xây dựng sổ lệnh hợp nhất, và vì sao định tuyến ngây thơ theo giá tốt nhất thất bại

Nền tảng kỹ thuật khá tẻ nhạt: N luồng WebSocket L2, xử lý khoảng trống số thứ tự (sequence-number gap) theo từng sàn, chuẩn hóa ký hiệu và bước giá (tick size), và chuẩn hóa đồng tiền báo giá (một sổ lệnh BTC-USD và một sổ lệnh BTC-USDT khác nhau theo tỷ giá USDT/USD, vốn không hằng bằng 1,0 và đôi khi lệch khá xa khỏi 1,0). Hợp nhất các sổ lệnh đã chuẩn hóa thành một bậc thang giá được sắp xếp duy nhất, gắn thẻ mỗi mức giá với sàn tương ứng và — điều quan trọng — độ tuổi của snapshot mà nó đến từ đó. Nếu sổ lệnh hợp nhất của bạn không mang theo độ tuổi báo giá theo từng sàn như một trường dữ liệu hạng nhất, thì bạn đã xây một screensaver, không phải một bộ định tuyến.

Sổ lệnh hợp nhất qua các sàn với thanh khoản cũ và thanh khoản ảo được đánh dấu nổi bật

Bộ định tuyến ngây thơ duyệt qua bậc thang hợp nhất này theo kiểu tham lam: giá ròng tốt nhất trước tiên. Nó thất bại vì ba lý do riêng biệt, và đáng để giữ chúng tách bạch vì cách khắc phục cho mỗi lý do là khác nhau.

Báo giá cũ và độ lệch độ trễ. Các sàn của bạn không phân phối dữ liệu với cùng một độ trễ. Một luồng dữ liệu đặt cạnh (colocated) có thể chỉ cũ 3 ms khi bạn hành động dựa trên nó; một WebSocket công khai từ một sàn ở châu lục khác có thể đã cũ tới 300 ms. Do đó, đỉnh sổ lệnh hợp nhất là một tổ hợp của những "quá khứ" khác nhau. Khi BTC dịch chuyển 10 bps trong 200 ms — một chuyện thường tình — báo giá của sàn cũ trông hấp dẫn một cách có hệ thống ở đúng phía sai. Định tuyến đến các sàn đó đồng nghĩa bạn mua lấy một cuộc đua mà bạn đã thua sẵn: báo giá đã biến mất, lệnh IOC của bạn quay lại rỗng hoặc chỉ khớp một phần, và đến khi bạn định tuyến lại, các sàn tươi mới đã tái định giá. Đây chính là vấn đề sai lệch SIP 1–2 ms của Ding–Hanna–Hendershott, ngoại trừ việc sai lệch của bạn kéo dài hàng trăm mili giây và không ai có nghĩa vụ tôn trọng bất cứ điều gì.

Thanh khoản ảo. Cộng dồn khối lượng hiển thị qua các sàn là đếm trùng, vì cùng một tồn kho của market maker được báo giá ở nhiều nơi cùng lúc. Van Kervel (2015), "Competition for Order Flow with Fast and Slow Traders" (Review of Financial Studies 28(7), 2094–2127), đã ghi nhận điều này trong thị trường cổ phiếu phân mảnh: một giao dịch trên một sàn được theo sau trong vòng vài mili giây bởi việc hủy hàng loạt lệnh giới hạn trên các sàn cạnh tranh, đúng như dự đoán của một mô hình trong đó các nhà cung cấp thanh khoản nhanh báo giá khối lượng trùng lặp ở khắp mọi nơi và rút các bản sao ngay khi một bản bị khớp. Các market maker trong crypto chạy đúng kịch bản này trên Binance/OKX/Bybit, vì vậy độ sâu hợp nhất có thể tiếp cận được thấp hơn đáng kể so với độ sâu hợp nhất được hiển thị, và mức thiếu hụt này tăng lên theo mức độ bạn đánh vào các sàn một cách tuần tự (thay vì đồng thời). Nếu bộ định tuyến của bạn gửi lệnh con từng sàn một, chờ xác nhận khớp lệnh của từng cái, thì bạn đang tự "cày" chính mình: mỗi lần khớp lệnh báo hiệu cho phần còn lại của thị trường hủy bỏ báo giá.

Phí làm đảo lộn thứ tự bậc thang. Một sàn cho thấy giá gốc tốt nhất với phí taker 7,5 bps thường lại là giá ròng tệ nhất trong sổ lệnh. Điều này nghe có vẻ quá hiển nhiên để phải nói ra, thế nhưng định tuyến theo "giá hiển thị tốt nhất" chính xác là những gì mà hầu hết các bộ định tuyến crypto thế hệ đầu (và một số sản phẩm của nhà cung cấp bên thứ ba) triển khai. So sánh net-of-fee (đã trừ phí) là ngưỡng tối thiểu; bài viết song sinh về phí maker-taker và rebate trình bày chi tiết toán học phí theo từng sàn, động lực của các bậc VIP, và vì sao mức phí biên của bạn — chứ không phải mức phí niêm yết — mới là thứ cần đưa vào bộ định tuyến.

Bài toán tối ưu hóa định tuyến

Hãy hình thức hóa bài toán lệnh con. Bạn phải mua khối lượng QQ ngay lập tức, có thể giao dịch được (marketable), trên các sàn v=1,,Vv = 1,\dots,V. Gọi Av(x)A_v(x) là giá bán biên (marginal ask) của sàn vv sau khi ăn hết xx đơn vị trong sổ lệnh của sàn đó (một hàm bậc thang không giảm từ snapshot L2), fvf_v là phí taker của sàn đó, và λv\lambda_v là mức phạt trên mỗi đơn vị cho tính cũ và lựa chọn bất lợi (adverse selection) trên sàn vv (được hiệu chỉnh bên dưới, từ chính các markout của bạn). Phép phân bổ q=(q1,,qV)q = (q_1, \dots, q_V) giải bài toán

minq0,  vqv=Q    v=1VCv(qv),Cv(qv)=(1+fv)0qvAv(x)dx  +  λvqv.\min_{q \ge 0,\; \sum_v q_v = Q} \;\; \sum_{v=1}^{V} C_v(q_v), \qquad C_v(q_v) = (1+f_v)\int_0^{q_v} A_v(x)\,dx \;+\; \lambda_v\, q_v .

Mỗi CvC_v là hàm lồi (tích phân của một hàm không giảm, cộng thêm một số hạng tuyến tính), nên bài toán này là bài toán lồi, và các điều kiện KKT kể ra toàn bộ câu chuyện: tồn tại một ngưỡng μ\mu sao cho

Cv(qv)=(1+fv)Av(qv)+λv=μvới mọi saˋn coˊ qv>0,C_v'(q_v^*) = (1+f_v)\,A_v(q_v^*) + \lambda_v = \mu \quad \text{với mọi sàn có } q_v^* > 0,

Cv(0)μC_v'(0) \ge \mu đối với các sàn không nhận được gì. Nói cách khác: hãy đổ lệnh vào các sàn như đổ nước, cân bằng chi phí biên toàn phần ở mọi nơi bạn giao dịch. Một sàn bị loại chính xác khi đơn vị đầu tiên của nó — giá tốt nhất, cộng phí, cộng phạt vì tính cũ — tệ hơn đơn vị biên ở nơi khác.

Phân bổ kiểu đổ nước cân bằng chi phí biên trên các đường chi phí của từng sàn

Đối với các sổ lệnh dạng hàm bậc thang, lời giải kiểu "đổ nước" (water-filling) được tính bằng cách duyệt tham lam qua bậc thang hợp nhất đã điều chỉnh theo phí và mức phạt — vì vậy cách duyệt sâu tham lam tự nó không sai; nó chính là lời giải chính xác với điều kiện bạn duyệt tham lam theo chi phí biên ròng với khối lượng đã bị chiết khấu (haircut), chứ không phải theo giá hiển thị thô. Sự khác biệt đó chính là toàn bộ khoảng cách giữa một bộ định tuyến thực thụ và một cái screensaver.

Cách xử lý kinh điển cho bài toán tổng quát là của Cont and Kukanov, "Optimal order placement in limit order markets" (Quantitative Finance 17(1), 21–39, 2017; arXiv:1210.1625). Họ hình thức hóa việc đặt lệnh qua các sàn — bao gồm cả việc chia giữa lệnh giới hạn và lệnh thị trường, phí và rebate, cùng một mức phạt cho rủi ro thực thi — dưới dạng một bài toán tối ưu hóa lồi, suy ra một công thức đóng tường minh cho việc chia lệnh giới hạn/lệnh thị trường tại một sàn duy nhất, và đưa ra một thuật toán xấp xỉ ngẫu nhiên (stochastic approximation) cho trường hợp nhiều sàn, tính toán một phép phân bổ trên mười hai sàn giao dịch trong chưa đầy 200 ms. Khung lý thuyết này có trước cả crypto nhưng chuyển giao gần như nguyên vẹn, vì nó chưa bao giờ giả định có một NBBO ngay từ đầu — nó chỉ giả định có sổ lệnh theo từng sàn, phí theo từng sàn, và sự bất định về việc khớp lệnh, đó chính xác là tình huống trong crypto.

Dưới đây là một bản phác thảo tối giản, trung thực về phía marketable (phép đổ nước lồi với chiết khấu vì tính cũ):

import math
from dataclasses import dataclass

@dataclass
class Venue:
    name: str
    asks: list[tuple[float, float]]  # (price, displayed size), sorted
    taker_fee: float                 # fractional, e.g. 0.0002 = 2 bps
    quote_age_ms: float
    kappa: float                     # phantom-liquidity decay rate, 1/ms
    lam: float                       # staleness/toxicity penalty, $ per unit

def allocate(venues: list[Venue], Q: float):
    ladder = []  # (marginal all-in cost, accessible qty, venue)
    for v in venues:
        surv = math.exp(-v.kappa * v.quote_age_ms)  # P(level still there)
        for price, size in v.asks:
            cost = price * (1.0 + v.taker_fee) + v.lam
            ladder.append((cost, size * surv, v.name))
    ladder.sort()

    fills, remaining = {}, Q
    for cost, qty, name in ladder:
        take = min(qty, remaining)
        fills[name] = fills.get(name, 0.0) + take
        remaining -= take
        if remaining <= 1e-12:
            break
    return fills, remaining  # remaining > 0 => book too thin: slice parent

Mười sáu dòng logic; toàn bộ phần "thông minh" nằm ở dữ liệu đầu vào. κ\kappa (tốc độ khối lượng hiển thị bốc hơi theo độ tuổi báo giá) được hiệu chỉnh từ chính tỷ lệ khớp lệnh IOC của bạn như một hàm của độ tuổi báo giá tại thời điểm gửi lệnh. λv\lambda_v đến từ các markout theo từng sàn (phần cuối bài). Cả hai đều được đo lường, chứ không phải đoán mò.

Một ví dụ minh họa. Mua Q=10Q = 10 BTC trên ba sàn:

Sàn Phí taker Độ tuổi báo giá Giá bán (giá × khối lượng)
A (sâu, tươi) 2,0 bps 10 ms 87.000 × 3,0; 87.010 × 4,0; 87.025 × 6,0
B (phí rẻ, cũ) 1,0 bps 250 ms 86.995 × 1,5; 87.015 × 2,0
C (giá tiêu đề tốt nhất, phí béo) 7,5 bps 20 ms 86.990 × 2,0; 87.000 × 3,0

Băng dữ liệu thô cho thấy C có giá bán tốt nhất (86.990), rồi đến B. Điều chỉnh theo phí và bậc thang đảo lộn hoàn toàn: mức giá đỉnh của C sau khi trừ phí là 86.990×1,00075=87.05586{.}990 \times 1{,}00075 = 87{.}055, thanh khoản tệ nhất trên màn hình. Mức đỉnh của B sau khi trừ phí là 87.004, của A là 87.017. Áp dụng mức chiết khấu 30% vì tính cũ cho khối lượng hiển thị của B (eκ250ms0,7e^{-\kappa \cdot 250\text{ms}} \approx 0{,}7) và đổ nước: 1,05 BTC từ mức đầu tiên của B, 3,0 từ mức đầu tiên của A, 1,4 từ mức thứ hai của B, 4,0 từ mức thứ hai của A, 0,55 từ mức thứ ba của A. Giá trung bình toàn phần: 87.022,2 USD mỗi BTC. Bộ định tuyến ngây thơ theo giá hiển thị tốt nhất — C trước, rồi B với khối lượng theo giá niêm yết, rồi mức thứ hai của C — trả tới 87.038,8 USD: tệ hơn 1,9 bps, khoảng 166 USD trên một lệnh con 10 BTC, và tích lũy qua từng lệnh con của từng lệnh cha suốt cả ngày. Và hãy chú ý điểm mấu chốt: sàn có giá hiển thị tốt nhất trên băng dữ liệu lại nhận được không dòng lệnh nào từ bộ định tuyến đã tối ưu hóa. Trong crypto, không ai ép bạn phải giao dịch ở đó — định tuyến qua một "báo giá được bảo vệ" không phải là một khái niệm tồn tại — và phép phân bổ đúng thường xuyên bỏ qua hoàn toàn giá tốt nhất bề ngoài.

Những gì chương trình lồi vẫn bỏ qua: tính đồng thời (bắn tất cả các lệnh con tới các sàn trong cùng một mili giây, nếu không các vụ hủy lệnh kiểu van Kervel sẽ tái định giá các sàn ngay giữa quá trình thực thi), kích thước lô rời rạc và giá trị danh nghĩa tối thiểu (làm tròn lời giải liên tục, sửa lại theo cách tham lam), và lựa chọn không vượt qua spread chút nào — đó là chủ đề của phần 5. Với câu hỏi sâu hơn về việc các lệnh cha lớn nên được chia nhỏ theo thời gian như thế nào trước khi bất kỳ logic theo sàn nào ở trên chạy, xem Thực thi tối ưu Almgren–Chriss; SOR quyết định lệnh con đi đâu, không phải khi nào lệnh con xảy ra.

Ràng buộc về vốn: SOR chính là quản lý ngân quỹ

Tất cả những gì ở trên ngầm giả định rằng bạn có thể giao dịch qvq_v trên sàn vv. Trong thị trường cổ phiếu, giả định đó là miễn phí: một prime broker duy nhất, thanh toán bù trừ ròng, giao dịch ngay và chuyển tiền sau. Trong crypto, đó là ràng buộc trói buộc của toàn bộ hệ thống. Các sàn yêu cầu số dư phải được nạp trước — bạn không thể ăn giá bán của Kraken bằng USDT đang nằm ở Binance. Vậy nên bài toán thực sự là

minq0,  qv=QvCv(qv)s.t.qvBv    v,\min_{q \ge 0,\; \sum q_v = Q} \sum_v C_v(q_v) \quad \text{s.t.} \quad q_v \le B_v \;\; \forall v,

trong đó BvB_v là số dư khả dụng của bạn trên sàn vv (bằng tài sản báo giá đối với lệnh mua, tài sản cơ sở đối với lệnh bán). Các điều kiện KKT bây giờ trở thành Cv(qv)=μηvC_v'(q_v^*) = \mu - \eta_v với ηv0\eta_v \ge 0 là nhân tử Lagrange trên trần số dư. Ở các sàn bị giới hạn, ηv=μCv(Bv)>0\eta_v = \mu - C_v'(B_v) > 0: đồng đô la biên ở đó thực thi rẻ hơn so với mức nước thị trường chung, và bạn buộc phải đẩy dòng lệnh sang các sàn đắt hơn. Nhân tử đó không phải là một khái niệm trừu tượng — ηv\eta_v đúng theo nghĩa đen là số đô la mỗi đơn vị mà bạn sẽ tiết kiệm được nếu ngay bây giờ có thêm một đơn vị số dư trên sàn vv. Cộng dồn qua dòng lệnh dự báo của bạn, đó là mức sẵn lòng chi trả của bạn cho một lần chuyển tiền tái cân bằng, và quyết định tái cân bằng trở thành một phép so sánh mà bất kỳ hệ thống ngân quỹ nào cũng có thể thực thi: chuyển tồn kho khi

E ⁣[future childrenηv]  >  transfer fee+expected adverse move during transfer latency.\mathbb{E}\!\left[\textstyle\sum_{\text{future children}} \eta_v \right] \;>\; \text{transfer fee} + \text{expected adverse move during transfer latency}.

Vế phải không hề nhỏ và cũng không hằng định. BTC on-chain cần 2–6 xác nhận (20–60 phút) trước khi các sàn ghi có; các giao dịch chuyển ERC-20 mất vài phút cộng với phí gas tăng vọt đúng lúc thị trường bận rộn nhất; các đường ray TRC-20 và Solana nhanh hơn và rẻ hơn nhưng không được hỗ trợ ở mọi nơi; và mỗi sàn lại có hàng đợi xử lý rút tiền của riêng mình, kéo dài từ vài phút đến vài giờ đúng vào những sự kiện biến động mạnh, chính là lúc bộ định tuyến của bạn muốn chuyển tồn kho nhất. Toàn bộ phép tính chi phí chuyển tiền — phí, phân phối độ trễ, và rủi ro giá bạn gánh chịu giữa chừng chuyến chuyển — được trình bày chi tiết trong bài viết về arbitrage funding rate, và nó chuyển giao gần như nguyên văn: một lần tái cân bằng SOR chính là cùng một đối tượng với một lần chuyển chân (leg) arbitrage, bao gồm cả phần chi phí.

Đây là lý do vì sao kết quả học thuật cần thấm nhuần ở đây không phải là một bài báo về thực thi mà là Makarov and Schoar (2020), "Trading and Arbitrage in Cryptocurrency Markets" (Journal of Financial Economics 135(2), 293–319). Họ ghi nhận các sai lệch giá liên sàn tồn tại dai dẳng trong nhiều ngày đến nhiều tuần — bao gồm cả "phần bù kim chi" (kimchi premium) của Hàn Quốc vượt quá 40% vào đầu năm 2018 — và cho thấy chi phí giao dịch không thể giải thích được điều đó; nguyên nhân là vốn arbitrage bị kiểm soát vốn và di chuyển chậm chạp. Các sàn crypto không phải là "một thị trường ảo duy nhất với nhiều điểm truy cập" như của O'Hara–Ye. Chúng là những bể chứa bị phân đoạn một phần, kết nối với nhau bằng những đường ống chậm chạp và tốn kém, và bộ định tuyến của bạn sống bên trong sự phân đoạn đó. Một SOR crypto không có mô hình ngân quỹ chỉ là một SOR cổ phiếu giả trang.

Vòng lặp định tuyến nhanh phân bổ trong phạm vi số dư, vòng lặp ngân quỹ chậm tái định vị tồn kho

Trong thực tế, điều này trở thành một bộ điều khiển hai khung thời gian. Vòng lặp nhanh (mili giây) giải bài toán đổ nước có ràng buộc trong phạm vi số dư hiện tại, cho từng lệnh con. Vòng lặp chậm (vài phút đến vài giờ) theo dõi chuỗi thời gian của các giá bóng (shadow price) ηv\eta_v và dòng lệnh dự báo, và lên lịch chuyển tiền khi thành phần dai dẳng của ηv\eta_v vượt qua ngưỡng chi phí chuyển tiền — có độ trễ trễ (hysteresis), vì việc đánh bóng bàn tồn kho qua lại giữa các sàn theo nhiễu chính là cách bạn biếu không lợi thế của mình cho mạng Tron. Các bàn giao dịch tổ chức nén bài toán này lại bằng thanh toán ngoài sàn (off-exchange settlement) (Copper ClearLoop, Ceffu MirrorX): tài sản thế chấp nằm ở một bên lưu ký (custodian) và được phản chiếu đến các sàn, giúp thu hẹp đáng kể độ trễ chuyển tiền đối với các sàn được hỗ trợ — nó thu hẹp ràng buộc, chứ không xóa bỏ nó, và nó đưa vào một hạng mục rủi ro đối tác (counterparty) riêng của chính nó.

Định tuyến ưu tiên maker và các trò chơi hàng đợi liên sàn

Một bộ định tuyến chỉ vượt qua spread đang bỏ lại thanh khoản rẻ nhất chưa được mua: chính là thanh khoản của bạn. Khung lý thuyết Cont–Kukanov đã chứa sẵn câu trả lời — công thức đóng tại một sàn duy nhất của họ chia lệnh giữa đặt lệnh (posting) và khớp lệnh (taking) dựa trên phí, vị trí trong hàng đợi, và mức độ e ngại rủi ro thực thi — và phiên bản nhiều sàn tổng quát hóa nó: đặt lệnh thụ động (post passively) trên các sàn nơi (phí maker, độ dài hàng đợi, xác suất khớp lệnh trong thời hạn của lệnh con) chiếm ưu thế, khớp lệnh (take) trên các sàn nơi tính tức thời có chi phí rẻ, và coi phần thụ động chưa khớp còn lại như dòng lệnh quay lại bài toán tối ưu hóa taker vào lúc hết hạn.

Có hai điểm đặc thù của crypto khiến điều này phức tạp hơn phiên bản trong thị trường cổ phiếu.

Săn phí là một cái bẫy đã được đo lường. Battalio, Corwin, and Jennings (2016), "Can Brokers Have It All? On the Relation between Make-Take Fees and Limit Order Execution Quality" (Journal of Finance 71(5)), đã chỉ ra rằng các broker Mỹ định tuyến lệnh giới hạn đến các sàn trả rebate cao nhất lại cho ra kết quả thực thi kém hơn một cách có thể đo lường được — tỷ lệ khớp lệnh thấp hơn, chất lượng thực hiện tệ hơn — vì sàn trả rebate chính là nơi mà lệnh của mọi người săn rebate khác cũng đang nằm ở đó: hàng đợi dài nhất, lệnh khớp bất lợi nhất. Phép tương tự trong crypto là chính xác. Sàn trả rebate maker tốt nhất thu hút mọi báo giá thụ động của các market maker; lệnh của bạn gia nhập một hàng đợi sâu và khớp lệnh chủ yếu khi giá sắp vượt qua bạn. Kinh tế học maker theo net-of-markout (đã trừ markout) theo từng sàn (phần tiếp theo) thường xuyên xếp hạng các sàn theo hướng ngược lại với biểu phí của chúng.

Độ lệch độ trễ là một trò chơi hai chiều. Cùng một dòng thông tin liên sàn mà van Kervel đã ghi nhận như những vụ hủy lệnh phòng thủ, nhìn từ phía bên kia, lại là một tín hiệu tấn công: một giao dịch tại đỉnh sổ lệnh của Binance dự báo các giao dịch và vụ hủy lệnh tại mức tương ứng của OKX trong vòng vài mili giây. Do đó, một bộ định tuyến ưu tiên maker phải (a) tái định giá các lệnh chờ của mình dựa trên các sự kiện của các sàn khác — neo theo một microprice liên sàn, chứ không phải mid cục bộ — nếu không nó sẽ trở thành đối tác chậm chạp mà các nhà arbitrage liên sàn tỉa dần; và (b) nó có thể chơi trò chơi này một cách có chủ đích: đặt lệnh trên sàn đi sau, phòng ngừa rủi ro (hedge) trên sàn đi trước ngay tại thời điểm khớp lệnh. Đó chính là arbitrage hàng đợi liên sàn, và đó là cùng một cấu trúc độ trễ được khai thác trong thực thi arbitrage liên sàn, chỉ có điều được nhúng vào bên trong một nhiệm vụ thực thi thay vì một sổ stat-arb. Yêu cầu vận hành là giống hệt nhau: sự kiện khớp lệnh trên sàn A và lệnh hedge đến sàn B phải sống trong cùng một đường dẫn mã nguồn có độ trễ dưới mười mili giây, nếu không lợi thế sẽ thuộc về người khác.

Đo lường chất lượng định tuyến: markout và bảng xếp hạng

Các bộ định tuyến cổ phiếu bị kỷ luật bởi công bố thông tin theo Rule 605/606. Không có gì kỷ luật bộ định tuyến của bạn ngoài chính TCA của bạn — khung lý thuyết từ chênh lệch thực thi (implementation shortfall) và TCA là bảng điểm; đây là lát cắt đặc thù cho bộ định tuyến của khung đó.

Phép đo nguyên tử là markout theo từng sàn: với mỗi lần khớp lệnh, ghi lại mức mid (hợp nhất, đã điều chỉnh độ trễ) tại t+Δt + \Delta với Δ{100ms,1s,10s,1min}\Delta \in \{100\text{ms}, 1\text{s}, 10\text{s}, 1\text{min}\}, có dấu sao cho giá trị âm nghĩa là thị trường đã di chuyển bất lợi cho lệnh khớp của bạn. Tổng hợp thành một bảng xếp hạng toàn phần:

Sàn Tỷ trọng khớp taker Spread hiệu dụng (bps) Phí (bps) Markout 1s (bps) Chi phí toàn phần (bps)
A 46% 1,4 2,0 −0,6 4,0
B 31% 1,9 1,0 −2,1 5,0
C 23% 1,2 7,5 −0,4 9,1

Cột phí nói rằng B là sàn rẻ. Cột toàn phần nói rằng B là sàn đắt: các báo giá cũ của nó khớp lệnh cho bạn một cách có chọn lọc khi thị trường đã đang di chuyển xuyên qua chúng, và markout 1 giây thu hóa đơn đó. Sự đảo ngược này — xếp hạng theo phí so với xếp hạng theo chi phí hiệu dụng — là phát hiện nhất quán nhất khi các bàn giao dịch lần đầu xây dựng bảng này, và đó chính xác là con số cần đưa trở lại vào bộ định tuyến: mức phạt λv\lambda_v trong chương trình lồi chính là khoản thâm hụt markout dai dẳng theo từng sàn, được đo lường, làm mượt, và cập nhật. Bộ định tuyến và TCA tạo thành một vòng lặp khép kín, hoặc không cái nào hoạt động cả.

Một cái bẫy về phương pháp luận: các bảng xếp hạng được xây dựng từ một bộ định tuyến đang hoạt động trực tiếp bị nhiễm bởi thiên lệch lựa chọn (selection bias). Nếu bộ định tuyến đã gửi dòng lệnh khó, có thông tin đến sàn sâu và dòng lệnh dễ đến sàn rẻ, thì markout của sàn sâu sẽ trông tệ một cách bất công. Cách khắc phục sạch sẽ là ngẫu nhiên hóa có chủ đích — định tuyến một vài phần trăm lệnh con một cách ngẫu nhiên đồng đều (một bộ định tuyến ε\varepsilon-greedy, mà dân quant sẽ nhận ra đó là một bandit với một tiên nghiệm tối ưu hóa lồi) — để tồn tại một tình huống phản thực (counterfactual). Nó tốn vài basis point trên phần lệnh được ngẫu nhiên hóa và đó là cách duy nhất để chứng minh rằng 95% dòng lệnh còn lại được định tuyến tốt.

Vậy là, toàn bộ ngăn xếp: một sổ lệnh hợp nhất trung thực về độ trễ; một phép đổ nước lồi trên chi phí biên ròng với các tham số bốc hơi và độc hại (toxicity) được đo lường; một vòng lặp nhanh có ràng buộc số dư, mà các giá bóng của nó điều khiển một vòng lặp chậm nhận thức được chi phí chuyển tiền; đặt lệnh thụ động tôn trọng hàng đợi và dòng thông tin liên sàn; và TCA dựa trên markout, được ngẫu nhiên hóa, đưa mọi tham số quay trở lại. Không có thành phần nào trong số này tự thân sâu sắc. Chính hệ thống mới sâu sắc — vì trong crypto, không như cổ phiếu, không có nhà quản lý nào xây sẵn bất kỳ lớp nào của nó cho bạn, và thị trường tính phí 2 bps trên mỗi lệnh con, mãi mãi, cho đến khi bạn tự làm điều đó.

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.