Có lẽ tín hiệu vào lệnh là thứ ít ảnh hưởng nhất trong backtest của bạn. Tôi có thể lấy một quy tắc động lượng tầm thường, giữ nguyên mọi thời điểm vào và thoát lệnh, chỉ thay đổi hàm quyết định số hợp đồng cần nắm giữ, rồi đưa Sharpe ròng từ 0.41 lên 0.71 và mức sụt giảm tối đa từ 31% xuống 13%. Cùng giao dịch. Cùng khớp lệnh. Chiến lược khác.
Nhận định đó khiến nhiều người khó chịu, và cũng nên như vậy, vì nó hàm ý rằng phần lớn thời gian bỏ ra để tinh chỉnh độ dài lookback và ngưỡng bộ lọc chỉ đang tối ưu một yếu tố nhỏ. Vì thế, tôi sẽ cho bạn xem các lần chạy thực tế, rồi cũng công nhận phần đúng trong lời chỉ trích: lập luận này có một phiên bản sai, và bạn nên biết tôi đang đưa ra phiên bản nào.
Một tín hiệu, 6 cách nắm giữ
Tín hiệu: hợp đồng vĩnh cửu ETHUSDT trên Binance USDⓈ-M, nến 1 giờ; mua khi EMA 12 giờ nằm trên EMA 96 giờ, còn lại đứng ngoài, không bán khống. Từ tháng 7 năm 2022 đến tháng 6 năm 2026. 431 giao dịch khứ hồi. Phí taker hai chiều ở mức 5.0 bps, funding được trả hoặc nhận mỗi 8 giờ theo vị thế thực tế, trượt giá được mô hình hóa dựa trên độ sâu sổ lệnh cấp cao nhất. Đây cố ý là một tín hiệu nhàm chán — tôi chọn nó vì chẳng ai muốn bênh vực nó, nhờ vậy có thể dùng làm phép thử rõ ràng.
Mọi hàng bên dưới đều dùng cùng thời điểm vào và thoát lệnh theo nến. Khác biệt duy nhất là hàm định cỡ.
| Quy tắc định cỡ | Sharpe ròng | Sụt giảm tối đa | Giá trị danh nghĩa giao dịch/năm (× vị thế trung bình) | Chi phí tính theo % PnL gộp | Đòn bẩy cực đại |
|---|---|---|---|---|---|
| Giá trị danh nghĩa cố định $10k | 0.41 | 18.2% | 246× | 14% | 1.0× |
| Tỷ lệ vốn cố định, 100% vốn chủ sở hữu | 0.44 | 30.8% | 251× | 15% | 1.0× |
| Nghịch đảo biến động thực tế 20 ngày | 0.68 | 14.1% | 690× | 29% | 4.4× |
| Mục tiêu biến động thường niên 20%, tái cân bằng mỗi giờ, không giới hạn | 0.71 | 12.9% | 1,180× | 41% | 6.3× |
| Mục tiêu biến động 20%, vùng không giao dịch 20%, giới hạn đòn bẩy 3× | 0.66 | 15.3% | 402× | 19% | 3.0× |
| Kelly một nửa dựa trên trung bình/phương sai cuốn chiếu 60 ngày | 0.52 | 24.6% | 830× | 33% | 8.1× |
Hãy nhìn độ chênh. Giữa hàng thấp nhất và cao nhất có mức chênh lệch Sharpe tương đối 73% và mức sụt giảm chênh nhau 2.4 lần. Giờ hãy tìm cho tôi một tham số của tín hiệu vào lệnh trên bộ dữ liệu này có thể làm Sharpe tăng 0.30 mà không quá rõ là overfit. Tôi đã tìm rồi. Độ dài cặp EMA làm chỉ số thay đổi khoảng 0.12 trên toàn bộ lưới tham số hợp lý, và phần lớn biến động đó chỉ là nhiễu không thể duy trì ngoài mẫu.
Vì sao nghịch đảo biến động cho kết quả tốt đến vậy, và phần nào là thật
Cơ chế không có gì bí ẩn. Với giá trị danh nghĩa cố định, quy mô vị thế không tương quan với biến động thực tế; điều đó có nghĩa là rủi ro tính bằng đô la mỗi giao dịch tỷ lệ thuận với mức biến động của tuần đó. Với ETH trong giai đoạn này, biến động thực tế 20 ngày dao động từ 31% đến 118% thường niên. Lần chạy với giá trị danh nghĩa cố định chịu rủi ro tính bằng đô la cao gấp 3.8× vào tháng 3 năm 2024 so với tháng 7 năm 2023, không phải vì tín hiệu tự tin hơn, mà vì thị trường biến động mạnh hơn. Gần như toàn bộ mức sụt giảm tập trung ở nhóm 20% có biến động cao nhất. Định cỡ nghịch đảo biến động loại bỏ mối liên hệ đó, và đây là cải thiện thực sự về hình dạng chuỗi lợi nhuận.
Nhưng một phần mức tăng Sharpe là sai lệch đo lường; nếu không tách riêng hai phần này, bạn sẽ đưa ra quyết định tệ ở các bước tiếp theo. Sharpe lấy độ lệch chuẩn của lợi nhuận làm mẫu số. Nhắm mục tiêu biến động, theo đúng định nghĩa, là thao tác ổn định độ lệch chuẩn của lợi nhuận. Bạn đang trực tiếp tối ưu mẫu số. Quy tắc điều chỉnh quy mô vị thế để đạt biến động dự kiến không đổi sẽ cải thiện Sharpe trên gần như mọi chuỗi lợi nhuận có hiện tượng biến động theo cụm, kể cả chuỗi không có lợi thế. Tôi đã xác nhận điều này trên các tín hiệu bị xáo trộn: ngẫu nhiên hóa thời điểm vào lệnh, giữ nguyên lớp phủ nhắm mục tiêu biến động, Sharpe vẫn tăng khoảng 0.06 so với giá trị danh nghĩa cố định trên nền có trung bình bằng 0. Mức tăng nhỏ, nhưng có thật, và hoàn toàn do cơ chế.
Vì vậy, khi so sánh nội bộ các quy tắc định cỡ, Sharpe không bao giờ là con số duy nhất trên bảng. Tôi muốn có Calmar, PnL ròng trên mỗi đơn vị giá trị danh nghĩa trung bình được triển khai, và bảng phân rã từ gộp sang ròng, vì cả 3 chỉ số này kết hợp lại khó bị đánh lừa bằng thủ thuật mẫu số hơn nhiều.
Ước tính biến động là một mô hình, và nó cũng có thể rò rỉ dữ liệu
Cách phổ biến nhất khiến một kết quả định cỡ tốt hóa ra là giả: ước tính biến động sử dụng thông tin từ chính cây nến mà nó đang định cỡ. Nếu chuỗi biến động của bạn được tính bằng cửa sổ căn giữa, hoặc bằng `rolling().std()` mặc định của pandas áp dụng sau khi lấy mẫu lại có chứa nến hiện tại chưa đóng, hoặc từ chuẩn hóa toàn bộ mẫu, thì bạn đã bị rò rỉ dữ liệu. Điều này tinh vi vì biến động có tính dai dẳng, nên rò rỉ trên từng hàng đều nhỏ và đường vốn vẫn trông hợp lý. Chỉ là nó trông mượt hơn một chút đúng vào những tuần quan trọng nhất.
Các agent của chúng tôi kiểm tra 4 điều trên mọi quy tắc định cỡ trước khi đưa kết quả vào hàng chờ giao dịch giấy:
- Dữ liệu phải có sẵn tại thời điểm ra quyết định. Quy mô vị thế dùng cho cây nến mở lúc 14:00 phải tính được từ dữ liệu có dấu thời gian đóng ≤ 13:59:59.999. Chúng tôi khẳng định điều này bằng cách tính lại chuỗi quy mô vị thế từ khung dữ liệu bị cắt tại mẫu ngẫu nhiên gồm 200 thời điểm ra quyết định, rồi so sánh sai khác.
- Lookback của bộ ước tính là tham số thực sự. Cửa sổ biến động 20 ngày và 60 ngày là 2 chiến lược khác nhau. Lookback được đưa vào lưới walk-forward cùng mọi yếu tố khác; nếu kết quả chỉ hiệu quả ở một độ dài cửa sổ duy nhất, đó là phát hiện về độ mong manh.
- Đường đi của đòn bẩy, không chỉ mức đỉnh. In toàn bộ phân phối đòn bẩy gộp. Lần chạy nhắm mục tiêu biến động không giới hạn ở trên có 4% số giờ dùng đòn bẩy trên 5×; kiểu thông tin này không bao giờ xuất hiện trong bảng tóm tắt nhưng lại quyết định hoàn toàn liệu có thể triển khai chiến lược hay không.
- Độ nhạy của định cỡ như một phép thử độ vững. Nếu Sharpe sụp đổ khi đổi mục tiêu biến động từ 20% sang 25%, thì chiến lược không phải đang nhắm mục tiêu biến động mà là đang tinh chỉnh đòn bẩy; bạn đã tìm ra lợi thế bằng cách chọn một con số.
Giới hạn đòn bẩy không phải món trang trí cho quản lý rủi ro, mà là một phần trong định nghĩa chiến lược. Các bậc vị thế ETHUSDT của Binance giảm đòn bẩy tối đa khi giá trị danh nghĩa vị thế tăng, đồng thời tỷ lệ ký quỹ duy trì cũng tăng theo. Backtest để quy tắc nhắm mục tiêu biến động chạy đến 6.3× với giá trị danh nghĩa $400k đang mô tả một vị thế mà sàn sẽ không cho bạn nắm giữ với mức ký quỹ đó. Hàng có giới hạn trong bảng mất 0.05 Sharpe và là hàng duy nhất trong 2 hàng mô tả một thứ có thật.
Tiền đi đâu khi tái cân bằng
Hãy để ý cột chi phí. Tái cân bằng mỗi giờ theo mục tiêu biến động đem lại Sharpe nổi bật nhất, đồng thời chuyển 41% PnL gộp cho sàn. Mỗi năm, lượng giao dịch đạt 1,180× giá trị danh nghĩa vị thế trung bình, với phí 5 bps mỗi chiều, cộng spread và tác động thị trường. Cách sửa ngây thơ là tái cân bằng ít thường xuyên hơn theo lịch cố định. Cách tốt hơn là dùng vùng không giao dịch: chỉ điều chỉnh quy mô khi vị thế hiện tại lệch khỏi mục tiêu quá một ngưỡng nhất định.
Vùng 20% giảm giá trị danh nghĩa giao dịch hằng năm từ 1,180× xuống 402× — giảm 66% — và làm Sharpe giảm 0.05. Tôi đã chạy cách này trên 8 tín hiệu và hình thái lặp lại: các vùng từ 15% đến 25% giữ được phần lớn lợi ích kiểm soát rủi ro với chỉ một phần ba khối lượng giao dịch; dưới 10% thì chỉ là trả phí để có độ chính xác bề ngoài cho một đại lượng vốn được ước tính bằng cửa sổ 20 ngày. Bạn không thể tái cân bằng đến 3 chữ số thập phân dựa trên một con số có sai số chuẩn 15%.
Tháng 2 vừa rồi, có một lần chạy mà báo cáo do agent viết quy mức cải thiện Sharpe 0.22 cho “bộ lọc vào lệnh được cải tiến”. Phần diff chỉ có một dòng trong mô-đun định cỡ. Bộ lọc không hề thay đổi. Giờ tôi yêu cầu báo cáo in mã băm cấu hình định cỡ ở đầu trang, vì việc quy kết kết quả là một kỷ luật, còn mô hình thì cũng thích kể một câu chuyện gọn ghẽ chẳng kém ai.
Giao dịch giấy sẽ tác động thế nào đến quy tắc định cỡ
Đây là chỗ khoảng cách giữa backtest và giao dịch giấy nới rộng nhất, và phần lớn là do số học. Định cỡ phản ứng theo biến động khiến quy mô vị thế dao động gấp 4 đến 8 lần trong toàn bộ mẫu. Cả hai đầu của khoảng này đều chạm đến các giới hạn trên sàn mà backtest chưa từng mô hình hóa.
Ở đầu nhỏ: bước khối lượng và giá trị danh nghĩa tối thiểu. Hợp đồng perp ETHUSDT có bước khối lượng 0.001 và mức tối thiểu $5. Nếu quy mô ở chế độ biến động thấp của bạn là 0.0004 ETH, backtest vẫn giữ vị thế đó còn giao dịch giấy thì không có vị thế nào. Nghe có vẻ như trường hợp hiếm cho đến khi bạn nhận ra quy tắc nhắm mục tiêu biến động đặt các vị thế nhỏ nhất vào những thị trường bình lặng nhất, mà với tín hiệu xu hướng, đây thường là nơi có những điểm vào tốt. Ở đầu lớn: giới hạn vị thế, các bậc ký quỹ, và thực tế rằng vị thế 6× đòi hỏi kỷ luật dùng ký quỹ cô lập mà bạn chưa mô hình hóa thanh lý trong backtest.
Chúng tôi phát hiện một trường hợp mà đường vốn giao dịch giấy bám sát backtest trong phạm vi 3% suốt 6 tuần rồi đột ngột lệch mạnh. Nguyên nhân là làm tròn: dùng `int()` để cắt cụt thay vì làm tròn theo bước khối lượng trong bộ định cỡ lệnh, áp dụng cho các vị thế trung bình chỉ bằng 1.4 bước. Backtest định cỡ trên không gian liên tục, còn bộ định cỡ thực tế làm mất 20-30% quy mô dự định ở mỗi giao dịch nhỏ. Không có mô hình khớp lệnh cầu kỳ, không phải vấn đề độ trễ. Làm tròn cắt cụt.
Những điểm người chỉ trích nói đúng
Có 3 phản biện xác đáng, và tôi không muốn lờ chúng đi.
Thứ nhất, và quan trọng nhất: định cỡ phân bổ lợi thế, chứ không thể tạo ra lợi thế. Nếu kỳ vọng gộp của tín hiệu bằng hoặc thấp hơn 0 sau khi tính phí và funding thực tế, mọi quy tắc trong bảng đều thua lỗ — những quy tắc cầu kỳ chỉ thua với dạng biến động đẹp hơn. Tôi chọn một tín hiệu có lợi thế ròng nhỏ nhưng dương trong giai đoạn này. Chạy cùng 6 quy tắc trên một tín hiệu có mức ròng −1.2 bps mỗi giao dịch thì thứ hạng vẫn giữ nguyên, nhưng vốn cuối kỳ của tất cả đều thấp hơn vốn ban đầu. Định cỡ là hệ số nhân cho một thứ gì đó. Bạn vẫn cần thứ đó.
Thứ hai, nhắm mục tiêu biến động có một kiểu thất bại thật sự và đã được ghi nhận rõ: giảm đòn bẩy ở đáy của một đợt bán tháo nhanh rồi tăng đòn bẩy lại sau cú bật hồi. Trong cú giảm dạng chữ V mạnh, giá trị danh nghĩa cố định sẽ thắng, đôi khi thắng lớn. Tháng 3 năm 2020 trên thị trường cổ phiếu và đợt tháo chạy khỏi crypto tháng 8 năm 2024 đều khiến định cỡ phản ứng theo biến động chịu thiệt ở nhịp phục hồi. Giai đoạn ETH 4 năm của tôi tình cờ có nhiều biến động theo cụm dạng kéo dài hơn là các cú đảo chiều chữ V, nhờ vậy các hàng nghịch đảo biến động trông tốt hơn. Một giai đoạn khác có thể đảo thứ tự một số hàng; nếu mở đầu bằng bảng từ năm 2020, lập luận này của tôi sẽ kém thuyết phục hơn.
Thứ ba, quy tắc định cỡ cũng có thể bị overfit như mọi thứ khác. Kelly một nửa dựa trên ước tính cuốn chiếu là ví dụ điển hình trong bảng của tôi: trông tinh vi, có nền tảng lý thuyết, nhưng tạo ra mức sụt giảm lớn thứ hai vì ước tính trung bình cuốn chiếu từ chuỗi lợi nhuận nhiễu là vô dụng, còn Kelly thì cực kỳ nhạy với nó. Bất kỳ quy tắc định cỡ nào nhận ước tính lợi nhuận kỳ vọng làm đầu vào đều kế thừa sai số trong ước tính đó và khuếch đại nó. Các quy tắc chỉ dùng ước tính phương sai hoạt động ổn định hơn nhiều, vì phương sai là đại lượng duy nhất bạn thực sự có thể ước tính từ 4 năm dữ liệu theo giờ.
Điều tôi muốn rút ra từ tất cả những điều này: khi kết quả backtest làm bạn bất ngờ, hãy kiểm tra mô-đun định cỡ trước khi tìm kiếm sự khéo léo trong tín hiệu. Và khi báo cáo Sharpe, hãy đặt đường đi của đòn bẩy cùng bảng phân rã chi phí bên cạnh, vì một con số phụ thuộc nhiều đến thế vào quyết định định cỡ thì hoàn toàn không phải thuộc tính của tín hiệu.
← Tất cả bài viết
