5 tháng Chín, 2026 · rủi ro

Backtest của bạn chưa bao giờ bị thanh lý: ký quỹ, giá mark và ngưỡng đòn bẩy bạn đã bỏ qua

Backtest của bạn chưa bao giờ bị thanh lý: ký quỹ, giá mark và ngưỡng đòn bẩy bạn đã bỏ qua

Tháng trước, một chiến lược được tạo ra cho kết quả đường cong vốn có mức sụt giảm 63%. Sâu, xấu, rồi phục hồi rõ rệt trong 6 tuần tiếp theo — kiểu biểu đồ khiến nhà nghiên cứu nheo mắt rồi kết luận rằng có thể chịu được nếu giảm quy mô vị thế. Tôi chạy lại chiến lược đó qua một hệ thống ký quỹ có xét đến bậc ký quỹ duy trì. Tài khoản bị thanh lý vào ngày 41, ngay giữa đợt sụt giảm đó, và mọi thứ sau ngày 41 đều là hư cấu.

Đây là loại lỗi backtest gây thiệt hại lớn nhất mà tôi biết, vì nó không làm sai lệch lợi nhuận vài điểm cơ bản. Nó xóa một trạng thái hấp thụ khỏi mô phỏng. Chiến lược có thể về 0 và chiến lược không thể về 0 là 2 chiến lược khác nhau; backtest không bao giờ kiểm tra ký quỹ thì không thể cho bạn biết mình đang có loại nào.

Tôi liên tục thấy 3 cách làm sai sau đây.

Cách sai thứ nhất: coi đòn bẩy là một con số để nhân với lợi nhuận

Đây là kiểu phổ biến nhất. Bạn tính chuỗi lợi nhuận từ tín hiệu, quyết định chạy ở mức 10x rồi nhân lên. Đôi khi cách làm có vẻ tinh vi hơn đôi chút — quy mô vị thế được tính bằng equity * leverage / price — nhưng trạng thái tài khoản vẫn chỉ là một con số tăng giảm. Không có số dư ký quỹ, không giới hạn giá trị danh nghĩa, không có điều kiện phá sản.

Hậu quả khó nhận ra, nên lỗi này thường qua được khâu rà soát. Sharpe bất biến theo quy mô, vì vậy con số nổi bật của bạn không đổi khi tăng đòn bẩy từ 3x lên 30x; nhà nghiên cứu kết luận rằng đòn bẩy là một núm điều chỉnh miễn phí để đổi biến động lấy lợi nhuận. Mức sụt giảm tối đa tăng tuyến tính và vẫn dưới 100% do tình cờ của phép tính, vì chuỗi lợi nhuận đã nhân dần tiệm cận 0 mà không bao giờ vượt qua ngưỡng đó. Nhân một ngày giảm -9% với 12, phiên bản trung thực cho kết quả -108%, còn phiên bản ngây thơ cho kết quả “-108% nhưng đường cong vốn vẫn dương”, tùy thuộc vào việc bạn tính lãi kép hay cộng dồn. Tôi đã thấy cả 2 kiểu.

Điều còn thiếu là đòn bẩy không được áp dụng lên lợi nhuận của bạn. Nó được áp dụng lên tài sản thế chấp của bạn, mà tài sản thế chấp là một lượng hữu hạn được sàn theo dõi từng giây. Khi số dư này giảm xuống dưới mức ký quỹ duy trì, vị thế không còn thuộc về bạn nữa.

Dấu hiệu nhận biết: nếu mô phỏng của bạn không thể tạo ra khoản lỗ toàn bộ ở bất kỳ mức đòn bẩy nào, thì nó không mô hình hóa đòn bẩy.

Cách sai thứ hai: tính giá thanh lý chỉ dựa vào đòn bẩy

Mức độ tinh vi thứ hai là thêm bước kiểm tra thanh lý, thường như sau: ở mức 20x, một biến động bất lợi 5% sẽ xóa sạch ký quỹ, vậy thanh lý vị thế long tại giá vào lệnh × 0.95. Rõ ràng, dễ hiểu và sai theo 4 hướng cùng lúc.

Các sàn perp không dùng cài đặt đòn bẩy của bạn để quyết định khi nào vị thế kết thúc. Họ dùng tỷ lệ ký quỹ duy trì tăng theo giá trị danh nghĩa của vị thế, dựa trên bảng bậc. Mức gần đúng của BTCUSDT USDⓈ-M, có thể thay đổi khi các sàn cập nhật:

Giá trị danh nghĩa vị thế (USDT)Tỷ lệ ký quỹ duy trìĐòn bẩy tối đa
0 – 50,0000.40%125x
50,000 – 600,0000.50%100x
600,000 – 3,000,0001.00%50x
3,000,000 – 12,000,0002.50%20x
12,000,000 – 70,000,0005.00%10x

Vậy mức biến động bất lợi mà bạn có thể chịu với vị thế long ký quỹ riêng biệt là khoảng 1/L − MMR, chứ không phải 1/L. Ở mức 20x trong bậc thứ hai, con số là 5% − 0.5% = 4.5%. Nửa phần trăm nghe như sai số làm tròn. Với BTC ở mức 84,000, đó là 420 đô la biến động giá; trong một giờ biến động mạnh, 420 đô la là khác biệt giữa một cú rút chân khiến bạn bị thanh lý và một cú không làm được điều đó. Mỗi cú rút chân đều như tung đồng xu, mà bạn đã nghiêng tất cả về phía mình.

Tiếp theo là phí. Phí taker khi vào lệnh bị trừ khỏi ký quỹ ngay khi lệnh khớp: 0.045% trên giá trị danh nghĩa 500,000 là 225 USDT, trừ vào số dư ký quỹ 25,000 USDT; giá thanh lý vì thế dịch chuyển trước khi vị thế kịp biến động. Funding cũng làm điều tương tự, liên tục, và trên giá trị danh nghĩa có đòn bẩy, chi phí lớn hơn nhiều so với dự tính của các nhà nghiên cứu:

4.55%mức biến động bất lợi thực tế để bị thanh lý ở 20x, tính cả phí vào lệnh
0.60%chi phí funding mỗi ngày tính trên ký quỹ ở 20x, 0.01%/8h
18%số ký quỹ bị mất trong 1 tháng thị trường đi ngang

Một vị thế không có biến động trong 30 ngày — không có biến động bất lợi, không giao dịch — đã tiêu tốn gần 1/5 tài sản thế chấp và khiến giá thanh lý tiến gần hơn đáng kể. Hướng sai thứ ba và thứ tư: bậc ký quỹ thay đổi khi bạn tăng vị thế, nên vị thế bắt đầu ở bậc 0.5% rồi được bình quân giá lên bậc 1.0% sẽ có giá thanh lý bất lợi hơn mức đã tính lúc vào lệnh; còn ký quỹ chéo gộp tài sản thế chấp của nhiều vị thế, nên việc vị thế long BTC của bạn sống sót hay không phụ thuộc vào diễn biến của vị thế short ETH. Nếu mô phỏng ký quỹ chéo như một tập hợp các vị thế ký quỹ riêng biệt độc lập, bạn đang hiểu ngược cấu trúc tương quan trong chính tài khoản của mình.

Cách sai thứ ba: xử lý thanh lý theo sai mức giá, sai thời điểm và sai giá khớp

Giả sử bạn đã xác định đúng mức kích hoạt. Tiếp theo: mức giá nào chạm ngưỡng đó, bạn kiểm tra khi nào, và lệnh được khớp ở mức nào?

Thanh lý được kích hoạt theo giá mark, là chỉ số tổng hợp từ nhiều sàn giao dịch giao ngay, có thêm thành phần chênh lệch giá được làm mượt, được thiết kế có chủ đích để chống lại một cú rút chân trên một sàn đơn lẻ. Lệnh stop-loss của bạn, tùy theo cách cấu hình, có lẽ được kích hoạt theo giá giao dịch gần nhất. 2 mức giá này bất đồng đúng vào lúc quan trọng nhất. Khi thị trường bán tháo dây chuyền, giá gần nhất của hợp đồng perp có thể lệch thấp hơn giá mark 1–2% trong hàng chục giây. Backtest dùng cùng mức thấp OHLCV để xử lý cả stop lẫn thanh lý đang mô hình hóa một sàn không tồn tại.

Cả 2 lỗi đều có thể xảy ra ở đây và chúng không triệt tiêu nhau. Dùng giá gần nhất thì bạn bị thanh lý bởi những cú rút chân mà sàn đã bỏ qua. Dùng giá mark thì bạn bỏ sót trường hợp chính giá mark biến động — chỉ số lệch trên một sàn giao ngay là nguyên nhân có thật khiến bạn bị thanh lý ở mức giá chưa từng được ghi nhận trên hợp đồng perp bạn đang giao dịch.

Tiếp theo là khớp lệnh. Các hệ thống ngây thơ đóng vị thế tại giá thanh lý và ghi nhận khoản lỗ như thể đó là một lệnh stop. Thực tế diễn ra như sau: hệ thống thanh lý tiếp quản vị thế tại giá phá sản — mức giá tại đó ký quỹ của bạn bằng đúng 0, bất lợi hơn giá kích hoạt — rồi thu thêm phí xử lý thanh lý, tùy theo bậc và vào khoảng 1% giá trị danh nghĩa ở các bậc thấp. Ở mức 20x, 1% giá trị danh nghĩa bằng 20% số ký quỹ còn lại. Nếu hệ thống khớp lệnh thấp hơn mức phá sản, quỹ bảo hiểm sẽ bù phần thiếu hụt; ở một số sàn, nếu quỹ cạn, khoản lỗ xã hội hóa sẽ lan sang phía có lợi nhuận trong sổ lệnh. Khoản lỗ thực tế của bạn không chỉ là mức giảm xuống đến giá thanh lý. Nó còn lớn hơn, và phần chênh lệch lớn nhất đúng vào những ngày sổ lệnh đủ mỏng để khiến tình hình tệ nhất.

Câu hỏi về thời điểm trong cơ chế nội nến cũng áp dụng ở đây, với hệ quả nghiêm trọng hơn thường lệ. Nếu một nến 1-minute chứa cả mức chốt lời lẫn mức thanh lý, backtest kiểm tra lệnh thoát trước ký quỹ sẽ vui vẻ ghi nhận khoản lời. Sàn kiểm tra ký quỹ mỗi lần giá mark được cập nhật, khoảng 1 lần mỗi giây, trước mọi việc khác mà bạn có thể muốn xảy ra.

Hệ thống cần theo dõi những gì thay vào đó

Không điều gì trong số này đòi hỏi sự phức tạp khác thường. Điều cần thiết là trạng thái được lưu lại. Tài khoản là một đối tượng có số dư, không phải một chuỗi lợi nhuận, và mỗi nến, nó được cập nhật theo thứ tự mà sàn sẽ dùng:

  1. Số dư ví và PnL chưa thực hiện, được theo dõi riêng. Tỷ lệ ký quỹ là ký quỹ duy trì chia cho số dư ký quỹ; số dư ký quỹ bao gồm PnL chưa thực hiện. Gộp chúng lại khiến vị thế đang lỗ trông như được bảo đảm bằng tài sản tốt hơn thực tế.
  2. Bảng bậc cho từng mã, có phiên bản theo ngày. Các bậc được cập nhật. Chạy backtest năm 2023 với các bậc năm 2026 là một dạng nhìn trước tinh vi — thường có lợi, vì nhìn chung theo thời gian các sàn đã nới yêu cầu với các tài sản lớn.
  3. Chuỗi giá mark, chứ không chỉ có kline. Nếu không thể lấy lịch sử giá mark, hãy nêu rõ điều đó trong kết quả và dùng một chỉ báo thay thế thận trọng. Tuyệt đối không âm thầm thay bằng giá gần nhất.
  4. Kiểm tra ký quỹ trước tiên trong thứ tự sự kiện của nến, trước stop, mục tiêu, tín hiệu hay tái cân bằng.
  5. Khớp lệnh tại giá phá sản cộng phí xử lý thanh lý, với tỷ lệ phí lấy từ cùng hàng bậc với MMR.
  6. Trạng thái kết thúc hấp thụ. Khi vốn chủ sở hữu về 0, lượt chạy kết thúc. Không đặt lại mốc tính, không “giả định nhà giao dịch nạp thêm tiền”, không tiếp tục chuỗi với giá trị danh nghĩa mới.

Điều cuối cùng này gây ra nhiều tranh luận nhất. Lúc nào cũng có người chỉ ra rằng một bàn giao dịch thực sự sẽ nạp thêm tài sản thế chấp, nên kết thúc mô phỏng như vậy là khắt khe thiếu thực tế. Có thể. Nhưng “chiến lược này hiệu quả nếu bạn cứ bơm tiền vào sau khi nó cháy tài khoản” là một tuyên bố cần được nói thẳng như vậy và chủ động kiểm thử, với các khoản nạp thêm được nhập rõ ràng, thay vì ngầm coi đó là mặc định. Khi viết ra trung thực, phần lớn mọi người nhận ra đó không phải điều họ muốn nói.

Lợi ích thực tiễn của tất cả những điều này: khi chạy chiến lược trên giấy song song với sàn thực, tỷ lệ ký quỹ sàn báo cáo và con số trình mô phỏng tính ra phải bám sát nhau trong khoảng 1 hoặc 2 điểm cơ bản suốt cả ngày. Có thể kiểm tra mức độ khớp này miễn phí mỗi phút, trên mọi vị thế đang mở. Đây là phép kiểm tra tương đương rẻ nhất trong toàn bộ hệ thống, nhưng hầu như không ai thực hiện — và khi 2 con số lệch nhau, sàn là đúng; bạn đang có một lỗi cần tìm ra trước khi đợt sụt giảm tìm thấy nó thay bạn.

hợp đồng tương lai vĩnh cửuđòn bẩythanh lýhệ thống ký quỹbacktest
← Tất cả bài viết