OptiNod Academy
Profit Factor - phân phối và cỡ mẫu ẩn sau một con số
PF cao vẫn có thể sụp đổ trong thực chiến nếu số lệnh quá ít hoặc phụ thuộc vào một lệnh thắng lớn. Bài viết xem xét phân phối và cỡ mẫu mà PF che giấu.
> Chỉ riêng việc Profit Factor cao không đủ để tin vào một chiến lược. Bạn phải nhìn cả phân phối của những giao dịch đã tạo ra con số đó.
Profit Factor (PF) là tổng lợi nhuận trong backtest chia cho tổng thua lỗ. Nếu trong 100 giao dịch, tổng lợi nhuận của các lệnh thắng là 10.000 USD và tổng thua lỗ của các lệnh thua là 5.000 USD, Profit Factor là 2,0. PF bằng 1,0 nghĩa là hòa vốn; dưới 1,0 là chiến lược thua lỗ; trên 2,0 thường được xem là khá tốt. Vì cách tính đơn giản, đây là chỉ số xuất hiện rất thường xuyên ở dòng đầu tiên của báo cáo backtest.
Cách dùng phổ biến là xem con số này như bảng xếp hạng chất lượng chiến lược. Người ta đặt một chiến lược có Profit Factor 1,5 cạnh một chiến lược 3,0 rồi kết luận chiến lược sau tốt gấp đôi. Cũng có người chạy công cụ tối ưu hóa và chọn luôn bộ tham số cho ra Profit Factor cao nhất. Trực giác “số càng cao càng tốt” về cơ bản là đúng. Có điều, trong trực giác đó vẫn tồn tại một lỗ hổng quan trọng.
Profit Factor là một tỷ lệ. Tỷ lệ này nén toàn bộ số lượng giao dịch tạo nên tử số và mẫu số, cũng như mức độ phân bổ đều hay lệch của các giao dịch đó, vào một con số duy nhất. Giữa PF 1,5 được tạo bởi 200 giao dịch và PF 3,0 được tạo bởi 12 giao dịch, con số đáng tin hơn trong thực chiến là trường hợp đầu. Một PF 3,0 mà phần lớn tử số đến từ một lệnh thắng lớn có thể biến thành chiến lược thua lỗ ngay khi loại bỏ lệnh đó. Bài viết này bàn về cách đưa cỡ mẫu và phân phối đang bị che khuất phía sau một con số Profit Factor ra xem xét lại.

Chiến lược có Profit Factor sụp đổ khi bỏ một lệnh thắng lớn là chiến lược dựa vào may mắn
Cách kiểm tra nhanh nhất để biết Profit Factor có đáng tin hay không là loại bỏ giao dịch có lợi nhuận lớn nhất rồi tính lại Profit Factor. Phép tính đơn giản này cho thấy độ ổn định của chiến lược ở góc độ phân phối.
Hãy lấy một chiến lược theo xu hướng làm ví dụ. Trong 1 năm, chiến lược giao dịch 20 lần; tổng lợi nhuận của các lệnh thắng là 7.610 USD, tổng thua lỗ của các lệnh thua là 1.950 USD. Profit Factor bằng 7.610 chia cho 1.950, tức khoảng 3,90. Chỉ nhìn báo cáo, đây là một chiến lược rất xuất sắc. Nhưng trong 7.610 USD đó, 6.200 USD đến từ đúng một giao dịch. Đó là lệnh bắt trọn đoạn BTC tăng khoảng 42% trong tháng 11/2024, từ khoảng 69.500 USD lên gần 99.000 USD chỉ trong 3 tuần. Nếu loại bỏ giao dịch này, tổng lợi nhuận của 19 lệnh còn lại chỉ còn 1.410 USD, trong khi tổng thua lỗ vẫn là 1.950 USD; Profit Factor rơi xuống 0,72. Dưới 1,0, tức là một chiến lược thua lỗ.
Con số 3,90 mà chiến lược này thể hiện gần với kết quả của một sự kiện thị trường duy nhất: BTC tăng mạnh trong tháng 11/2024. Nếu áp dụng cùng chiến lược đó vào một năm khác không có cú tăng này, kết quả nhiều khả năng sẽ giống phía PF 0,72 hơn. Tỷ lệ thắng cũng chỉ là 9/20, tức khoảng 45%, cho thấy cấu trúc thường xuyên chịu các khoản lỗ nhỏ rồi thu hồi toàn bộ nhờ một xu hướng lớn. Chiến lược theo xu hướng vốn có phân phối như vậy, và bản thân phân phối này chính là cách chiến lược vận hành bình thường. Vấn đề nảy sinh khi bạn chỉ nhìn Profit Factor 3,90 và hiểu nhầm rằng đây là chiến lược tạo lợi nhuận ổn định hằng tháng; lúc đó trong thực chiến bạn có thể không chịu nổi giai đoạn không có xu hướng lớn, khi tài khoản bị bào mòn từng chút một, rồi bỏ chiến lược.
Tiêu chuẩn rất đơn giản. Nếu sau khi bỏ lệnh thắng lớn nhất, Profit Factor vẫn ở trên 1,2, lợi nhuận của chiến lược được phân bổ rộng hơn. Nếu chỉ cần bỏ một lệnh mà PF rơi xuống dưới 1,0, lợi nhuận backtest của chiến lược đó nên được xem là kết quả dựa vào một lần may mắn.
Khi mẫu giao dịch quá nhỏ, Profit Factor khó phân biệt với may rủi
Cùng là Profit Factor 2,5, nhưng 2,5 đến từ 8 giao dịch và 2,5 đến từ 300 giao dịch có trọng lượng hoàn toàn khác nhau. Mẫu càng nhỏ, tỷ lệ càng dễ bị lệch ngẫu nhiên về một phía, và độ lệch đó trông giống như năng lực thật.
Xét một ví dụ chỉ có 8 giao dịch. Tổng lợi nhuận lệnh thắng là 1.450 USD, tổng thua lỗ lệnh thua là 500 USD, nên Profit Factor là 2,90. Chỉ nhìn con số, chiến lược này có vẻ còn tốt hơn chiến lược theo xu hướng ở trên. Nhưng nếu chạy thêm một tháng và phát sinh thêm một lệnh thua 600 USD, tổng thua lỗ tăng lên 1.100 USD, Profit Factor lập tức giảm xuống 1,32. Chỉ thêm một giao dịch mà “hạng” của chiến lược đã thay đổi hoàn toàn. Khi mẫu chỉ có 8 giao dịch, một lệnh riêng lẻ chiếm hơn 10% toàn bộ mẫu.
Với mẫu 300 giao dịch, thêm một giao dịch mới gần như không làm tỷ lệ dao động đáng kể. Về mặt thống kê, để Profit Factor đi vào vùng tin cậy ổn định, cần tối thiểu 100 giao dịch, và tốt hơn là trên 200 giao dịch. Profit Factor từ backtest dưới 30 giao dịch chỉ nên được dùng như tham khảo định hướng.
Một nhầm lẫn phổ biến xuất hiện ở đây. Các chiến lược ngắn hạn vào lệnh nhiều lần trong ngày dễ gom đủ mẫu, nhưng chiến lược swing theo khung ngày hoặc khung tuần thường chỉ có 20-40 giao dịch dù backtest cả năm. Khi đó, cách chuẩn là mở rộng backtest lên 5 năm để có hơn 100 giao dịch. Tuy nhiên, nếu trong 5 năm đó trạng thái thị trường đã thay đổi nhiều lần, 100 giao dịch ấy lại là hỗn hợp đến từ các môi trường thị trường khác nhau và cần được diễn giải thêm. Tăng cỡ mẫu và giữ tính đồng nhất của mẫu phải đi cùng nhau.
Lý do Profit Factor dao động mạnh khi mẫu nhỏ nằm ở mẫu số của tỷ lệ. Nếu một chiến lược 8 giao dịch chỉ có 4 lệnh thua, tổng thua lỗ phụ thuộc hoàn toàn vào quy mô của 4 lệnh đó. Ngay khi xuất hiện thêm một lệnh thua lớn hơn bình thường, mẫu số tăng vọt và tỷ lệ sụp xuống. Khi số giao dịch tăng lên, tỷ trọng của một lệnh thua lớn trong tổng thua lỗ sẽ nhỏ đi; cùng một sự kiện bất lợi cũng chỉ làm Profit Factor dịch chuyển nhẹ hơn. Chính đặc tính tỷ lệ trở nên kém nhạy hơn khi mẫu lớn là lý do Profit Factor từ mẫu lớn đáng tin hơn.

Profit Factor trước khi tính chi phí giao dịch là một con số khác
Thiết lập mặc định của nhiều công cụ backtest thường để phí giao dịch và trượt giá bằng 0. Profit Factor tính với chi phí bằng 0 sẽ lệch xa thực tế, đặc biệt với các chiến lược vào và thoát lệnh thường xuyên.
Hãy xét một chiến lược lướt sóng. Chiến lược giao dịch 200 lần, lãi trung bình 120 USD, lỗ trung bình 90 USD, tỷ lệ thắng 52%. Nếu không tính chi phí, tổng lợi nhuận là 12.480 USD, tổng thua lỗ là 8.640 USD, Profit Factor khoảng 1,44. Đây có vẻ là chiến lược có thể chấp nhận. Nhưng nếu giả định mỗi giao dịch tốn 35 USD cho phí và trượt giá khứ hồi, câu chuyện thay đổi. Số tiền thực nhận của mỗi lệnh thắng giảm còn 85 USD, còn khoản lỗ thực tế của mỗi lệnh thua tăng lên 125 USD. Profit Factor tính lại là 0,74. Trước khi tính chi phí, nó trông như chiến lược có lãi; sau khi tính chi phí, nó là chiến lược thua lỗ.
Chênh lệch này càng lớn khi tần suất vào lệnh càng cao. Nếu lãi trung bình mỗi giao dịch là 120 USD mà chi phí khứ hồi là 35 USD, chi phí đã lấy đi khoảng 30% lãi trung bình. Chiến lược có lãi trung bình nhỏ và giao dịch thường xuyên càng nhạy cảm với chi phí; chiến lược swing có lãi trung bình lớn và ít giao dịch hơn chịu ảnh hưởng ít hơn từ cùng một mức chi phí. Khi xem Profit Factor, trước hết phải kiểm tra con số đó đã tính chi phí hay chưa. Nếu chi phí bằng 0, bạn cần tính lại bằng phí giao dịch thực tế trên sàn của mình và mức trượt giá thông thường. Trước thời điểm đó, Profit Factor với chi phí bằng 0 chỉ là mức trần của hiệu suất thực chiến.

Profit Factor được tạo từ tỷ lệ thắng và tỷ lệ lãi/lỗ, nên phải được phân rã
Chỉ với con số Profit Factor 1,5, bạn không thể biết chiến lược đó có tính chất gì. Cùng một Profit Factor có thể xuất hiện ở hai chiến lược hoàn toàn trái ngược.
Profit Factor có thể được phân rã thành tỷ lệ thắng và tỷ lệ lãi/lỗ trung bình (Risk-Reward Ratio). Khi tỷ lệ thắng là W, Profit Factor bằng W chia cho (1-W), rồi nhân với tỷ lệ lãi/lỗ. Hiểu quan hệ này sẽ thấy cùng một Profit Factor có thể tách ra theo những cách khác nhau. Một chiến lược có tỷ lệ thắng 35% và tỷ lệ lãi/lỗ 3,0 có Profit Factor khoảng 1,62; một chiến lược có tỷ lệ thắng 70% và tỷ lệ lãi/lỗ 0,6 có Profit Factor khoảng 1,40. Profit Factor của hai chiến lược khá giống nhau, nhưng trải nghiệm thực chiến hoàn toàn đối lập.
Chiến lược thắng 35% là cấu trúc bị cắt lỗ hơn 6 lần trong 10 lần giao dịch, rồi thỉnh thoảng thu hồi tất cả bằng một lệnh thắng lớn. Thử thách chính là khả năng chịu đựng tâm lý trong các chuỗi cắt lỗ liên tiếp. Ngược lại, chiến lược thắng 70% thường xuyên có lãi, nhưng một lệnh thua có thể trả lại nhiều khoản lãi nhỏ đã tích lũy trước đó. Trong trường hợp này, nếu không cắt lỗ đúng lúc và để lệnh thua phình to, tỷ lệ lãi/lỗ sẽ vỡ và Profit Factor nhanh chóng rơi xuống dưới 1,0.
Khi xem Profit Factor, luôn phải kiểm tra cùng lúc tỷ lệ thắng và tỷ lệ lãi/lỗ trung bình trong cùng báo cáo. Nếu Profit Factor cao nhưng tỷ lệ thắng dưới 30%, đó là cấu trúc phụ thuộc vào các lệnh thắng lớn, và bài kiểm tra loại bỏ lệnh thắng lớn nhất ở phần trên càng trở nên quan trọng. Nếu Profit Factor cao nhưng tỷ lệ lãi/lỗ dưới 0,5, đó là cấu trúc tích lũy nhiều khoản lãi nhỏ, nên quản trị cắt lỗ là trọng tâm của chiến lược. Ngay khi tách một con số thành hai con số, điểm yếu của chiến lược bắt đầu lộ ra.

Profit Factor được đẩy lên bằng tối ưu hóa thường không tái lập trong tương lai
Khi chạy công cụ tối ưu hóa tham số, hệ thống sẽ tự động tìm tổ hợp cho ra Profit Factor cao nhất. Profit Factor được tìm theo cách này là sản phẩm của đường cong khớp tốt nhất với dữ liệu quá khứ, nên thường không tái lập được ở cùng mức trên dữ liệu tương lai.
Ví dụ, với chiến lược giao cắt đường trung bình động, nếu quét toàn bộ hai tham số chu kỳ ngắn hạn và dài hạn từ 5 đến 200, tăng từng bước 1, sẽ có hàng chục nghìn tổ hợp. Trong số đó, tổ hợp khớp nhất với biểu đồ quá khứ có thể cho Profit Factor vượt 4,0. Nhưng phần lớn trường hợp, con số 4,0 này chỉ là kết quả vô tình vừa khớp với biến động giá của đúng giai đoạn đó. Khi áp dụng cùng chiến lược vào một giai đoạn khác không dùng trong backtest, Profit Factor có thể giảm về quanh 1,2 hoặc rơi xuống dưới 1,0. Mức độ khớp quá khứ càng mạnh, độ lệch trong tương lai thường càng lớn.
Cách tiêu chuẩn để lọc vấn đề này là chia dữ liệu thành giai đoạn huấn luyện và giai đoạn kiểm định. Dùng 70% toàn bộ giai đoạn để tối ưu hóa và chọn tham số, sau đó đo lại Profit Factor với cùng tham số trên 30% dữ liệu còn lại. Nếu Profit Factor ở giai đoạn huấn luyện là 3,5 nhưng giai đoạn kiểm định rơi xuống 1,1, thì con số 3,5 là kết quả của quá tối ưu hóa. Chỉ khi Profit Factor của hai giai đoạn duy trì ở mức tương tự nhau, con số đó mới đáng tin. Cũng cần kiểm tra xem Profit Factor giữa các tham số lân cận có thay đổi mượt hay không. Nếu chỉ một tổ hợp nổi bật bất thường còn tổ hợp ngay bên cạnh rất tệ, đỉnh đó nhiều khả năng là ngẫu nhiên.
Các bước kiểm tra trước khi tin vào Profit Factor
Nếu chỉ nhìn một mình Profit Factor rồi chọn chiến lược, bạn sẽ phơi mình trước các bẫy đã nêu ở trên. Trước khi tin vào Profit Factor trong báo cáo, hãy kiểm tra lần lượt các mục sau.
- [ ] Cỡ mẫu: Số giao dịch trong backtest tối thiểu là 100. Nếu dưới 30 giao dịch, chỉ xem Profit Factor như tham khảo định hướng.
- [ ] Loại bỏ lệnh thắng lớn nhất: Sau khi bỏ giao dịch có lợi nhuận lớn nhất và tính lại, Profit Factor vẫn ở trên 1,2. Nếu rơi xuống dưới 1,0, xem chiến lược là phụ thuộc vào một giao dịch đơn lẻ.
- [ ] Đã tính chi phí: Con số được tính bằng phí giao dịch thực tế trên sàn của bạn và trượt giá khứ hồi. Profit Factor với chi phí bằng 0 chỉ nên được xem là mức trần.
- [ ] Phân rã tỷ lệ thắng và tỷ lệ lãi/lỗ: Kiểm tra cùng lúc tỷ lệ thắng và tỷ lệ lãi/lỗ trung bình trong cùng báo cáo để hiểu tính chất của chiến lược.
Chỉ Profit Factor vượt qua cả bốn mục này mới có tư cách được đem so sánh với các chiến lược khác.
Hai kiểm tra bổ trợ để xác minh độ tin cậy của Profit Factor
Ngay cả sau khi vượt qua bốn mục trên, vẫn có hai công cụ giúp kiểm tra thêm một tầng về độ ổn định của Profit Factor.
Thứ nhất là xem Profit Factor theo từng năm hoặc từng quý. Dù Profit Factor tổng thể của backtest 5 năm là 2,0, khi tách theo năm có thể chỉ riêng năm 2024 có xu hướng lớn đạt 4,0, còn các năm khác chỉ quanh 1,0. Một chiến lược duy trì Profit Factor tương đối đều trên một mức nhất định qua các giai đoạn sẽ dễ chịu hơn trong thực chiến so với chiến lược dồn lợi nhuận vào một năm duy nhất. Nếu bỏ một năm cụ thể mà Profit Factor tổng thể rơi xuống dưới 1,0, nên xem chiến lược đó là được khớp riêng với trạng thái thị trường của năm đó.
Thứ hai là kiểm tra đồng thời mức sụt giảm tối đa (Maximum Drawdown). Dù Profit Factor cao, nếu mức sụt giảm tối đa vượt 40% tài khoản, rất khó vận hành chiến lược đó đến cùng trong thực chiến. Profit Factor chỉ cho biết tỷ lệ của kết quả cuối cùng, nhưng không thể hiện tài khoản đã dao động sâu đến đâu trên đường đi tới kết quả đó. Giữa một chiến lược có Profit Factor 2,5 và mức sụt giảm tối đa 15%, với một chiến lược có Profit Factor 3,0 và mức sụt giảm tối đa 45%, lựa chọn mà đa số trader có thể theo đến cùng là chiến lược đầu tiên. Chỉ khi bỏ thói quen chấm điểm chiến lược bằng một mình Profit Factor và đọc con số đó cùng với cỡ mẫu và phân phối tạo nên nó, backtest mới thật sự có khả năng nối sang thực chiến.