Tài khoản demo, kiểm thử quá khứ, kiểm thử tiến và phát lại thị trường
Có thể kiểm tra chiến lược trên demo, dữ liệu lịch sử, thời gian thực hoặc phát lại. Mỗi môi trường trả lời câu hỏi khác, có giới hạn riêng. Chúng ta giải thích kết quả chứng minh gì, tính chi phí thế nào, tách chọn tham số khỏi đánh giá độc lập ra sao. Bài còn chỉ cách lỗi dữ liệu, mô phỏng làm đẹp đường hiệu quả trước khi quy tắc gặp thực hiện lệnh thật.

- Thiếu mô tả môi trường thì không xác minh được kiểm thử. Công cụ, giai đoạn, nguồn và chất lượng dữ liệu, mô hình tick, chi phí, chia trong/ngoài mẫu – thiếu chúng kết quả là số không đơn vị
- Kiểm thử không chi phí mô tả hệ thống khác hệ thống bạn định giao dịch. Phép tính dưới cho cùng chuỗi +12.000 USD không phí, đúng 0 USD sau thêm chênh lệch, hoa hồng, trượt giá
- Tối ưu là tìm kiếm, không phải xác nhận. Bộ tốt nhất trong một nghìn lần thử chỉ tốt nhất trên lịch sử ấy – số biến thể đã kiểm tra thuộc kết quả ngang chính kết quả
- Walk-forward chỉ có giá trị khi phần ngoài mẫu chưa bị đụng tới. Sửa chiến lược sau xem ngoài mẫu thì đoạn ấy không còn ngoài mẫu cho mọi vòng sau
- Nhìn trước len vào từ cửa sau: vào giá đóng nến vừa sinh tín hiệu, chỉ báo tính lại ngược, dữ liệu vĩ mô đã điều chỉnh
- Demo và giao dịch mô phỏng không phải kiểm thử thực hiện lệnh. Chúng kiểm tra cơ chế và tuân thủ. Máy chủ demo tái hiện bao nhiêu chi phí do nhà môi giới quyết định, phải đọc tài liệu tài khoản cụ thể; phần còn lại chỉ đo trên tài khoản vốn thực, và chỉ cho quy mô đã đo
- Kiểm thử tiến dương không phải bảo đảm. Xác nhận quy tắc sống qua đoạn chưa thấy, không xác nhận sẽ qua trạng thái thị trường tiếp
1. Demo, giao dịch mô phỏng, quá khứ, tiến, phát lại, thực — sáu câu hỏi khác
Phần lớn hiểu lầm xuất phát từ câu tắt “đã kiểm tra chiến lược”. Ở đâu, về mặt nào? Các môi trường không là bậc nối tiếp trên một thang chính xác. Chúng đo việc khác.
Tài khoản demo chạy trên máy chủ môi giới, dùng tiền ảo. Báo giá thường cùng nguồn tài khoản thực nhưng khớp được mô phỏng phía máy chủ demo theo quy tắc đơn giản. Nhà môi giới, không phải nền tảng, đặt quy tắc; có thể khác theo loại tài khoản – nên mọi câu “demo không tái hiện” chỉ đúng sau kiểm tra tài liệu cụ thể, không là luật chung (mục 16 trong tài liệu tham khảo cho thấy mô tả tại một nhà cung cấp). Mô hình thực hiện và xử lý luồng lệnh thuộc phần chọn nhà môi giới.
Giao dịch mô phỏng là ghi quyết định mà không gửi lệnh thực đến môi giới. Giá khớp do bảng tính, tập lệnh hoặc bộ giả lập nền tảng biểu đồ gán. Phân biệt hay bị bỏ nhưng quan trọng: lệnh ảo do giả lập khớp thì quy tắc giả lập, không thị trường, quyết định giá vào. Nó xét logic quyết định, không chất lượng thực hiện trừ khi mô tả và lý giải riêng quy tắc giả lập.
Kiểm thử quá khứ chạy lại quy tắc trên dữ liệu lịch sử. Trả lời có điều kiện: kết quả thế nào nếu dữ liệu, mô hình tick và chi phí khớp thực tế. Chất lượng câu trả lời không vượt chất lượng giả định.
Kiểm thử tiến kiểm tra ngoài giai đoạn hiệu chỉnh. Có thể là đoạn lịch sử dành riêng mà bộ tối ưu chưa thấy, hoặc quan sát trực tiếp từng nến không quay lại.
Phát lại thị trường chạy lịch sử, giấu tương lai, cho quyết định tay. Là luyện tập chiến lược có phán đoán, không tương đương vốn thực.
Tài khoản thực là môi trường duy nhất đo chi phí thực: trượt, chênh giãn, từ chối, khớp từng phần.
| Môi trường | Câu hỏi trả lời | Không quyết định được gì | Ai đặt điều kiện |
|---|---|---|---|
| Tài khoản demo | Vận hành nền tảng được không, hệ thống có treo trong hoạt động thường không | Chi phí thực hiện và thanh khoản thấp | Nhà môi giới (máy chủ demo) |
| Giao dịch mô phỏng | Áp quy tắc riêng nhất quán được không | Giá khớp — do giả lập hoặc quy ước riêng gán | Bạn hoặc bộ giả lập |
| Kiểm thử quá khứ | Kết quả trên lịch sử với giả định nêu rõ | Tương lai, chi phí thực hiện, giả định có đúng không | Tác giả phép thử (dữ liệu, mô hình tick, chi phí) |
| Kiểm thử tiến | Quy tắc sống qua dữ liệu bộ tối ưu chưa thấy không | Trạng thái tiếp; không sửa mẫu nhỏ | Chia dữ liệu hoặc thời gian trôi |
| Phát lại thị trường | Nhận tình huống tuần tự, không nhìn phía phải được không | Chi phí thực hiện và áp lực lỗ thật | Tác giả phiên phát lại |
| Tài khoản thực (phơi nhiễm tối thiểu) | Chi phí thực sự ở quy mô đó | Chi phí ở quy mô lớn hơn đáng kể | Nhà môi giới và trạng thái thị trường |
2. Demo và giao dịch mô phỏng không đo gì
Demo đôi khi bị gọi “thực nhưng không tiền”. Sai ở nhiều điểm kiểm tra được. Bảng dưới gồm thành phần có thể thiếu hoặc mô hình đơn giản trên demo, nhưng vào kết quả trực tiếp khi dùng vốn thực. Cột demo là đơn giản hóa điển hình, không quy tắc mọi môi giới: phạm vi do nhà cung cấp tài khoản đặt, có thể khác ngay giữa các loại tại một nơi.
| Thành phần | Trên demo | Trên tài khoản thực |
|---|---|---|
| Trượt giá | Nhiều nơi bằng không hoặc mô hình cố định; nhà cung cấp tài khoản đặt phạm vi | Biến đổi theo thời điểm, thanh khoản; lớn nhất quanh công bố và mở phiên |
| Giãn chênh lệch giá | Thường cố định hoặc ít đổi | Giãn khi thanh khoản thấp, có sự kiện; demo thường làm phẳng mô hình này |
| Từ chối và báo giá lại | Hiếm hoặc không có | Tùy mô hình và loại tài khoản — thuộc môi giới, không nền tảng |
| Khớp từng phần | Thường khớp toàn bộ | Có thể với quy mô lớn, thanh khoản kém; vị thế rất nhỏ thường không đáng kể |
| Thanh khoản khả dụng | Demo thường không từ chối; có từ chối không tùy quy tắc nhà cung cấp cụ thể | Hữu hạn; cặp ngoại lai, ngoài phiên có thể biến mất tại mức của bạn |
| Khoảng trống giá (gap) | Đôi khi tái hiện khác tài khoản thực | SL trong khoảng trống hoạt động như lệnh thị trường: giá khả dụng đầu, không mức stop |
| Áp lực tâm lý | Không — lỗ không hậu quả | Thật; ảnh hưởng có làm kế hoạch không |
Dòng cuối có thể biến kế hoạch hợp lý thành ứng biến, nhưng không thuộc bài này. Hành vi dưới áp lực thuộc bài về quy trình và kết quả. Ở đây xét phần đo được: chi phí thực hiện.

Đo trượt thay vì ước lượng. Mỗi giao dịch ghi: giá tín hiệu, giá yêu cầu, giá khớp, chênh lúc nhấp và lúc khớp, độ trễ, phiên, sự kiện vĩ mô, giờ máy chủ. Có mẫu rồi tính trung vị và đuôi phân phối, không riêng trung bình – vài lần khớp cực trị có thể khiến trung bình hiểu sai cả hai chiều. Chỉ con số như vậy mới phù hợp đưa vào mô hình chi phí quá khứ.
Trường hợp tham chiếu: ngày 3 tháng 1 năm 2019, yên biến động mạnh. Trong thanh khoản mỏng phiên Á, các cặp yên nhảy mạnh trong vài phút; sự kiện có ô riêng trong báo cáo ngân hàng trung ương Australia (mục 12 trong tài liệu tham khảo, nội dung truy cập 22.08.2026). Báo cáo nêu “Lúc 9:36 sáng AEDT, trong khoảng 30 giây và khi không có tin tức đáng kể, yen tăng 3 phần trăm so với USD”, còn chênh lệch giá mua và bán giãn “từ khoảng 2 pip lên 100–300 pip”. Hai câu trong cùng khung quan trọng với bài này: “thanh khoản thị trường thấp theo mùa tại thời điểm này trong ngày và trong năm”, và các nhà môi giới cá nhân tự động đóng vị thế bằng lệnh dừng lỗ khi mức lỗ vượt ngưỡng đã đặt — nghĩa là chính cơ chế ấy được kích hoạt trong cửa sổ này. Bộ kiểm thử chỉ tái hiện chi phí của nó trong phạm vi chế độ mô hình hóa cho phép; các chế độ giản lược hoàn toàn không tái hiện vì khớp tại giá ghi trong lệnh (xem phần khớp lệnh chờ). Biên độ biến động và giá khớp khác nhau giữa nguồn dữ liệu và nhà môi giới, nên không có một con số pip “đúng” duy nhất để đưa ra. Với kiểm thử chiến lược, kết luận hẹp và cụ thể: mô hình giả định spread cố định và trượt giá bằng không không tái hiện được những cửa sổ như vậy; chiến lược có dừng lỗ hẹp nhạy nhất với chúng. Diễn biến sự kiện và bối cảnh thị trường thuộc phần phiên và giờ giao dịch.
3. Kết quả quá khứ gồm gì: dữ liệu, mô hình tick, chi phí
Kết quả là hàm của ba thứ người dùng có thể quyết định mà không nhận ra: nạp dữ liệu nào, dựng chuyển động trong nến thế nào, thêm gì vào từng giao dịch.
Mô hình tạo tick
Tài liệu MetaTrader 5 nêu năm chế độ: Mỗi tick, Mỗi tick dựa trên tick thực, OHLC 1 phút, Chỉ giá mở và Tính toán toán học. Khác biệt đầu và hai quan trọng nhất. Chế độ Mỗi tick tạo tick bằng thuật toán từ dữ liệu phút. Chế độ Mỗi tick dựa trên tick thực dùng tick nhà môi giới thu – bản ghi một luồng cụ thể, không tái dựng đầy đủ thị trường. OHLC 1 phút mô phỏng bốn giá mỗi phút, Chỉ giá mở chạy logic lúc mở nến, còn Tính toán toán học không nạp lịch sử, dùng tối ưu hàm toán. Tên và thứ tự được trang cài bộ kiểm thử xác nhận (mục 2 trong tài liệu tham khảo, truy cập 22.08.2026). Chế độ đôi khi đổi theo phiên bản, nên xem trợ giúp phiên bản riêng trước dựa vào.
Chọn tick thực không có nghĩa hoàn toàn không tick tính toán. Tài liệu nói rõ dự phòng: “Nếu lịch sử có nến phút không có tick, bộ kiểm thử tạo tick ở chế độ Mỗi tick”; ngược lại “có tick phút nhưng không có nến phút tương ứng thì tick bị bỏ” (mục 1 trong tài liệu tham khảo, truy cập 22.08.2026). Kho môi giới thiếu hoặc không nhất quán thì một đoạn chạy bằng tick mô hình, báo cáo không đánh dấu riêng. Cùng trang lưu ý tick thực có thể đổi chênh ngay trong nến phút, tick tạo dùng chênh cố định của nến – chế độ đổi cả đường giá lẫn mô hình chênh.
Hệ quả đơn giản nhưng bất tiện. Quy tắc phụ thuộc thứ tự chạm đỉnh, đáy trong nến – mọi chiến lược đồng thời có stop và mục tiêu đều vậy – thì tick tạo từ phút phải đoán thứ tự. Không phải lỗi chương trình mà thuộc tính mô hình. MetaTrader 4 báo riêng độ bao phủ lịch sử nhưng chuyển động trong nến vẫn tính, không đọc luồng thực. Tài liệu nêu ba chế độ — Chỉ giá mở, Điểm kiểm soát và Mỗi tick — chế độ cuối “dùng không chỉ khung thấp hơn gần nhất mà cả mọi khung gần nhất có sẵn”; thiếu khung thấp thì dùng mẫu sóng dựng sẵn (mục 14 trong tài liệu tham khảo, truy cập 22.08.2026). Thanh chất lượng cho biết thực dùng khung nào – càng thấp càng ít đoán đường giá. Tick thực và độ dài kho tùy nhà môi giới, thời gian lưu.
Bộ kiểm thử khớp lệnh chờ thế nào
Mô hình tick quyết định những giá nào có thể thấy. Lớp giả định riêng là làm gì với giá khi đã có lệnh chờ – thường không lộ trong cài, phải tra tài liệu. Có hai câu hỏi; tách ra mới tính đúng: khi nào lệnh được thực hiện, và ở giá nào. Câu thứ hai trong MetaTrader 5 tùy hai trục riêng: loại công cụ, chế độ dữ liệu. Nhầm hai trục dễ khiến câu đúng trong tài liệu bị áp nơi không đúng.
Độ trễ. Mô phỏng độ trễ MetaTrader 5 áp đặt lệnh của hệ thống, không thực hiện sau đó trên máy chủ: “EA dùng lệnh chờ thì chỉ trì hoãn đặt, không trì hoãn thực hiện (thực tế thực hiện ở máy chủ không có trễ mạng)” (mục 2 trong tài liệu tham khảo, truy cập 22.08.2026). Khớp lệnh đã đặt vì vậy không có trễ mạng trong thử – đúng vì thực tế cũng vậy.
Trục một: loại công cụ. Không trễ không có nghĩa khớp đúng mức ghi lệnh. Tài liệu trước hết phân theo loại; FX/CFD OTC ở đây không qua sở, hợp đồng tiền tệ qua sở là nhóm khác. Quy tắc ngoài sở: “Mọi lệnh chờ và SL/TP kích hoạt theo Bid, Ask. Thực hiện bằng giá Bid, Ask thị trường hiện tại lúc kích hoạt” (mục 13 trong tài liệu tham khảo, phần Kích hoạt và thực hiện lệnh, đoạn đầu, truy cập 22.08.2026). Mọi lệnh chờ gồm limit, SL, TP vì vậy khớp bid/ask hiện tại lúc kích hoạt, không phải mức ghi. Với limit, lệch thuận là cải thiện giá, không cho phép khớp vượt giới hạn theo hướng bất lợi.
Câu limit không trượt chỉ dành công cụ qua sở. Đoạn tiếp cùng phần nói riêng cổ phiếu, hợp đồng qua sở: “Biểu đồ và lệnh stop kích hoạt bằng giá giao dịch cuối Last. Limit kích hoạt bằng Bid, Ask; khớp mức chỉ định không trượt, loại khác khớp Bid, Ask hiện tại, có thể trượt” (mục 13, đoạn hai cùng phần, cùng ngày truy cập). Đôi khi dẫn thành luật chung bộ kiểm thử – sai phạm vi, không sai trích dẫn. “Limit không trượt” áp qua sở; mã FX ngoài sở theo đoạn trước, hợp đồng tiền tệ qua sở theo quy tắc qua sở.
Trục hai: chế độ mô hình. Loại công cụ quyết định trong chế độ chính xác — Mỗi tick và Mỗi tick dựa trên tick thực. Chế độ là trục riêng; bản đơn giản bỏ hẳn luật đó: “Ở Chỉ giá mở và OHLC 1 phút, lệnh chờ, SL, TP thực hiện theo giá ghi trong lệnh. Thuật toán theo giá thị trường ở chế độ chính xác (mỗi tick, tick thực) không hợp bản kém chính xác” (mục 13, cùng ngày truy cập). Hãng còn giải thích: “Có chế độ không tạo tick trung gian, nên lệch giá yêu cầu và giá hiện tại Open/OHLC có thể lớn. Khớp giá yêu cầu trong Chỉ giá mở và OHLC 1 phút cho kiểm thử chính xác hơn”. Logic ngược trực giác: chế độ đơn giản không có giá thị trường sau kích hoạt; khớp mức ghi vì khớp giá mở nến sau còn sai hơn.
Kết hợp hai trục. Mã FX ngoài sở trong MetaTrader 5 có hai môi trường thực hiện dễ nhầm vì báo cáo giống nhau:
- Chế độ chính xác (Mỗi tick, Mỗi tick dựa trên tick thực) — mọi lệnh chờ, SL, TP khớp bid/ask hiện tại lúc kích hoạt. Có mô hình trượt nhưng chỉ trong đường giá tái hiện – tạo từ phút hoặc lấy kho tick môi giới
- Chế độ đơn giản (OHLC 1 phút, Chỉ giá mở) — mọi lệnh chờ, SL, TP khớp đúng giá ghi. Trượt biến mất hoàn toàn, với mọi loại lệnh cùng lúc
Cơ chế đơn giản hóa khác giữa hai loại dù cùng hướng tác động. Stop kích hoạt thành lệnh thị trường: thực tế giá khả dụng đầu sau vượt mức, không chính mức. Khớp đúng mức ở bản đơn giản xóa toàn chi phí nhảy, nâng kết quả. Limit mua dưới hoặc bán trên thị trường: khớp mức ghi giả định đủ thanh khoản toàn vị thế đúng đó; chạm giá không bảo đảm đủ khớp. Qua sở còn thứ tự hàng đợi; OTC FX/CFD theo quy tắc nhà cung cấp. Bộ thử không mô hình hàng đợi hay khối lượng sẵn, chỉ biết đường giá. Cả hai có lợi kết quả, nhưng chỉ vào phép tính khi chế độ cho phép.
Điều kiện riêng là phía thị trường: chạm theo chuỗi đúng phía lệnh, mua theo ask, bán theo bid. Thử trên một chuỗi thường bid dựng phía kia bằng cộng chênh; tài liệu MQL5 nói “khi thử, chênh không được mô hình mà lấy từ lịch sử” (mục 3 trong tài liệu tham khảo, truy cập 22.08.2026) – kích hoạt tùy chênh đã ghi, không phải chênh có thể trên tài khoản bạn. Độ dày đường giá cũng quan trọng; trang tick cảnh báo “mức stop và lệnh chờ có thể kích hoạt ở giá khác chỉ định, nhất là khung cao” (mục 1 trong tài liệu tham khảo).
Ý nghĩa khi đọc báo cáo. Báo cáo không nói môi trường nào tạo ra – phải xem cài lần chạy. Cùng quy tắc ở chính xác và đơn giản cho phép tính khác; không phải độ chính xác số học mà luật khớp khác. Nhạy nhất là giao dịch trung bình nhỏ, stop hẹp vì chi phí nhảy bị xóa chiếm phần lớn. Luật khớp chờ phải nêu ngang mô hình tick, chi phí; báo cáo thiếu cần đối chiếu tài liệu. Kiểm tra ít tốn: chạy lại chính xác, rồi thêm lần khớp xấu hơn khoảng trượt trung bình, xem còn bao nhiêu kết quả.
Mô hình chi phí
Mỗi giao dịch chịu bốn khoản có đơn vị khác nhau; không được trộn lẫn chúng:
- Spread — tính bằng pip hoặc point. Câu hỏi chính: bài kiểm thử dùng spread cố định, spread được ghi trong dữ liệu hay spread hiện tại lúc khởi chạy kiểm thử? Ba câu trả lời khác nhau cho ba kết quả khác nhau — với bộ kiểm thử MetaTrader 5, tài liệu đã dẫn ở trên giải đáp điều này; với công cụ khác, phải tìm trong mô tả của chính bộ kiểm thử đó
- Hoa hồng — tính bằng đồng tiền tài khoản, thường trên mỗi lot và mỗi chiều giao dịch. Muốn so sánh với spread, phải quy đổi sang pip theo giá trị pip của công cụ và quy mô vị thế tương ứng
- Phí swap — phát sinh khi giữ vị thế qua thời điểm chuyển ngày thanh toán, với mức phí gấp ba vào một ngày nhất định trong tuần. Khoản này không đáng kể với chiến lược trong ngày, nhưng đôi khi lớn hơn spread với chiến lược giữ vị thế dài hơn
- Trượt giá — tính bằng pip hoặc point, là chênh lệch giữa giá yêu cầu và giá khớp lệnh. Trong bộ kiểm thử, nó chỉ xuất hiện khi quy tắc khớp lệnh cho phép: với cặp tiền trong các chế độ chính xác của bộ kiểm thử MetaTrader 5, nó áp dụng cho mọi loại lệnh chờ, kể cả SL và TP; còn ở các chế độ OHLC 1 phút và Chỉ giá mở thì hoàn toàn không xuất hiện, vì lệnh được khớp theo giá đã ghi trong lệnh (mục 13 trong tài liệu tham khảo)
Độ trễ được chủ ý loại khỏi danh sách này, dù đôi khi người ta thêm nó như khoản thứ năm. Độ trễ đo bằng mili giây, không phải pip, và không được cộng trực tiếp vào chi phí giao dịch — nó là tham số của mô hình thực thi, tức ảnh hưởng đến mức giá nào được sử dụng, chứ không phải bao nhiêu sẽ bị trừ đi. Bộ kiểm thử MetaTrader 5 cho phép mô phỏng ở các chế độ Không có độ trễ và Độ trễ ngẫu nhiên cũng như với độ trễ cố định; tuy nhiên, như phần khớp lệnh chờ đã nêu, mô phỏng này bao phủ việc hệ thống tự động đặt lệnh, không phải việc thực thi một lệnh đã nằm trên thị trường (mục 2 trong tài liệu tham khảo). Gộp hai đại lượng này vào cùng một dòng tính chi phí là sai đơn vị, không phải sai số làm tròn.
Cần phân biệt hai sai lầm trông có vẻ giống nhau. Độ trễ mạng đo bằng lệnh ping tới địa chỉ máy chủ không phải thời gian thực thi lệnh — giữa hai thời điểm còn có kiểm tra của nhà môi giới, xếp hàng và bản thân việc thực thi. Vấn đề hạ tầng, máy chủ ảo và duy trì hệ thống tự động được trình bày trong bài về tự động hóa, EA và VPS; ở đây, điều cốt yếu là phải giả định rõ độ trễ trong kiểm thử, thay vì ngầm coi bằng không.
Chất lượng của chính dữ liệu
Trước khi kết quả có ý nghĩa, dữ liệu phải vượt qua kiểm tra: khoảng trống và đứt đoạn trong chuỗi, bản ghi trùng, ngoại lệ, thứ tự thời gian, múi giờ và chuyển đổi giờ mùa hè, quy ước dấu thời gian nến là lúc mở hay đóng, cùng việc chuỗi được dựng từ giá bid, ask hay giá giữa. Điểm cuối thường bị xem nhẹ nhưng quyết định một mức giá có thực sự bị chạm tới hay không: vị thế bán được đóng ở giá ask, nên nến dựng từ bid có thể không bao giờ thể hiện mức giá đã kích hoạt dừng lỗ.
4. Backtest hoàn hảo nhưng thiếu thực tế — giải phẫu đường vốn đẹp
Kết quả đẹp trong bộ kiểm thử thường không bắt nguồn từ một trò gian lớn, mà từ bốn sự dễ dãi nhỏ, mỗi điều riêng lẻ đều có vẻ vô hại. Dưới đây là từng điều và cách phát hiện.
Dễ dãi thứ nhất: vào lệnh ở mức giá chưa thể biết
Quy tắc nói “vào lệnh khi nến đóng trên đường trung bình”, và bài kiểm thử vào ngay tại giá đóng của nến đó. Tín hiệu cần giá đóng cuối cùng chỉ có thể tạo lệnh sau khi giá đóng được xác nhận, tại mức giá có sẵn khi ấy. Trong mô hình điển hình tính toán một lần lúc đóng nến, đó là tick đầu tiên của nến tiếp theo. Giá khớp có thể tình cờ bằng giá đóng trước đó, nhưng không được mặc định mức giá ấy khả dụng khi chưa xác định mô hình. Sửa giả định này có thể làm thay đổi đáng kể kết quả.
Đây là kiểm tra độ nhạy, không phải phán quyết: dịch điểm vào lệnh sang sau một nến rồi chạy lại. Nếu kết quả biến mất, điều duy nhất biết được là hệ thống không chịu được việc dịch điểm vào một kỳ. Rò rỉ thông tin tương lai là một khả năng, nhưng không phải duy nhất: tín hiệu cũng có thể tồn tại rất ngắn hoặc nhạy với giá thực thi. Điều quyết định là kiểm toán tính khả dụng của từng biến tại thời điểm ra quyết định — quy trình đầy đủ và những điều phép kiểm tra không chứng minh được nằm trong khung cuối phần về thiên lệch nhìn trước.
Dễ dãi thứ hai: không có chi phí
Kiểm thử thiếu spread, hoa hồng và trượt giá không phải phiên bản giản lược của hệ thống. Đó là một hệ thống khác, có kỳ vọng và ngưỡng sinh lời khác. Có thể tính được quy mô dịch chuyển này; phần tiếp theo sẽ minh họa.
Dễ dãi thứ ba: một bộ tham số được chọn từ hàng nghìn lần thử
Bộ tối ưu hóa trả về bảng xếp hạng. Lấy dòng đầu làm kết quả chiến lược mà không công bố số biến thể đã kiểm tra là bỏ sót thông tin. Với đủ nhiều lần thử, kết quả tốt nhất có thể cao chỉ do thống kê của quá trình tìm kiếm, kể cả với quy tắc vô nghĩa — cách xử lý chính thức hiện tượng này nằm ở mục 8 trong tài liệu tham khảo. Số biến thể đã kiểm thử phải có trong mô tả kết quả, cũng như giai đoạn và chi phí.
Dễ dãi thứ tư: đánh giá trên dữ liệu đã dùng để tinh chỉnh
Nếu chọn tham số trên chính giai đoạn sau đó dùng để báo cáo kết quả, thì không có xác thực độc lập — chỉ có mô tả mức độ khớp dữ liệu. Đây cũng là lỗi dễ phát hiện nhất: chỉ cần hỏi đoạn dữ liệu nào dùng để tinh chỉnh, đoạn nào chỉ dành cho đánh giá.
Bốn sự dễ dãi trong một phép tính — đường vốn đẹp còn lại bao nhiêu
Liệt kê bốn sự dễ dãi chưa cho thấy quy mô tác động. Phép tính dưới đây làm điều đó; mỗi bước đều có thể kiểm tra bằng một phép toán.
Môi trường giống phép tính trong phần Kiểm tra độ nhạy với chi phí: EUR/USD, vị thế 1,00 lot tiêu chuẩn, giá trị pip 10,00 USD, đồng tiền tài khoản USD.
Dữ liệu: 36 tháng báo giá phút của một nhà môi giới; trong đó 24 tháng là tập trong mẫu và 12 tháng là tập ngoài mẫu, với ranh giới được ấn định trước khi tinh chỉnh.
Số giao dịch trong mẫu: 1.000; ngoài mẫu khoảng 500, vì với cùng tần suất giao dịch, giai đoạn xác thực chỉ dài bằng một nửa. Cột USD chuẩn hóa mỗi dòng về 1.000 giao dịch để có thể so sánh — vì thế ở dòng thứ tư, đây là giá trị chuẩn hóa, không phải số tiền thực tế phát sinh trên tập ngoài mẫu. Số biến thể tham số đã kiểm tra: 1.200.
Chi phí cả vòng mở và đóng theo phương án minh họa: spread 0,30 + hoa hồng 0,70 + trượt giá 0,20 = 1,20 pip. Đây không phải bộ số đo thực tế hay mức điển hình của thị trường — các giá trị được chọn để có thể tính nhẩm.
Phí swap: bằng không, vì ví dụ nêu rõ chiến lược trong ngày và mọi vị thế đều đóng trước thời điểm chuyển ngày thanh toán. Với chiến lược giữ qua thời điểm rollover, dòng này không còn bằng không và phải cộng riêng.
Không con số nào ở đây lấy từ một lần chạy bộ kiểm thử thực tế. Đây là mô hình minh họa hướng tác động và bậc độ lớn của từng sự dễ dãi — có thể kiểm tra bằng máy tính, nhưng không thay thế bài kiểm thử của bạn.
| Bước | Điều bị loại bỏ | Kết quả (pip/giao dịch) | 1.000 giao dịch (USD, 1 lot) |
|---|---|---|---|
| 0. Báo cáo từ bộ tối ưu hóa | chưa loại bỏ gì — vào tại giá đóng nến tín hiệu, không chi phí, đứng đầu bảng xếp hạng, đánh giá trên giai đoạn tinh chỉnh | +2,60 | +26.000 |
| 1. Điểm vào thực sự có thể khớp | thiên lệch nhìn trước: chuyển điểm vào sang giá mở của nến tiếp theo | +1,20 | +12.000 |
| 2. Thêm chi phí | giả định spread, hoa hồng và trượt giá bằng không | 0,00 | 0 |
| 3. Bỏ đặc quyền của vị trí đầu bảng | dùng trung vị của 1.200 biến thể thay cho biến thể tốt nhất, vẫn cùng giai đoạn và chi phí | −0,45 | −4.500 |
| 4. Đánh giá ngoài giai đoạn tinh chỉnh | giữ nguyên bộ tham số đã cố định và chạy trên dữ liệu ngoài mẫu | −0,30 | −3.000 |
Cách kiểm tra từng dòng. Cột USD bằng kết quả pip nhân 10,00 USD và nhân 1.000 giao dịch. Các bước 0, 1 và 2 dùng cùng một biến thể tham số, mỗi lần bỏ một giả định, nên phép trừ diễn ra theo chiều dọc: 2,60 − 1,40 = 1,20 và 1,20 − 1,20 = 0,00. Các bước 3 và 4 không phải phép trừ tiếp theo, mà là câu trả lời cho hai câu hỏi khác nhau về cùng kết quả — vì thế được tính riêng, không nối vào bước 2.
Bước 1 loại 1,40 pip, tức phần biến động của nến tín hiệu mà quy tắc đã tự nhận được khi vào lệnh tại mức giá chỉ biết lúc nến đóng. Sau điều chỉnh còn đúng 1,20 pip gộp không phải ngẫu nhiên: đây chính là hệ thống được phân tích độ nhạy với chi phí ở phần tiếp theo. Bước 2 cho thấy độ nhạy ấy dẫn tới đâu — sau khi tính đủ 1,20 pip chi phí cả vòng, kết quả về không chính xác tới từng cent.
Bước 3 cho thấy khoảng cách giữa kết quả được chọn và trung vị của các biến thể đã thử. Đầu bảng của 1.200 biến thể là giá trị cao nhất trong 1.200 giá trị; lợi thế so với trung vị — ở đây là 0,45 pip mỗi giao dịch — minh họa tác động lựa chọn, nhưng tự nó không đo được quá khớp. Trung vị âm của toàn bảng cũng không chứng minh điểm được chọn là một đỉnh nhọn: cần đánh giá vùng lân cận và dữ liệu độc lập. Bước 4 đánh giá cùng bộ tham số đã cố định trên 12 tháng mà bộ tối ưu hóa chưa thấy, cho kết quả −0,30 pip mỗi giao dịch.
Trong phép tính giả định này, loại bỏ ba trong bốn sự dễ dãi đã biến +26.000 USD thành −3.000 USD khi quy về cùng 1.000 giao dịch, mà không đổi một quy tắc chiến lược nào. Điều thứ tư — đặc quyền chỉ trình bày vị trí đầu bảng — vẫn giữ nguyên ở dòng thứ tư, vì dữ liệu ngoài mẫu vẫn chạy cùng bộ tham số đã cố định; khoảng cách với trung vị được trình bày riêng ở dòng thứ ba, trả lời một câu hỏi khác. Chỉ có các giả định thay đổi: khi nào được vào lệnh, giao dịch tốn bao nhiêu, được trình bày biến thể nào và được đánh giá trên dữ liệu nào.
5. Kiểm tra độ nhạy với chi phí — tính từng bước
Đây là nơi phần lớn chiến lược mất khả năng tồn tại. Phép tính dưới đây không phải kết quả của một lần kiểm thử thực tế — đó là mô hình với giả định được nêu rõ, có thể kiểm tra bằng máy tính. Chính vì vậy nó phù hợp để thể hiện cơ chế: không có con số nào không truy được nguồn gốc.
Công cụ: EUR/USD, 1 pip = 0,0001 đơn vị giá. Đồng tiền tài khoản: USD.
Quy mô vị thế: 1,00 lot tiêu chuẩn, tức giá trị danh nghĩa 100.000 EUR. Giá trị pip = 100.000 × 0,0001 = 10,00 USD (với EUR/USD, đồng tiền định giá là USD, nên giá trị pip cố định khi quy ra đồng tiền tài khoản).
Phân bố kết quả gộp, trước chi phí: 1.000 giao dịch, gồm 600 lệnh thắng ở mức +8,00 pip và 400 lệnh thua ở mức −9,00 pip.
Tổng lợi nhuận gộp: 600 × 8,00 − 400 × 9,00 = 4.800 − 3.600 = 1.200 pip, tức 1,20 pip mỗi giao dịch.
Hệ số lợi nhuận gộp = 4.800 / 3.600 = 1,33 (tổng các khoản lãi gộp chia cho giá trị tuyệt đối của tổng các khoản lỗ gộp).
Chi phí tính cho cả vòng — mở và đóng lệnh — rồi áp dụng cho từng giao dịch.
Hoa hồng quy đổi sang pip: 3,50 USD mỗi lot mỗi chiều thành 7,00 USD cả vòng, tức 7,00 / 10,00 = 0,70 pip. Mức hoa hồng tùy nhà môi giới và loại tài khoản — ở đây là giá trị giả định, không phải số đo thực tế.
Phí swap bằng không là giả định, không phải kết quả đo — ví dụ xét chiến lược trong ngày, không giữ vị thế qua thời điểm chuyển ngày thanh toán. Nếu có giữ qua, phải thêm một dòng riêng vào cột chi phí; với mức thu gấp ba vào một ngày nhất định trong tuần, khoản này có thể vượt spread.
Không con số nào trong bảng lấy từ lần chạy bộ kiểm thử hay phép đo trên tài khoản. Tất cả chỉ nhằm minh họa chi phí có thể nhanh chóng ăn hết lợi thế nhỏ trên mỗi giao dịch.
| Mô hình chi phí | Spread (pip) | Hoa hồng (pip) | Trượt giá (pip) | Tổng chi phí (pip) | Kết quả ròng (pip/giao dịch) | Hệ số lợi nhuận ròng | 1.000 giao dịch (USD, 1 lot) |
|---|---|---|---|---|---|---|---|
| Không chi phí | 0,00 | 0,00 | 0,00 | 0,00 | +1,20 | 1,33 | +12.000 |
| Chỉ spread | 0,30 | 0,00 | 0,00 | 0,30 | +0,90 | 1,24 | +9.000 |
| Spread và hoa hồng | 0,30 | 0,70 | 0,00 | 1,00 | +0,20 | 1,05 | +2.000 |
| Spread, hoa hồng, trượt giá | 0,30 | 0,70 | 0,20 | 1,20 | 0,00 | 1,00 | 0 |
| Điều kiện xấu hơn giả định | 0,60 | 0,70 | 0,50 | 1,80 | −0,60 | 0,86 | −6.000 |
Cách kiểm tra từng dòng. Cột “tổng chi phí” là tổng ba cột bên trái. Cột “kết quả ròng” bằng 1,20 pip trừ tổng chi phí. Cột USD bằng kết quả ròng nhân 10,00 USD và nhân 1.000 giao dịch. Hệ số lợi nhuận ròng được tính từ cùng phân bố sau khi cộng chi phí vào từng giao dịch — chẳng hạn với chi phí 1,20 pip, lãi mỗi lệnh giảm từ 8,00 xuống 6,80 pip, còn lỗ tăng từ 9,00 lên 10,20 pip; khi đó 600 × 6,80 = 4.080 pip lãi và 400 × 10,20 = 4.080 pip lỗ, tức hệ số lợi nhuận đúng 1,00. Tổng chi phí của dòng này là 1.000 × 1,20 = 1.200 pip, bằng toàn bộ lợi nhuận gộp — vì vậy kết quả về không tới từng cent.
Có hai con số cần nhớ. Thứ nhất: chênh lệch giữa dòng thứ ba và thứ tư chỉ là 0,20 pip trượt giá, nhưng làm kết quả cuối lệch 2.000 USD. Thứ hai: giữa kiểm thử không chi phí và kiểm thử với mức chi phí giả định ở đây không phải một điều chỉnh nhỏ — đó là khác biệt giữa hệ thống sinh lời và hệ thống không sinh lời. Chỉ phép đo trên tài khoản của bạn mới quyết định 1,20 pip có thực tế với chiến lược của bạn hay không; ở đây con số được chọn để minh họa phép tính, không lấy từ thị trường. Kết quả gộp trung bình mỗi giao dịch càng nhỏ và tần suất càng cao, sự chuyển đổi càng đột ngột. Với chiến lược giữ vị thế có kết quả trung bình vài chục pip, cùng thay đổi chi phí này chỉ có tác động nhỏ — vì vậy phải tính độ nhạy cho chiến lược của mình, không lấy từ ví dụ của người khác.
6. Thiên lệch nhìn trước và rò rỉ dữ liệu — thông tin từ tương lai
Thiên lệch nhìn trước là dùng thông tin chưa có tại thời điểm ra quyết định. Rò rỉ dữ liệu có nghĩa rộng hơn: mọi cách để kiến thức tương lai lọt vào quá trình xây dựng hoặc đánh giá quy tắc. Cả hai nguy hiểm vì trông không giống lỗi — chúng trông như kết quả tốt.
Những nơi có thể phát sinh rò rỉ:
- Vào lệnh tại giá đóng của nến tín hiệu. Đã mô tả ở phần bốn. Cách sửa: vào không sớm hơn lúc mở nến tiếp theo, hoặc chỉ tính tín hiệu từ dữ liệu đã đóng
- Chỉ báo được tính lại ngược về quá khứ. Tài liệu Pine Script định nghĩa việc vẽ lại là tình huống khiến “phép tính hoặc hình vẽ trong lịch sử và thời gian thực” của mã có hành vi khác nhau (mục 4 trong tài liệu tham khảo, truy cập 22.08.2026). Không phải hành vi nào như vậy cũng là gian lận, nhưng phải mô tả rõ trước khi coi kết quả là đáng tin. Cơ chế cảnh báo và khác biệt giữa lịch sử với thời gian thực được trình bày trong bài về TradingView
- Chỉ báo đặt giữa. Mọi cấu trúc dùng quan sát ở t+k để tính giá trị tại t đều không thể dùng để giao dịch, dù nhìn rất đẹp trên biểu đồ lịch sử
- Dữ liệu vĩ mô sau điều chỉnh. Số liệu chỉ tiêu đã được điều chỉnh nhiều năm sau không phải thông tin có tại lúc công bố. Nếu quy tắc dùng dữ liệu vĩ mô, phải dùng phiên bản dữ liệu có sẵn tại thời điểm quyết định, gồm các điều chỉnh đã công bố tới khi đó, cùng thời gian công bố thực tế. Cách diễn giải các công bố được trình bày trong bài về giao dịch quanh thời điểm công bố dữ liệu
- Chọn công cụ khi đã biết tương lai. Chỉ kiểm tra các công cụ còn tồn tại đến nay, hoặc đã biết là tăng giá, tạo ra lựa chọn dựa trên tương lai. Với tiền tệ, điều này đặc biệt liên quan cặp ngoại lai và giai đoạn thay đổi chế độ tỷ giá
- Chuẩn bị dữ liệu trước khi chia mẫu. Chuẩn hóa, định tỷ lệ hoặc chọn đặc trưng trên toàn bộ tập dữ liệu sẽ đưa thông tin từ phần ngoài mẫu vào phần trong mẫu. Chia tập trong mẫu và ngoài mẫu phải là thao tác đầu tiên, không phải cuối cùng
Giả định. Cùng quy tắc và tham số, công cụ, giai đoạn, chế độ tạo tick và mô hình chi phí như lần chạy cơ sở. Chỉ thay đổi một điều: thời điểm vào lệnh. Ghi lại phiên bản mã, phiên bản nền tảng và định danh của cả hai báo cáo; nếu không, không thể tái lập so sánh.
Quy trình. Làm trễ toàn bộ tín hiệu đúng một kỳ ra quyết định rồi chạy lại, không thay đổi gì khác. Lặp lại với độ trễ hai kỳ — chỉ một điểm không cho thấy hình dạng mối quan hệ.
Kết quả quan sát. Cần so sánh ba con số: kết quả mỗi giao dịch khi không trễ, trễ một kỳ và trễ hai kỳ. Ở đây không đưa số cụ thể vì bài viết không thực hiện lần chạy nào — bạn điền ba trường bằng số của chính mình từ các báo cáo của mình.
Giới hạn. Kết quả biến mất sau khi trì hoãn không chứng minh có rò rỉ thông tin tương lai. Tín hiệu tồn tại ngắn, với lợi thế cạn trong vài phút, cũng cho hình ảnh tương tự; tín hiệu nhạy với giá khớp, khi lệch một nến đã mất toàn bộ điểm vào kỳ vọng, cũng vậy. Kiểm tra này chỉ phân biệt hệ thống chịu được thay đổi thời điểm vào với hệ thống không chịu được.
Điều thực sự quyết định. Kiểm toán tính khả dụng giúp loại trừ rò rỉ: với từng biến đi vào quyết định, ghi lại thời điểm giá trị của nó được biết rồi đối chiếu với lúc quyết định được đưa ra. Biến có dấu thời gian muộn hơn quyết định là rò rỉ, bất kể kiểm tra độ trễ cho thấy gì — ngược lại, kiểm toán không phát hiện vấn đề sẽ giải quyết câu hỏi này ngay cả khi kết quả giảm sau khi làm trễ.
7. Trong mẫu, ngoài mẫu và kiểm thử cuốn chiếu
Nguyên tắc ngắn gọn và nghiêm ngặt: dữ liệu dùng để tinh chỉnh không thể đồng thời là xác thực độc lập. Mọi điều khác đều bắt nguồn từ đó.
Tập trong mẫu (IS) là đoạn lịch sử cho phép chọn tham số, thử biến thể và đổi quy tắc. Tập ngoài mẫu (OOS) là đoạn bạn không xem trong quá trình đó. Hai tập phải tách theo thời gian — xáo trộn ngẫu nhiên quan sát của toàn giai đoạn không tạo ra phân chia IS/OOS, vì chuỗi thời gian có trí nhớ và việc xáo trộn truyền thông tin theo cả hai hướng.
Hệ quả quan trọng nhất: tập ngoài mẫu mất tính độc lập khi kết quả của nó ảnh hưởng đến các thay đổi tiếp theo. Nếu xem kết quả OOS, thấy yếu rồi sửa chiến lược, đoạn dữ liệu ấy không còn là OOS đối với mọi việc làm sau đó. Bạn vẫn có thể dùng nó, nhưng như một phần tập trong mẫu, không phải bằng chứng độc lập. Không có số liệu về tần suất cơ chế này làm hỏng xác thực trong thực tế, và không cần giả vờ rằng có — tác động của nó đã rõ: giai đoạn OOS từng dùng để đổi tham số không còn là bằng chứng độc lập cho mô hình đã sửa.
Bộ kiểm thử MetaTrader 5 có sẵn cách chia này. Thiết lập Kiểm thử tiến có các giá trị Không, 1/2, 1/3, 1/4 và Tùy chỉnh; phần được dành riêng luôn là đoạn thứ hai, muộn hơn của giai đoạn (mục 2 trong tài liệu tham khảo). Điều này tiện vì giảm nguy cơ vô tình nhìn vào dữ liệu ngoài mẫu, nhưng không tự dịch chuyển cửa sổ — kiểm thử cuốn chiếu nhiều vòng phải dựng thủ công hoặc dùng công cụ ngoài. Tình trạng tài liệu được kiểm tra ngày 22 tháng 8 năm 2026.
Kiểm thử cuốn chiếu: cửa sổ dịch chuyển
Kiểm thử cuốn chiếu lặp lại cùng quy trình trên các đoạn lịch sử liên tiếp, dịch dần về sau. Thay vì một phán quyết, bạn có chuỗi phán quyết; các đoạn xác thực nối lại tạo thành hành trình mà bộ tối ưu hóa chưa từng thấy trọn vẹn.
- Ấn định độ dài cửa sổ trước lần chạy đầu — ví dụ 12 tháng trong mẫu và 3 tháng ngoài mẫu. Chọn độ dài sau khi xem kết quả là một hình thức tinh chỉnh khác
- Chỉ tối ưu trên cửa sổ trong mẫu và ghi lại số biến thể đã kiểm tra
- Áp dụng tham số đã chọn lên cửa sổ ngoài mẫu mà không thay đổi gì
- Dịch cả hai cửa sổ một khoảng bằng độ dài cửa sổ ngoài mẫu rồi lặp lại
- Đánh giá các đoạn xác thực đã nối, không phải kết quả tối ưu hóa. Có bao nhiêu đoạn dương, đoạn tệ nhất ra sao, tham số được chọn ở các vòng kế tiếp có giống nhau không
Hiệu quả kiểm thử cuốn chiếu, thước đo do Pardo giới thiệu (mục 7 trong tài liệu tham khảo), đôi khi được dùng làm chỉ báo tóm tắt khả năng duy trì kết quả ngoài tập trong mẫu:
WFE = tỷ suất sinh lời OOS quy đổi theo nămtỷ suất sinh lời IS quy đổi theo năm × 100%
Để tỷ số có ý nghĩa, hai tỷ suất phải tính sau cùng loại chi phí, bằng cùng đồng tiền và theo cùng quy tắc quy mô vị thế. Nếu lợi nhuận IS bằng không, tỷ số không xác định; nếu âm, tỷ số không mô tả hữu ích việc duy trì lợi thế dương. So sánh WFE giữa các hệ thống định nghĩa lợi nhuận khác nhau là vô nghĩa. Còn một lưu ý quan trọng hơn: WFE không phải cổng đạt/trượt. WFE cao trên mười hai giao dịch ngoài mẫu nói ít hơn WFE vừa phải trên bốn trăm giao dịch. Cần xem cùng số giao dịch, phân bố kết quả từng vòng, sụt giảm vốn và hành vi khi tăng chi phí.
8. Tối ưu hóa, ổn định tham số và Monte Carlo
Tối ưu hóa trả lời bộ tham số nào cho kết quả tốt nhất trên dữ liệu này. Nó không trả lời bộ nào sẽ tốt về sau. Đây không phải sắc thái ngôn ngữ — đó là khác biệt giữa mô tả quá khứ và dự báo. Không có hồ sơ triển khai, bài này không thể khẳng định bao nhiêu hệ thống thất bại vì lý do ấy. Bộ tối ưu hóa chỉ xếp hạng kết quả trên dữ liệu đầu vào; các kết quả đó không xác lập hiệu suất tương lai.
Đỉnh nhọn và vùng bằng
Thay vì nhìn dòng tốt nhất, hãy xem vùng lân cận. Nếu các giá trị tham số gần nhau cho kết quả tương tự, bạn có vùng bằng — vùng quy tắc hoạt động gần giống nhau dù thiết lập thay đổi nhỏ. Nếu chỉ dịch tham số một bước mà kết quả sụp đổ, đó là đỉnh nhọn, rất có thể là sự trùng hợp với cấu hình dữ liệu lịch sử. Chọn điểm giữa vùng bằng thường hợp lý hơn chọn đỉnh; phân biệt này và toàn bộ phương pháp kiểm thử cuốn chiếu đến từ công trình của Pardo (mục 7 trong tài liệu tham khảo).
Cũng nên kiểm tra các tham số ít ai tối ưu: giờ giao dịch, khoảng cách dừng lỗ tối thiểu, bộ lọc ngày trong tuần. Nếu kết quả phụ thuộc việc giao dịch đến 22:00 hay 23:00 giờ máy chủ, hãy kiểm tra cơ sở kinh tế của bộ lọc và độ ổn định ngoài giai đoạn tinh chỉnh; riêng khác biệt giữa các giờ chưa chứng minh quá khớp.
Số biến thể là một phần của kết quả
Khi báo cáo backtest, hãy công bố số tổ hợp đã kiểm tra bên cạnh kết quả. Thói quen này phân biệt mô tả kiểm thử với quảng cáo. Công trình của Bailey, Borwein, López de Prado và Zhu xử lý có hệ thống vấn đề kiểm định nhiều lần cùng xác suất kết quả tốt nhất chỉ là sản phẩm của việc tìm kiếm (mục 8 trong tài liệu tham khảo); Aronson trình bày có hệ thống việc lựa chọn dựa trên kết quả (mục 9).
Monte Carlo là kiểm tra độ vững, không phải dự báo
Một cách đơn giản và hữu ích, được Tomasini và Jaekle cùng những tác giả khác trình bày (mục 10 trong tài liệu tham khảo): lấy tập kết quả giao dịch ở các đoạn xác thực, nhiều lần tạo thứ tự mới rồi tính phân bố mức sụt giảm vốn tối đa. Điều cần quan tâm là đuôi phải của phân bố đó — chẳng hạn phân vị 95 của sụt giảm tối đa, tức mức mà 95 phần trăm lượt mô phỏng không vượt quá. Nếu mức này vượt giới hạn sụt giảm trong kế hoạch rủi ro, mô hình giả định và quy mô vị thế không đạt tiêu chí rủi ro ấy, dù trung bình trông thuận lợi.
Phải nêu rõ hai giới hạn. Xáo trộn thứ tự giả định các giao dịch độc lập, điều không đúng khi chiến lược mở vị thế tương quan hoặc điều chỉnh quy mô theo kết quả gần đây. Thứ hai thường bị diễn giải quá rộng: xáo trộn chỉ lấy từ kết quả đã xảy ra, nên không tạo ra một giao dịch riêng lẻ nằm ngoài phân bố đã quan sát. Điều đó không giới hạn sụt giảm tối đa — ngược lại, mục tiêu chính là xem thứ tự khác có thể gom các khoản lỗ sẵn có thành một chuỗi, gây sụt giảm lớn hơn lịch sử ra sao. Vì vậy Monte Carlo kiểm tra độ nhạy với thứ tự sự kiện, không phải phạm vi các sự kiện riêng lẻ có thể xảy ra. Giới hạn sụt giảm và cơ chế dừng giao dịch được trình bày trong bài về sụt giảm vốn và công tắc dừng.
9. Kiểm thử tiến, demo và phát lại thị trường — chúng xác nhận điều gì
Kiểm thử tiến đôi khi được coi là bằng chứng cuối cùng. Nó chỉ là một giai đoạn xác thực, xác nhận một điều hẹp và cụ thể.
Kiểm thử tiến trên đoạn lịch sử được dành riêng xác nhận quy tắc với tham số cố định đã tạo ra kết quả nhất định trên dữ liệu bộ tối ưu hóa chưa thấy. Nó không xác nhận chi phí thực thi hay hành vi ở một chế độ thị trường khác.
Kiểm thử tiến thời gian thực trên tài khoản demo bổ sung hai điều: kiểm tra triển khai có hoạt động đúng khi nền tảng chạy bình thường hay không, và bạn có áp dụng quy tắc mà không ứng biến hay không. Nó không đo được phần chi phí thực thi mà máy chủ demo không tái hiện — cụ thể máy chủ tái hiện gì phải dựa vào tài liệu của nhà môi giới và loại tài khoản đó, không dựa vào nguyên tắc chung. Trước khi kiểm tra, kết quả demo chỉ mô tả mô phỏng có giả định thực thi chưa được xác minh.
Kiểm thử tiến trên tài khoản vốn thật ở quy mô tối thiểu bổ sung phép đo chi phí thực thi. Với lưu ý ở phần hai: nó chỉ đo cho quy mô bạn đang giao dịch. Quyết định tăng mức phơi nhiễm không thuộc quy trình kiểm thử — nó thuộc kế hoạch quản trị rủi ro, và chỉ khi kế hoạch ấy cho phép.
Phát lại thị trường
Phát lại tái hiện lịch sử nhưng ẩn tương lai: chuyển từng nến, ra quyết định rồi mới xem diễn biến tiếp theo. Với chiến lược tùy nghi, cách này cho phép luyện nhiều lần mà không chờ thời gian thực hay phải lập trình quy tắc. Môi trường phát lại gồm phần mềm mô phỏng chuyên dụng có bảng lệnh, thống kê và các chế độ tích hợp trong nền tảng biểu đồ — loại sau giờ cũng không chỉ là cuộn biểu đồ đơn giản. TradingView hiện mô tả chế độ Replay Trading riêng, cho phép “mở vị thế và đặt lệnh giới hạn, dừng và dừng–giới hạn như với nhà môi giới thật”; kết quả phiên được tập hợp trong các thẻ Tổng quan, Hiệu suất, Phân tích giao dịch, Tỷ số rủi ro/hiệu suất và Danh sách giao dịch; trong đó “Hiệu suất và Danh sách giao dịch cũng có thể xuất để phân tích thêm hoặc lưu hồ sơ” (mục 5 trong tài liệu tham khảo, truy cập 22.08.2026).
Phát lại không cung cấp điều gì? Nó không cung cấp chi phí thực thi, vì giá khớp được bộ mô phỏng gán theo quy tắc riêng — phải biết các quy tắc trước khi coi kết quả phiên là hơn một bài tập. Nó cũng không tạo sức ép của khoản lỗ thật. Một nhược điểm riêng là rất dễ tự gian lận mà không nhận ra: hoàn tác quyết định, lặp một đoạn, “thử lại vì lần này tôi nhìn khác” — mọi thao tác đó đều biến kiểm thử thành câu chuyện. Muốn phiên phát lại trở thành dữ liệu, phải viết quy tắc trước khi bắt đầu và ghi mọi quyết định, kể cả quyết định tệ.
10. Công cụ kiểm thử — so sánh theo tiêu chí
Không công cụ nào hoàn tất mọi giai đoạn. Bảng dưới so sánh theo tiêu chí thực sự quyết định lựa chọn, thay vì số lượng tính năng.
| Công cụ | Kiểm tra điều gì | Nguồn dữ liệu | Chia trong mẫu / ngoài mẫu | Cần lập trình | Giới hạn chính |
|---|---|---|---|---|---|
| MetaTrader 4 — Bộ kiểm thử chiến lược | Hệ thống tự động MQL4 trên một công cụ | Ba chế độ mô hình hóa: Chỉ giá mở, Điểm kiểm soát, Mỗi tick (mục 14) | Thủ công, theo khoảng ngày | Có (MQL4) | Biến động trong nến được tính từ dữ liệu khung nhỏ hơn, không đọc từ luồng tick; thanh chất lượng mô hình hóa cho biết khung thời gian được dùng |
| MetaTrader 5 — Bộ kiểm thử chiến lược | Hệ thống tự động MQL5, có thể trên nhiều công cụ | Năm chế độ tạo tick, gồm tick do nhà môi giới thu thập (mục 2) | Tích hợp (Kiểm thử tiến: 1/2, 1/3, 1/4, Tùy chỉnh) (mục 2) | Có (MQL5) | Khả năng cung cấp và độ sâu tick thực phụ thuộc nhà môi giới; nơi kho dữ liệu có khoảng trống, bộ kiểm thử bù bằng tick mô hình hóa (mục 1); cửa sổ kiểm thử cuốn chiếu không tự dịch chuyển |
| cTrader — Backtest cBot | Hệ thống tự động trong môi trường cTrader Algo | Bốn chế độ: Dữ liệu tick từ máy chủ, Nến M1 từ máy chủ, Nến M1 trong tệp CSV, Nến H1 từ máy chủ (mục 6) | Thủ công, theo khoảng ngày | Có | Hoa hồng đặt trên mỗi triệu đơn vị giao dịch, spread cố định hoặc lấy ngẫu nhiên trong khoảng chỉ định — mô hình chi phí vì thế được giản lược và phải thiết lập có chủ ý |
| TradingView — Chiến lược Pine và Replay Trading | Quy tắc trong Pine Script và luyện quyết định trên biểu đồ, có ghi vị thế và xuất kết quả phiên (mục 5) | Dữ liệu của nhà cung cấp được chọn trên biểu đồ | Thủ công | Một phần (chiến lược cần Pine, phát lại không cần mã) | Bộ mô phỏng gán giá khớp; hành vi trên lịch sử và thời gian thực có thể khác (mục 4); trên biểu đồ phi tiêu chuẩn, giá khớp là giá tổng hợp nên kết quả thường không mô tả thị trường (mục 15) |
| Bộ mô phỏng phát lại chuyên dụng | Chiến lược tùy nghi, theo từng quyết định | Gói dữ liệu đi cùng công cụ; với một nhà cung cấp đã kiểm tra, tài liệu nêu dữ liệu tick có spread biến đổi — phạm vi của nhà cung cấp khác có thể khác và phải đọc riêng (mục 11) | Thủ công | Không | Giá khớp do bộ mô phỏng gán, nên không đo chi phí thực thi thực tế — kể cả khi nhà cung cấp cho đặt spread biến đổi và hoa hồng; tài liệu của nhà cung cấp đã kiểm tra không mô tả chính các quy tắc khớp (mục 11); cũng dễ lặp lại một đoạn và làm hỏng mẫu |
| Công cụ phân tích kết quả (nhập báo cáo) | Báo cáo hoàn tất từ bộ kiểm thử hoặc tài khoản | Tệp đầu vào | Tùy công cụ | Không | Không chạy kiểm thử — kế thừa mọi lỗi của nguồn |
| Python (thư viện backtest) | Logic bất kỳ, toàn quyền kiểm soát chia mẫu | Bất kỳ, kèm trách nhiệm về chất lượng | Toàn quyền, theo mọi sơ đồ | Có | Bạn chịu toàn bộ trách nhiệm về tính đúng đắn phương pháp — xem bài về Python trong giao dịch |
Lựa chọn quy về ba câu hỏi. Quy tắc có thể viết thành mã không? Nếu không, bạn cần môi trường phát lại, không phải bộ kiểm thử tự động. Có cần tick thực không? Nếu quy tắc phụ thuộc thứ tự sự kiện trong nến, câu trả lời là có và điều đó quyết định lựa chọn. Có muốn kiểm soát cách chia mẫu không? Nếu có, sớm muộn bạn sẽ cần mã riêng, vì cách chia tích hợp được cố ý giữ đơn giản.
11. Quy trình tái lập và danh sách kiểm tra độ tin cậy
Kiểm thử không thể lặp lại là ý kiến được viết bằng số. Những trường dưới đây là mức tối thiểu để bạn sau sáu tháng, hoặc người khác, tái lập đúng lần chạy. Trường nào không thể khôi phục phải nêu thành giới hạn, không được bỏ qua.
1. Phiên bản quy tắc hoặc mã và ngày cố định. 2. Toàn bộ tham số. 3. Công cụ và ký hiệu chính xác tại nhà môi giới, gồm hậu tố. 4. Nguồn dữ liệu và cách lấy. 5. Khoảng ngày. 6. Múi giờ dữ liệu và giờ máy chủ. 7. Quy ước dấu thời gian nến. 8. Chế độ tạo tick. 9. Mô hình spread. 10. Mức hoa hồng và cách thu. 11. Phí swap nếu giữ vị thế qua thời điểm chuyển ngày. 12. Trượt giá và độ trễ thực thi giả định. 13. Quy tắc khớp lệnh chờ của công cụ — lúc coi lệnh giới hạn đã khớp, giá khớp và cách xử lý bước nhảy giá với lệnh dừng. 14. Vốn ban đầu và đồng tiền tài khoản. 15. Quy tắc quy mô vị thế. 16. Phiên bản nền tảng hoặc thư viện kiểm thử. 17. Chia trong mẫu và ngoài mẫu cùng các mốc ngày. 18. Số biến thể tham số đã kiểm tra. 19. Định danh báo cáo hoặc tệp đầu ra.
Danh sách kiểm tra độ tin cậy của backtest
Mười một câu hỏi áp dụng như nhau cho kết quả của người khác và của chính bạn. “Tôi không biết” được coi là câu trả lời không đạt.
- Có nêu công cụ, ký hiệu chính xác, giai đoạn và nguồn dữ liệu không?
- Có nêu chế độ tạo tick và chế độ ấy có phù hợp thời hạn của chiến lược không?
- Có biết bộ kiểm thử khớp lệnh giới hạn và lệnh dừng ở giá nào — và đã kiểm tra trong tài liệu công cụ thay vì tự giả định chưa?
- Kết quả có tính spread, hoa hồng, phí swap và trượt giá giả định — mỗi khoản có ghi đơn vị không?
- Kết quả có tồn tại khi tăng chi phí một lượng cùng bậc với mức trượt giá trung bình đo trên tài khoản không?
- Với mỗi biến đi vào quyết định, có ghi thời điểm biết giá trị và xác nhận không thời điểm nào muộn hơn quyết định không? Kiểm tra vào lệnh trễ bổ sung kiểm toán này, không thay thế nó
- Có công bố cách chia trong mẫu/ngoài mẫu cùng ngày ranh giới không?
- Có chỉ xem tập ngoài mẫu một lần, sau khi cố định tham số không?
- Có công bố số biến thể tham số đã kiểm tra không?
- Kết quả có đứng vững quanh các tham số đã chọn, thay vì chỉ tại một điểm không?
- Nếu muốn kết luận có tính tổng quát, số giao dịch và độ dài giai đoạn có bao phủ hơn một chế độ thị trường không?
Cách quy trình này hỏng nặng nhất không phải bỏ sót một mục, mà là làm sai thứ tự: có kết quả trước, tìm lý do sau. Thứ tự là điều kiện để quy trình có ý nghĩa, không phải sở thích — không thể xác lập trung thực mục bảy và tám sau khi đã xem kết quả. Viết quy tắc trước kiểm thử, ấn định ngày chia mẫu trước tối ưu hóa và ghi số biến thể trong quá trình thực hiện chỉ tốn khoảng một phần tư giờ; đó là ranh giới giữa xác thực và tìm kiếm biểu đồ đẹp.
Sau khi viết quy trình, bước tiếp theo thường là chuyển từ thao tác nhấp trong bộ kiểm thử sang mã thực hiện lặp lại được và tự theo dõi cách chia mẫu. Từ đây bắt đầu chủ đề của bài riêng — Python trong giao dịch, nơi tái lập môi trường quan trọng không kém tái lập chính bài kiểm thử.
FAQ — kiểm thử chiến lược trước khi ra thị trường
Tài khoản demo có đủ để xác định chiến lược sinh lời không?
Cần bao nhiêu giao dịch để kết quả có ý nghĩa?
Kiểm thử cuốn chiếu có loại bỏ quá khớp không?
Backtest không tính chi phí có nghĩa chính xác là gì?
Phát lại thị trường có thay kiểm thử trên tài khoản vốn thật được không?
Tick thực có giải quyết vấn đề chất lượng backtest không?
Nguồn và tài liệu tham khảo
- MetaQuotes — MetaTrader 5 Help: Real and Generated Ticks, metatrader5.com/en/terminal/help/algotrading/tick_generation (truy cập 22.08.2026) — các chế độ tạo tick và nguyên tắc thay tick thực bị thiếu bằng tick mô hình hóa: “Nếu lịch sử ký hiệu có nến phút nhưng không có dữ liệu tick tương ứng, bộ kiểm thử tạo tick theo chế độ »Mỗi tick«”
- MetaQuotes — MetaTrader 5 Help: Strategy Testing — tester settings, forward testing and delay emulation, metatrader5.com/en/terminal/help/algotrading/testing (truy cập 22.08.2026) — thiết lập Kiểm thử tiến với các phương án Không, 1/2, 1/3, 1/4, Tùy chỉnh và nguyên tắc: “nếu EA dùng lệnh chờ, độ trễ chỉ áp dụng lúc đặt lệnh, không áp dụng lúc thực thi lệnh”
- MetaQuotes — MQL5 Reference: Testing Trading Strategies, mql5.com/en/docs/runtime/testing (truy cập 22.08.2026) — “Trong kiểm thử, spread không được mô hình hóa mà lấy từ dữ liệu lịch sử”
- TradingView — Pine Script User Manual: Repainting, tradingview.com/pine-script-docs/concepts/repainting (truy cập 22.08.2026)
- TradingView — Help Center: Learn to trade on historical data (Replay Trading), tradingview.com/support/solutions/43000691889 (truy cập 22.08.2026) — “Có thể mở vị thế và đặt lệnh giới hạn, dừng và dừng–giới hạn như với nhà môi giới thật”; các thẻ Tổng quan, Hiệu suất, Phân tích giao dịch, Tỷ số rủi ro/hiệu suất và Danh sách giao dịch, trong đó “Hiệu suất và Danh sách giao dịch cũng có thể xuất để phân tích thêm hoặc lưu hồ sơ”
- Spotware — cTrader Algo: Backtest a cBot, help.ctrader.com/ctrader-algo/documentation/cbots/backtest-a-cbot (truy cập 22.08.2026) — bốn chế độ dữ liệu: “Dữ liệu tick từ máy chủ”, “Nến M1 từ máy chủ”, “Nến M1 trong tệp CSV”, “Nến H1 từ máy chủ”; hoa hồng là “mức hoa hồng trên mỗi triệu đơn vị giao dịch”; spread có các phương án “Giá trị cố định” và “Ngẫu nhiên”
- Pardo, R. — The Evaluation and Optimization of Trading Strategies, Wiley, ấn bản thứ 2, 2008 — kiểm thử cuốn chiếu, hiệu quả kiểm thử cuốn chiếu, vùng bằng tham số, phương pháp kiểm thử hệ thống
- Bailey, D.H., Borwein, J.M., López de Prado, M., Zhu, Q.J. — The Probability of Backtest Overfitting, Journal of Computational Finance, 2017 — kiểm định nhiều lần và xác suất kết quả tốt nhất chỉ là sản phẩm của việc tìm kiếm
- Aronson, D.R. — Evidence-Based Technical Analysis, Wiley, 2007 — thiên lệch khai phá dữ liệu, lựa chọn dựa trên kết quả, xác thực thống kê
- Tomasini, E., Jaekle, U. — Trading Systems: A New Approach to System Development and Portfolio Optimisation, Harriman House, 2009 — kiểm thử cuốn chiếu, Monte Carlo, kiểm thử cấp danh mục
- Forex Tester Software — Forex Tester Online: Support Center, help.forextester.com (truy cập 22.08.2026) — phạm vi dữ liệu đi cùng công cụ: “Chúng tôi cung cấp dữ liệu tick và dựng nến từ đó”, “Dữ liệu thay đổi giá theo phút, gồm giá Mở, Cao, Thấp, Đóng và Khối lượng (hoạt động giao dịch). Dữ liệu tick cung cấp chi tiết mọi thay đổi giá của ký hiệu tài chính, cùng spread thả nổi”; tham số chi phí: “Forex Tester Online hỗ trợ kiểm thử chiến lược với spread biến đổi và hoa hồng”. Tài liệu này không mô tả quy tắc bộ mô phỏng gán giá khớp. Địa chỉ đã dẫn trước đây, forextester.com/documentation, trả về trang 404 (kiểm tra 22.08.2026) và đã được thay thế
- Reserve Bank of Australia — Statement on Monetary Policy, February 2019, Box B: The Recent Japanese Yen Flash Event, rba.gov.au/publications/smp/2019/feb/box-b-the-recent-japanese-yen-flash-event.html (nội dung truy cập 22.08.2026) — “Lúc 9:36 sáng AEDT, trong khoảng 30 giây và không có tin tức đáng kể, yen tăng 3 phần trăm so với USD”; “Spread mua–bán cũng mở rộng mạnh từ khoảng 2 pip lên 100–300 pip”; “thanh khoản thị trường thấp theo mùa tại thời điểm này trong ngày và trong năm”
- MetaQuotes — MetaTrader 5 Help: Testing Features, metatrader5.com/en/terminal/help/algotrading/testing_features (truy cập 22.08.2026) — phần Kích hoạt và thực thi lệnh, hai đoạn liên tiếp có phạm vi khác nhau. Đoạn đầu áp dụng cho thị trường tiền tệ: “Với công cụ ngoài sở giao dịch, mọi loại lệnh chờ và SL/TP được kích hoạt bằng giá Bid và Ask. Thực thi theo giá Bid và Ask thị trường hiện tại lúc kích hoạt”. Đoạn thứ hai chỉ nói về công cụ sở giao dịch: “Lệnh giới hạn được khớp tại giá ghi trong lệnh (không trượt giá), còn các loại lệnh khác khớp theo giá Bid và Ask thị trường hiện tại (có thể trượt giá)”. Cùng trang đó nêu về chế độ giản lược: “Trong chế độ kiểm thử »Chỉ giá mở« và »OHLC 1 phút«, lệnh chờ cùng SL và TP được khớp theo giá ghi trong lệnh”
- MetaQuotes — MetaTrader 4 Help: Strategy Tester — Tester Settings, metatrader4.com/en/trading-platform/help/autotrading/tester/tester_parameters (truy cập 22.08.2026) — các chế độ Chỉ giá mở, Điểm kiểm soát và Mỗi tick; chế độ cuối “không chỉ dùng dữ liệu của khung thời gian nhỏ hơn gần nhất mà còn dùng tất cả khung thời gian gần nhất có sẵn để tạo tick”; thanh chất lượng mô hình hóa cho biết khung thời gian đã dùng
- TradingView — Help Center: Strategy produces unrealistic results on non-standard chart types, tradingview.com/support/solutions/43000481029 (truy cập 22.08.2026) — “Do mức giá của biểu đồ phi tiêu chuẩn vốn mang tính tổng hợp, kết quả backtest trên chúng thường không phản ánh điều kiện thị trường thực”
- IG — How does a demo account differ from a live account?, ig.com/uk/help-and-support/articles/687034 (bài ngày 29.05.2026, truy cập 22.08.2026) — mô tả chỉ nói về tài khoản demo của nhà cung cấp này: “Giao dịch trên tài khoản demo không chịu trượt giá, điều chỉnh lãi và cổ tức hay biến động giá ngoài giờ” và “Giao dịch có thể bị từ chối nếu không đủ tiền mở, nhưng khác tài khoản thật, không bao giờ bị từ chối vì quy mô hoặc giá”