Flex Model: an event-driven feature engineering system
Bài tóm tắt Jane Street 2026 4. Điều chỉnh Độ khó: Khó
Jane Street · 2026 · 4. Điều chỉnh · Độ khó: Khó — bài gốc
Bối cảnh
- Nhiều chiến lược giao dịch của Jane Street dùng mạng nơ-ron, nhưng dữ liệu thị trường thô (lệnh được thêm vào sổ lệnh, lệnh huỷ, giao dịch khớp) phải biến thành feature trước. Ví dụ đơn giản: mid (giữa giá mua tốt nhất và giá bán tốt nhất) chỉ cần trạng thái sổ hiện tại; "chênh lệch trung bình giữa giá khớp và mid qua 10 giao dịch gần nhất" thì cần thêm một bộ đệm lịch sử, tức feature có state. Model thật dùng hàng trăm tới hàng nghìn feature, nhiều cái phải cập nhật ở mỗi sự kiện, và researcher đổi danh sách liên tục.
- Hệ cũ lên production khoảng 2012, là một monolith gộp định nghĩa hàng trăm tín hiệu, sinh dữ liệu cho nghiên cứu, tính tín hiệu live và cả logic khớp lệnh. File chính hơn 11k dòng khi bắt đầu thay, hơn 17k khi khai tử; hai hàm lớn nhất gần 3k dòng mỗi cái. Thêm một feature chỉ là tỉ số hai số chạm 19 file. Mọi feature được tính cho mọi thị trường ở mọi lần đánh giá, nên một thị trường cần feature mới làm chậm tất cả.
Thay đổi chính
- 2019: bắt đầu thay thế ở văn phòng Hồng Kông, nơi đau nhất: châu Á có nhiều thị trường, mỗi nơi một cơ quan quản lý, sàn có thể đổi cả hệ giao dịch trong một cuối tuần.
- Mất khoảng 2,5 năm vì cố thay tất cả một lần. Cuối 2021 thu hẹp còn một chiến lược đơn giản ở một thị trường, chạy live đầu 2022; thêm khoảng một năm để đội toàn cầu thay những instance quan trọng nhất của hệ cũ.
- Mục tiêu thiết kế: tách tính feature khỏi code khớp lệnh; feature là mảnh code nhỏ ghép được, định nghĩa ở đúng một chỗ; nhanh, nghĩa là không cấp phát trên đường nóng.
- Không dùng Incremental (thư viện tính toán incremental của chính họ): Incremental làm việc với giá trị hiện tại và dựa vào gộp cập nhật và cutoff, nên hai giao dịch cùng giá 100 sẽ mất một cái khỏi bộ đệm. Feature lại cần lịch sử sự kiện. Theo Ron Minsky, "lịch sử dễ xử lý khi giới hạn tính động": Flex Model bỏ khả năng đổi đồ thị khi đang chạy để giữ lịch sử trong đồ thị.
- Mỗi feature tách thành event handler (chạy ở mọi sự kiện liên quan, cập nhật state) và eval (chỉ chạy khi cần giá trị).
- Engine đời đầu viết theo một chiến lược: chỉ phản ứng với cập nhật sổ lệnh, nhóm feature và thứ tự chạy hard-code (tới mức có hàm tên
run_feature_provider_on_book_event_and_evaluate_execution_dependencies_and_always_evaluate_feature_providers). Không thêm được timer, message từ process khác, nguồn dữ liệu khác. - Engine viết lại: mỗi feature khai báo một handler cho mỗi loại sự kiện nó quan tâm và các giá trị nó đọc. Lúc khởi động, planner dựng kế hoạch cụ thể cho mỗi loại sự kiện (danh sách eval và handler có thứ tự theo phụ thuộc). Logic khớp lệnh chỉ còn là một feature nữa. Không dùng cutoff vì nhánh
ifphụ thuộc dữ liệu thị trường gần như ngẫu nhiên, CPU đoán nhánh kém. Team thêm loại sự kiện mới trong thư viện thường, không chạm core. - Hiệu năng: mọi cấu trúc dữ liệu và callback tạo lúc khởi động; đường nóng chỉ đọc/ghi bộ nhớ cấp sẵn, có annotation
[@zero_alloc]do compiler kiểm và test fail nếu cấp phát. Float unboxed nhờ OxCaml (nhánh compiler của họ): tail latency giảm khoảng 25% trong một lần replay thử. Đang thử sinh code cho cả kế hoạch thành một hàm thẳng lúc khởi động.
Vì sao
- Code feature giống nhau chạy cả live lẫn lịch sử, nên kết quả training và production dễ khớp.
- Planner chỉ đưa vào kế hoạch những gì cần, nên feature của một thị trường không làm chậm thị trường khác như ở hệ cũ.
- 2026: dùng trong nhiều hệ giao dịch, hàng trăm feature được thêm trong năm qua; phần chung được đưa vào vùng code intern truy cập được, feature nhạy cảm để riêng.
Bài học cho SWE
- Thay một monolith lâu năm: đừng thay tất cả một lần; chọn một ca dùng hẹp để lên production rồi mở rộng.
- Mô hình "giá trị hiện tại" (spreadsheet, build system, UI phản ứng) và mô hình "lịch sử sự kiện" (feature thị trường) cần engine khác nhau.
- Đóng băng đồ thị lúc khởi động đổi lấy được nhiều thứ: lập kế hoạch tĩnh, không cấp phát, có thể sinh code.
Liên quan
Hạ tầng nghiên cứu định lượng (dữ liệu thị trường, feature, backtest)Hệ thống độ trễ thấp (low latency)Nền tảng ML (feature, training, serving, giám sát model)
#feature engineering#market data#order book#neural network#monolith#Incremental#FRP#event handler#eval#planner#zero-alloc#OxCaml#unboxed float#live/historical parity
Được nhắc tới trong
Chủ đề (3)
Công ty (1)