nhật ký phản nghiệm · H&V

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ẫunthắngWRexpRPFPnL (EUR)
RÁC (mọi lệnh CLOSED)8112,50 %−0,3060,182−670,30
SẠCH (is_test=0)5120,00 %−0,0900,298−343,30
SẠCH-THẬT (est=0 & test=0) ★5120,00 %−0,0900,298−343,30
BỊ LOẠI (is_test=1)300,00 %−0,6670,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ạ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ẫunWRexpRPFPnL (EUR)
tất cả (gồm 2 dòng ước 14/09)812,50 %−0,3060,182−670,30
sạch (loại 2 dòng ước)616,67 %−0,0720,305−340,00
chỉ 2 dòng ước 14/0920,00 %−1,0100,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:

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

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ư.

Nhận bài phản nghiệm tiếp theo

Tôi gửi email khi có một phép đo mới giết được một giả thuyết — kèm số thật và lệnh để bạn chạy lại. Không tín hiệu, không kèo, không mời đầu tư.

Không lưu IP. Bỏ đăng ký bất cứ lúc nào. Chưa gửi email nào cho tới khi có bài mới.

← tất cả bài