Đọc đúng dấu và phân phối của chỉ báo, tránh hai lỗi đọc phổ biến và đưa nó vào chiến lược.
Sau một cú giảm mạnh, Lịch sử thanh lý xuất hiện một cột âm rất sâu — là rất nhiều lệnh long bị thanh lý, hay giá trị của coin này vốn hay lệch âm? 0 không phải mức bình thường của coin, và điểm này quyết định cách bạn đọc cột đó. Nếu bạn đang xem bản đồ thanh lý theo mức giá, đó là một ước tính khác, xem cách đọc Bản đồ thanh lý.
Chỉ báo thanh lý là chỉ báo do Blave tự xây dựng, đo trong một khoảng thời gian bên short hay bên long bị cưỡng chế đóng nhiều hơn, và chênh lệch bất thường đến mức nào. Thanh lý là việc sàn cưỡng chế đóng vị thế có đòn bẩy: khi long bị thanh lý, sàn gửi lệnh bán; khi short bị thanh lý, sàn gửi lệnh mua.
Giá trị dương là short bị thanh lý nhiều hơn, âm là long nhiều hơn, 0 không phải mức bình thường của coin; giá trị không có giới hạn trên hay dưới:
| Giá trị | Ý nghĩa |
|---|---|
| > 0 | Trong timeframe, short bị thanh lý nhiều hơn long |
| < 0 | Long bị thanh lý nhiều hơn short |
| ≈ 0 | Hai bên triệt tiêu, khoảng đó không có thanh lý, hoặc dữ liệu bị gián đoạn; không phải mức bình thường của coin |
Phân bố không đối xứng, đuôi dưới (long bị thanh lý) sâu hơn đuôi trên. Dưới đây là phân vị Blave đo thực tế, nến 1 giờ, timeframe 24h, giai đoạn 2024-09-15~2026-09-14, mỗi giờ lấy một giá trị (n = 17,520):
| Coin | p1 | p50 | p99 | Tỷ lệ thời gian trên 0 |
|---|---|---|---|---|
| BTC | −3.76 | −0.01 | +3.31 | 48.8% |
| ETH | −4.07 | −0.08 | +2.79 | 43.1% |
| SOL | −4.01 | −0.17 | +2.87 | 37.6% |
| DOGE | −4.07 | −0.23 | +2.97 | 31.1% |
Giá trị lớn hơn 0 nghĩa là short bị thanh lý nhiều hơn long, nhỏ hơn 0 là long bị thanh lý nhiều hơn short. Nhưng coin mà lâu dài long bị thanh lý nhiều hơn thì giá trị sẽ lệch âm một cách hệ thống, 0 không phải "mức bình thường" của coin đó.
Trong giai đoạn đo ở trên (nến 1h, timeframe 24h), tỷ lệ thời gian trên 0 xem ở bảng trên. Cùng là 0, với BTC gần như là trung vị, còn với DOGE thì đã nghiêng về thanh lý short hơn phần lớn thời gian.
Dữ liệu thanh lý công khai của sàn có giới hạn đẩy, lượng lớn thanh lý cùng một thời điểm sẽ không được gửi hết, nên đây là dữ liệu lấy mẫu, thị trường càng dữ dội thì bị đánh giá thấp càng nhiều. Trong thời gian dữ liệu gián đoạn, giá trị sẽ trông như khoảng đó không có thanh lý, và không đánh dấu thiếu dữ liệu.
Vì vậy đừng coi độ sâu của một cột đơn lẻ là quy mô thanh lý chính xác, mà hãy xem nó rơi vào đầu nào trong phân bố của chính coin đó.
Hiện chưa có chiến lược chính thức nào dùng dữ liệu thanh lý, nên cả ba cách dưới đây đều là minh họa, chưa backtest. Ngưỡng trong code mượn các phân vị đo ở trên làm điểm xuất phát, không phải kết quả quét tham số; cách quét xem Quét ngưỡng thế nào.
Cách trực tiếp nhất là đánh dấu các giai đoạn giá trị rơi vào hai đuôi phân phối. Vì đuôi dưới sâu hơn, đừng dùng cùng một giá trị tuyệt đối cho hai phía. Với BTC, p1 khoảng −3.8 và p99 khoảng +3.3.
LONG_FLUSH_TH = -3.8 # minh họa: gần p1 của BTC ở 1h × 24h SHORT_FLUSH_TH = 3.3 # minh họa: gần p99 của BTC ở 1h × 24h liq = fetch_liquidation(SYMBOL, INTERVAL, START, END, hdrs, timeframe='24h') df['LIQ'] = liq['alpha'] long_flush = df['LIQ'] <= LONG_FLUSH_TH # long bị thanh lý tập trung short_flush = df['LIQ'] >= SHORT_FLUSH_TH # short bị thanh lý tập trung
Giao dịch thế nào sau khi đánh dấu là việc bạn phải tự nghiên cứu: Blave chưa kiểm chứng giá sẽ đảo chiều hay tiếp diễn sau thanh lý tập trung. Phân vị cũng khác nhau theo coin; p1 của ETH, SOL và DOGE đều sâu hơn BTC, nên đổi coin thì phải tính lại.
Vì 0 không phải điểm cân bằng, quy tắc kiểu "trên 0 là short bị thanh lý nhiều" sẽ sai lệch với những coin như DOGE thường lệch âm trong thời gian dài. Hãy dùng phân vị của chính coin trong một cửa sổ quá khứ, ít bị ảnh hưởng bởi độ lệch dài hạn đó hơn:
# minh họa: phân vị 180 ngày qua; độ dài cửa sổ chưa được quét
lo = df['LIQ'].rolling('180D').quantile(0.01)
hi = df['LIQ'].rolling('180D').quantile(0.99)
extreme = (df['LIQ'] <= lo) | (df['LIQ'] >= hi)
Cửa sổ quá ngắn thì ngưỡng sẽ trôi theo diễn biến gần đây; cửa sổ cũng đừng trùm vào giai đoạn coin vừa có dữ liệu (BTC, ETH khoảng 2023-01), giá trị giai đoạn đó chưa ổn định, sẽ tạo ra cực trị giả.
Một cách dùng thận trọng hơn là thêm nó vào điều kiện vào lệnh của chiến lược sẵn có: không mở vị thế mới khi giá trị nằm ở một trong hai đuôi. Dùng lại hai ngưỡng của cách 1, và thay compute_entry bằng điều kiện vào lệnh của chiến lược bạn:
# minh họa: không vào lệnh khi giá trị ở một trong hai đuôi flush = (df['LIQ'] <= LONG_FLUSH_TH) | (df['LIQ'] >= SHORT_FLUSH_TH) entry = compute_entry(df) & ~flush
Tổ hợp này chưa backtest, và Blave chưa kiểm chứng việc tránh thanh lý tập trung có cải thiện hiệu suất hay không. Nó chỉ coi "vừa có một đợt thanh lý" là lý do để tạm dừng vào lệnh mới.
Chỉ báo thanh lý có hai thiết lập: timeframe là xem thanh lý trong khoảng thời gian dài bao nhiêu, chọn 15min, 1h, 4h, 8h, 24h, 3d, mặc định 24h; chu kỳ (period) quyết định bao lâu lấy giá trị một lần, chọn 5min, 15min, 1h, 4h, 8h, 1d. Đổi timeframe thì phân bố sẽ thay đổi; cùng giai đoạn đó đổi sang timeframe 1h (nến 1 giờ) đo được như sau:
| Coin | p1 | p50 | p99 | Tỷ lệ thời gian trên 0 |
|---|---|---|---|---|
| BTC | −2.62 | 0.00 | +2.12 | 52.5% |
| ETH | −2.84 | 0.00 | +2.17 | 48.8% |
| SOL | −3.07 | 0.00 | +2.21 | 45.5% |
| DOGE | −3.50 | 0.00 | +2.09 | 40.3% |
So với 24h, 1h có hai đuôi hẹp hơn, trung vị của mọi coin đều là 0.00, và tỷ lệ trên 0 gần một nửa hơn. Vì vậy phải tính lại ngưỡng mỗi khi đổi timeframe, không mang bộ số này sang bộ khác. 15min, 4h, 8h và 3d chưa được đo trong bài.
Phân vị chỉ là điểm xuất phát. Liệt kê một dãy ngưỡng ứng viên cho phía long và phía short (ví dụ p1, p2, p5 đối với p99, p98, p95), backtest từng cặp, rồi chọn một vùng mà kết quả đều không tệ, thay vì chọn ô cao nhất.
results = []
for q_lo in [0.01, 0.02, 0.05]:
for q_hi in [0.95, 0.98, 0.99]:
lo = df['LIQ'].rolling('180D').quantile(q_lo)
hi = df['LIQ'].rolling('180D').quantile(q_hi)
extreme = (df['LIQ'] <= lo) | (df['LIQ'] >= hi)
entry = compute_entry(df) & ~extreme
results.append((q_lo, q_hi, backtest(entry))) # thay backtest bằng hàm backtest của bạn; so sánh từng cặp sau khi trừ phí
Đổi timeframe, coin hay chu kỳ nến là phải quét lại; vì sao chọn vùng phẳng thay vì điểm cao nhất, xem Tránh overfitting.
| Trang | Xem gì | Quyền xem |
|---|---|---|
| Tổng quan thanh lý | Menu thả xuống chuyển giữa hai bảng xếp hạng "Thanh lý short" và "Thanh lý long", mỗi bảng 30 coin đầu. Kích thước ô là giá trị tuyệt đối, không phải số tiền thanh lý; màu là biến động giá trong timeframe. | Đăng nhập |
| Lịch sử thanh lý | Biểu đồ cột chỉ báo thanh lý của một coin chồng lên giá, chọn được timeframe và chu kỳ nến, kèm các trường stat. | Người dùng không Pro xem trễ 7 ngày gần nhất |
Đây là ý tưởng kết hợp, không phải kết luận đã kiểm chứng:
| Kết hợp | Công dụng |
|---|---|
| Thanh lý + Săn cá voi | Dùng Săn cá voi để phát hiện biến động OI bất thường, rồi xem chỉ báo thanh lý cùng giai đoạn nằm ở đuôi nào, để phân biệt biến động đó có đi kèm thanh lý tập trung hay không. |
| Thanh lý + Cường độ Taker | Chỉ báo thanh lý chỉ nhìn bên bị cưỡng chế đóng, dùng Cường độ Taker để xem lực mua bán chủ động của trader trong cùng khoảng thời gian, bù phần giao dịch tự nguyện. |
Endpoint của Chỉ báo thanh lý là GET /liquidation/get_alpha, tham số gồm symbol, period, timeframe (mặc định 24h) và ngày bắt đầu/kết thúc (start_date, end_date); trong Blave Agent là hàm fetch_liquidation. Chỉ trả về nến đã đóng, các trường là timestamp, alpha và stat, khoảng dài hơn 1 năm sẽ tự bị cắt. Các coin sớm nhất (BTC, ETH) có dữ liệu từ 2023-01-01, trước đó giá trị là 0; các coin khác có thể muộn hơn; giai đoạn vừa có dữ liệu giá trị chưa ổn định, đừng dùng để đặt ngưỡng.
Đối tượng stat của get_alpha mô tả giá trị mới nhất:
| Trường | Ý nghĩa |
|---|---|
up_prob | Xác suất giá tăng sau 24 giờ do mô hình ước tính; là giá trị ước tính, không phải tỷ lệ thắng được đảm bảo. |
avg_up_return /avg_down_return | Mức tăng trung bình khi giá tăng sau 24 giờ và mức giảm trung bình khi giá giảm, không phân biệt Chỉ báo thanh lý cao hay thấp. |
exp_value | up_prob × avg_up_return + (1 − up_prob) × avg_down_return, là số thập phân, không phải phần trăm. |
is_data_sufficient | Dữ liệu lịch sử có đủ hay không; khi là false thì các con số này chỉ để tham khảo. |
Endpoint và trường dữ liệu của Bản đồ thanh lý, Thay đổi bản đồ và trang Theo sàn, xem Cách đọc Bản đồ thanh lý.
stat là ước tính, không phải tỷ lệ thắng — mọi ngưỡng đều phải kiểm chứng bằng backtest của chính bạn.