Vì sao tôi bác chính báo cáo của mình: phép đối chiếu bịa trong wr_monitor
2026-09-25 · H&V Company
Tôi đã công bố WR 12,50 % trên 8 lệnh. Hôm nay tôi khai tử chính con số đó. Bài viết này giải thích vì sao — và vì sao việc tìm ra lỗi của chính mình quan trọng hơn con số đúng.
Lỗi 1: Trộn rổ 12,50 % / 8 lệnh
Số đó là "WR-RÁC". Nó trộn cả những lệnh test/E2E/verify lẫn những lệnh có giá ra ước vào cùng một rổ.
| bộ mẫu | n | thắng | WR | expR | PF | PnL (EUR) |
|---|
| RÁC (mọi lệnh CLOSED) | 8 | 1 | 12,50 % | −0,306 | 0,182 | −670,30 |
| SẠCH (is_test=0) | 5 | 1 | 20,00 % | −0,090 | 0,298 | −343,30 |
| SẠCH-THẬT (est=0 & test=0) ★ | 5 | 1 | 20,00 % | −0,090 | 0,298 | −343,30 |
| BỊ LOẠI (is_test=1) | 3 | 0 | 0,00 % | −0,667 | 0,010 | −327,00 |
Tại sao có ba tập số nếu SẠCH và SẠCH-THẬT trùng nhau? Chính vì để ngày nào hai số tách nhau, tôi sẽ thấy ngay thay vì tin vào sự trùng hợp một cách mù quáng. Đó là một nguyên tắc thiết kế báo cáo đáng học.
Sổ 8 lệnh nguyên văn
# ngày symbol side kq R PnL ước test note
1 2026-08-19 US500.cash BUY SL -0.00 -0.10 - - SL R=-0.0 M2-FVG
2 2026-08-21 US500.cash BUY SL -1.03 -3.10 - - SL R=-1.03 M2-FVG
3 2026-08-27 US100.cash SELL TP +2.69 +145.90 - - TP R=2.69 CONT-DISP
4 2026-09-02 US30.cash BUY SL -1.01 -296.40 - - SL R=-1.01 CONT-DISP
5 2026-09-10 US500.cash SELL SL -1.10 -189.60 - - SL R=-1.1 CONT-DISP-LIQ
6 2026-09-14 US500.cash BUY SL -1.00 -156.00 ƯỚC TEST SL R=-1.0 TEST-DON-DEP
7 2026-09-14 US100.cash BUY SL -1.02 -174.30 ƯỚC TEST SL R=-1.02 RESTORE-SL
8 2026-09-22 US100.cash SELL MANUAL +0.02 +3.30 - TEST MANUAL R=0.02 E2E-TEST-JULIAN
Loại bỏ được ghi rõ:
- Lệnh 6 (TEST-DON-DEP): lệnh test, giá ra ước
- Lệnh 7 (RESTORE-SL): lệnh khôi phục SL, giá ra ước
- Lệnh 8 (E2E-TEST-JULIAN): lệnh test end-to-end ngày 22/09,
MANUAL R=0.02, vào mẫu số (n) nhưng không tính vào tử số (thắng) — vừa làm loãng WR vừa không bao giờ đóng góp được.
Lại chỉ còn 5 lệnh thực. WR = 1 thắng / 5 lệnh = 20,00 %.
Lỗi 2: Phép đối chiếu bịa — thủ phạm thật
Đây chính là lỗi nguy hiểm nhất vì nó không phải thiếu sót đơn thuần, mà là thiếu sót lừa dối chính bản thân.
Báo cáo cũ của tôi có bảng này:
| bộ mẫu | n | WR | expR | PF | PnL (EUR) |
|---|
| tất cả (gồm 2 dòng ước 14/09) | 8 | 12,50 % | −0,306 | 0,182 | −670,30 |
| sạch (loại 2 dòng ước) | 6 | 16,67 % | −0,072 | 0,305 | −340,00 |
| chỉ 2 dòng ước 14/09 | 2 | 0,00 % | −1,010 | 0,000 | −330,30 |
Dòng "sạch n=6 / WR 16,67 %" tự phong cho mình cái nhãn "sạch" trông như một phép kiểm chứng nghiêm túc. Nhưng nó chỉ loại bỏ 2 dòng ước ngày 14/09 mà quên loại bỏ lệnh E2E-TEST-JULIAN ngày 22/09.
Kết quả: nó loại 2 lệnh thay vì 3 lệnh. Mẫu số sai thành 6 thay vì 5. Con số sai thành 16,67 % thay vì 20,00 %.
Con số sai nguy hiểm nhất không phải con số ai đó bịa để lừa bạn. Nó là con số chính bạn tạo ra một cách thiện chí rồi tin vào nó, vì nó đến từ một script trông có vẻ khách quan. Tôi đã tạo ra một phương tiện kiểm chứng không hoàn toàn rồi tin rằng nó hoàn toàn. Đó là phép đối chiếu bịa trong nội tâm.
Lỗi 3: Sai mẫu số 10 lần
Báo cáo cũ còn ghi:
Equity suy từ journal = 100 000 − 670,30 = 99 329,70 EUR
Trong khi vốn gốc thật là 10 000 EUR. Equity thật phải là 9 329,70 EUR.
Đây là loại lỗi "số kế thừa": một con số đúng ở một bối cảnh cũ (tài khoản demo 100k, hoặc một sơ đồ tính toán cũ) được bê nguyên sang bối cảnh mới mà không ai kiểm lại. Nó nằm yên ủy mà trong tài liệu cho đến khi ai đó chú ý đến nó.
Nó sai 10 lần. Một lỗi lớp này có thể làm lệch mọi phân tích rủi ro gắn liền với equity.
Nguyên nhân gốc: Hai bản wr_monitor.py
Tôi có hai bản script tính WR ở hai thư mục:
company/projects/trading/wr_monitor.py (copy cũ)ES-NQ/wr_monitor.py (bản chính)
Bản copy cũ không có khối SẠCH-THẬT, và chính nó còn đẻ ra con số 12,5 %. Sớm muộn gì hai bản cũng sẽ lệch, và người đọc báo cáo sẽ không biết mình đang đọc bản nào.
Giải pháp: biến bản copy thành shim — một script nhỏ chỉ gọi bản canon ở ES-NQ/wr_monitor.py. Từ đó hai nơi không thể lệch nữa.
Cũng sửa cùng loại lỗi trong accounts.py:172: dòng in trần dùng :.0f (làm tròn số nguyên):
f"{max_leverage:.0f}×" # sai, in ra "2×"
f"{max_leverage:.2f}×" # đúng, in ra "2,25×"
Báo cáo sai 11 % chỉ vì một format string. Hiện đã sửa thành :.2f.
Những điều PHẢI nói thẳng
- PF SẠCH-THẬT 0,298 < 1,0 ⇒ chiến lược đang lỗ ròng. Không được giấu. Trên tập SẠCH-THẬT: tổng thắng +145,90 EUR, tổng thua −489,20 EUR — chia ra được PF 0,298. Nghĩa là mỗi euro kiếm được đang phải trả bằng hơn ba euro mất đi.
- n = 5 < 15 ⇒ chưa đủ mẫu để kết luận về WR. Con số 20 % chỉ để tham khảo, không được dùng làm cớ đổi chiến lược.
- Equity nếu chỉ tính tập SẠCH-THẬT: 9 656,70 EUR (= 10 000 − 343,30 từ 5 lệnh thực). Khoản 327,00 EUR trong tổng lỗ 670,30 EUR là do lệnh test/khôi phục, không phải do chiến lược chính.
Cách chữa: Fix-forward, không xoá lịch sử
Tôi không xoá báo cáo cũ. Thay vào đó, chèn banner HV-WR-SACHTHAT-20260924 vào 6 file .md báo cáo — khai tử con số 12,5 % tại chỗ, giữ nguyên bản cũ để đọc lại được. Xoá lịch sử là cách nhanh nhất để mất luôn bài học; đính chính tại chỗ giữ được cả hai.
Backup mọi file đã đụng: *.bak.levdisp.*, *.bak.preshim.*, *.bak.wrbanner.*.
Quy trình: Tại sao nó lại idempotent?
Quy tắc loại bỏ lệnh test là hàm is_test_row() — chỉ dựa vào cột note (regex) + cột estimated. Nó idempotent: chạy lại migrate chế độ khô (dry-run migrate) sẽ in ra journal.csv: cột is_test đã đúng, không cần sửa. Không ai sửa tay được. Không thể nhớ lầm.
Đây chính là điều tôi bán. Không phải WR 20 % trên 5 lệnh — con số đó quá nhỏ để ai đó thay đổi cả chiến lược vì nó. Điều đáng bán là quy trình đã bắt được chính tôi: làm sao để một báo cáo không thể nằm yên để giả mạo sự cẩn thận.
Tự kiểm chứng
cd ~/Documents/trading/ES-NQ
python3 wr_monitor.py
Kết quả sẽ in ra bốn tập số: RÁC, SẠCH, SẠCH-THẬT, BỊ LOẠI. Hãy chạy lại để chắc chắn.
CẢNH BÁO RỦI RO: Nội dung này được cung cấp cho mục đích giáo dục về kiểm soát chất lượng số liệu và báo cáo. Đây không phải lời khuyên đầu tư. Hiệu suất quá khứ không bảo đảm kết quả tương lai. Lỗ tiền thực đã xảy ra và có thể tái diễn. Chiến lược hiện tại đang bị lỗ ròng (PF < 1,0), dữ liệu mẫu quá nhỏ (n=5), và chưa được xác nhận ngoài mẫu. Không nên sử dụng bài viết này để ra quyết định giao dịch hoặc đầu tư.