Thực hành

Backtesting MT4 và MT5: dữ liệu, chi phí và đồng hồ

Phân biệt tick thật/tạo, độ phủ theo phút và bản ghi. Kiểm tra CopyRates, chi phí, ngoài mẫu và bộ lọc UTC/ICT trước khi tin báo cáo MT4/MT5.

Minh họa biên tập về kiểm tra mô hình và các luồng dữ liệu lịch sử.
Minh họa tạo bằng AI; không phải báo cáo Strategy Tester hoặc kết quả tài khoản thực.

Giao dịch ngoại hối có đòn bẩy và CFD có thể gây thua lỗ nhanh chóng. Nội dung phục vụ học tập, không phải tư vấn đầu tư cá nhân.

Trong bài viết này

Sau khi đọc bài này…

  • Phân biệt độ phủ phút có tick thật và tỷ phần bản ghi thật.
  • Kiểm tra hướng mảng, thời điểm thông tin và chi phí của tester.
  • Thử bộ lọc UTC/ICT đúng biên thay vì dựa tên hàm.

Tra cứu thuật ngữ ngay trong bài

Backtesting (kiểm thử dữ liệu lịch sử) Giá Bid và Ask Spread — chênh lệch Ask và Bid Phí hoa hồng giao dịch Drawdown (sụt giảm từ đỉnh) Tỷ lệ thắng

Backtest có lãi vẫn có thể khác xa giao dịch thật khi dữ liệu, mô hình thực hiện hoặc cách chọn tham số thiếu thực tế. Bài hướng dẫn các chế độ MT4/MT5, chi phí và kiểm tra ngoài mẫu để chẩn đoán khác biệt.

MT4 và MT5 Strategy Tester khác gì?

Strategy Tester chạy EA trên lịch sử ở cả hai nền tảng. MT5 hỗ trợ nhiều mã và phân phối các lượt tối ưu giữa agent, không nghĩa một lần chạy EA tự dùng mọi lõi. MT4 cũng có tối ưu di truyền nhưng tester chuẩn không thực hiện lệnh trên mã khác mã đang thử. Cộng báo cáo riêng không tái tạo vốn chung danh mục. Lưu build, EA biên dịch, đầu vào, đặc tả mã và giả định tài khoản. Dữ liệu MT4 tải từ History Center có thể khác lịch sử server broker. Độ dài lịch sử hoặc nhãn khung không tự xác định phù hợp. Xem MT4 cơ bản và đặc điểm MT5.

Nhiều tick không nghĩa nhiều phút có tick

Trước khi so phần trăm chất lượng dữ liệu, xác định đang đếm khoảng thời gian hay từng bản ghi.

Cuộn ngang để xem trọn sơ đồ →

Cuộn ngang để xem hết sơ đồ.

Nhiều tick không nghĩa nhiều phút có tickMẫu có ba nến phút. Phút đầu 10 tick thật,phút hai 10,phút ba 0; giả định tạo 80 bản ghi ở phút ba. Thanh chung thang10,10,80. Phút có tick thật 2/3≈66.67%,bản ghi thật 20/100=20%. Hai mẫu số khác nhau,không phải Modelling Quality hoặc kết quả test thực.HAI MẪU SỐ KHÁC NHAUBa phút giả định • số bản ghiPhút 1 • thật10Phút 2 • thật10Phút 3 • tạo ra80020406080Phút có tick thật: 2/3Độ phủ phút ≈66.67%Bản ghi thật: (10+10)/100Tỷ phần bản ghi =20%

Giả định: Ba phút dài bằng nhau, mỗi phút có nến một phút. 10,10 và 80 là toàn bộ mẫu có kiểm soát; phút ba chỉ có bản ghi tạo ra. Không đánh giá một feed hoặc backtest thực.

Mẫu có ba nến phút đầy đủ. Hai phút có 10 tick thật mỗi phút. Phút thứ ba có nến nhưng không tick thật; ví dụ tạo 80 bản ghi tại đây. Mẫu cuối có 100 bản ghi.

Độ phủ phút có tick thật = 2/3≈66.67%; tỷ phần bản ghi thật = 20/100=20%. Thêm nhiều bản ghi trong cùng một phút đổi mẫu số thứ hai nhưng không thêm phút lịch sử. Hai tỷ lệ không thay thế nhau và không chứng minh lợi thế chiến lược.

MetaQuotes — tick thật và tick được tạo mô tả tạo tick khi có nến phút nhưng không có tick tương ứng. Con số 80 được đặt cho bài toán, không phải giá trị báo cáo tester. Cả hai thước đo là của bài, không định nghĩa trường Modelling Quality.

Độ phủ thời gian và tỷ phần bản ghi trả lời hai câu hỏi khác nhau.

Chế độ mô phỏng và dữ liệu lịch sử

MT4 có Open prices only, Control points và Every tick: dùng lịch sử nến và đường giá được tạo; Control points là ước lượng sơ bộ. MT5 thêm tick broker ghi lại và 1 minute OHLC. Stop trong nến có thể quan trọng dù tín hiệu ngày; quy tắc chỉ hoạt động lúc mở nến có thể đơn giản hóa sau kiểm tra giới hạn. Trong MT5, nến phút thiếu tick thật có thể được điền tick tạo. Spread tick thật có thể đổi trong phút; tick tạo dùng spread gán cho nến phút.

Kiểm tra độ phủ đúng mã và kỳ. Nhập tick bên ngoài vào MT4 cần quy trình tương thích, có thể cần file test tạo riêng/phần mềm khác; nến HST không tự bảo đảm mô phỏng tick thật. Phần trăm chất lượng không chứng minh thực hiện thực tế. MT5 cần kiểm tra tick thật và phần thay bằng tick tạo.

Spread, hoa hồng, swap và trễ

Kiểm tra spread, hoa hồng, tài trợ và độ trễ theo sản phẩm/tài khoản. MT4 chuẩn cộng spread đã chọn vào lịch sử Bid; mặc định lấy spread đầu lần test, không tái tạo toàn đường spread lịch sử. EUR/USD giả định năm chữ số: 12 point×0.00001=1.2 pip với pip 0.0001. MT5 cho phí tài khoản/tùy chỉnh: xem thu lúc vào, ra hay cả hai và đối chiếu một lệnh khép kín. Chế độ lợi nhuận theo pip bỏ hoa hồng, swap và kiểm soát ký quỹ. Mô phỏng trễ là kịch bản, không tái tạo mọi thanh khoản/mức khớp.

Ba bẫy cần phân biệt

Look-ahead bias là dùng thông tin chưa có tại thời điểm quyết định. Tham chiếu timeseries shift 0 chỉ nến hiện tại, còn thay đổi trong mô phỏng. Lúc 10:15, đỉnh đã đạt của nến H1 bắt đầu 10:00 có sẵn, đỉnh cuối giờ chưa có. Quy tắc dùng nến giờ đóng phải đợi. Không đổi mọi 0 thành 1: phát hiện nến mới hoặc quy tắc giá hiện tại đúng cũng bị đổi. Kiểm tra timestamp, số phần tử trả về và hướng đánh chỉ số từng đầu vào.

Giả định CopyRates thành công, bốn close từ cũ đến hiện tại là 100,101,102,103. Mảng động as_series=false: rates[1].close là 101, close cuối đã đóng là rates[2].close=102. Với as_series=true, rates[1].close là 102. Quy tắc “close cuối đã đóng>101.5” đúng, nhưng đọc nhầm rates[1] ở mảng thường sẽ loại. Đây là nhầm nến cũ, chưa phải bằng chứng dùng tương lai. Không đánh chỉ số như đã nhận đủ bốn khi hàm trả ít hơn.

Overfitting có thể xảy ra khi tìm lặp chọn nhiễu thuận lợi. Tỷ lệ thắng, profit factor cao hoặc drawdown thấp riêng lẻ không chứng minh lỗi đó. Survivorship bias là loại khỏi tập thử các mã/tài khoản đã có trong quá khứ nhưng sau biến mất. Dựng tập theo những gì có ở từng ngày; không có mức phóng đại 30–50% phổ quát được xác minh.

Đọc báo cáo và kiểm tra walk-forward

Đọc kết quả ròng, số giao dịch, drawdown và giả định phí cùng nhau. Mô hình gốc tài khoản PLN ban đầu 10.000, lãi đã đóng 500 cho balance 10.500; lỗ mở 700 còn equity 9.800 trước phí/thay đổi khác. Balance giấu phần phơi nhiễm đó. Ngưỡng profit factor hoặc Sharpe không chứng nhận chiến lược. Kiểm tra độ nhạy, tách dữ liệu đánh giá thật sự và lưu báo cáo/nhật ký.

Walk-forward đánh giá các bộ tham số đã đóng băng lần lượt trên kỳ sau. So lợi suất năm hóa cùng cơ sở và chuỗi giao dịch ngoài mẫu theo thời gian. WFE riêng không chứng minh vững hoặc nhận diện curve-fit; lợi suất trong mẫu 0/âm còn làm khó diễn giải. Xem phân tích walk-forward.

Ngoài mẫu dùng quy tắc cố định trên dữ liệu không tham gia lần tìm tham số tương ứng. Đó vẫn là mô phỏng với giả định dữ liệu/thực hiện, không là kết quả tài khoản thật tương lai đã xác minh.

Giới hạn và công cụ thay thế

Strategy Tester đánh giá quy tắc được mã hóa theo dữ liệu/mô hình của nó. Phán đoán thủ công cần tiêu chí ghi lại và quy trình replay trước khi so, không tự là không thể kiểm thử. Chọn công cụ khác nếu đầu vào/cơ chế cần thiết không biểu diễn được, kiểm tra tài liệu và điều khoản dữ liệu. So sánh Forex Tester xem quy trình replay khác; cách backtest đúng trình bày phương pháp chung, và thư viện thực hành mở rộng bối cảnh.

TimeGMT của tester xác nhận bộ lọc UTC không?

Trong tester MT5, TimeGMT bằng TimeTradeServer mô phỏng. So hai hàm trong cùng test không khôi phục lịch chênh server với UTC. Nhận diện từng trục giờ, kiểm tra đổi trên đầu vào rõ ràng. “Luôn trừ hai giờ” không ghi được thay đổi giờ server.

Hai đồng hồ bằng nhau chưa xác nhận offset

Cuộn ngang để xem hết sơ đồ.

TimeGMT tester xác nhận bộ lọc UTC không?Một thời điểm giả định: 12:00 UTC và 14:00 theo UTC+2 đã khai báo. Bộ lọc 12:00–13:00 UTC.12:00 UTClúc quyết địnhUTC + 2giả định rõ ràng14:00giờ serverLọc theo UTC12:00–13:00
Hai hàm giờ bằng nhau trong tester không là bảng offset lịch sử của broker.

Mô hình cho phép từ 12:00 UTC gồm đầu đến 13:00 không gồm cuối. Quyết định 12:00 UTC nằm trong cửa sổ. Với UTC+2 đã khai báo, cùng lúc đọc 14:00; coi 14 là UTC sẽ loại nhầm. +2 chỉ thuộc ví dụ này. Thử đúng biên cuối, đổi ngày và từng chuyển offset của lịch thực được ghi rõ.

Hai đồng hồ tester bằng nhau chứng minh bộ lọc khi chạy thật không?

Không. Hai hàm bằng nhau trong mô phỏng không chứng minh bộ lọc ngoài đời tương đương. Dùng UTC rõ ràng, offset theo ngày có tài liệu và thử biên khoảng. Tên hàm không xác định múi giờ broker.

Kiểm tra CSV trước lần chạy sau

Chuẩn bị năm cột timestamp,open,high,low,close với offset rõ. Ở công cụ CSV kiểm tra độ phủ, nhập thời điểm mở nến đầu/cuối dự kiến và khoảng nến. Mẫu M1 tổng hợp 08:00–08:11 có 12 dòng nhưng chỉ 8 timestamp hợp lệ khác nhau: 4 vị trí trống, 2 dòng lặp và 1 nhóm OHLC xung đột. Lưu báo cáo, xét chỗ thiếu theo phiên sản phẩm. OHLC đủ không chứng minh đủ tick ghi thật; công cụ không chèn giá hoặc xác nhận mô hình thực hiện tester.

Kiểm tra ICT tách khỏi đồng hồ server

Mô hình thời gian độc lập, không offset của broker thực: 12:00 UTC=19:00 ICT, còn server UTC+2 đọc 14:00. Cửa sổ 12:00≤UTC<13:00 tương ứng 19:00≤ICT<20:00. Đúng biên 20:00 ICT phải loại; dùng≤ ở cả hai đầu sẽ nhận thừa quyết định tại biên cuối. Thử tối thiểu 18:59, 19:00, 19:59, 20:00 ICT rồi lưu kết quả. Offset server có thể đổi theo lịch riêng; ICT vẫn UTC+7.

Bốn phép thử biên giờ ICTGiả định bộ lọc 12:00≤UTC<13:00; ICT = UTC+7. Đây không phải offset server broker.PHÉP TÍNH GIẢ ĐỊNH18:59 ICT → 11:59 UTCLoại19:00 ICT → 12:00 UTCNhận19:59 ICT → 12:59 UTCNhận20:00 ICT → 13:00 UTCLoại
Bốn phép thử biên giờ ICT. Giả định bộ lọc 12:00≤UTC<13:00; ICT = UTC+7. Đây không phải offset server broker.

Đổi đúng trục giờ và đúng dấu so sánh; hai hàm đồng hồ bằng nhau chưa kiểm tra được việc này.

Trên màn hình nhỏ, bạn có thể cuộn ngang hoặc phóng to sơ đồ. Các giá trị và kết luận cũng có ở phần văn bản bên dưới.

18:59 ICT → 11:59 UTC
Loại – Chưa đến biên đầu.
19:00 ICT → 12:00 UTC
Nhận – Biên đầu được bao gồm.
19:59 ICT → 12:59 UTC
Nhận – Vẫn trước biên cuối.
20:00 ICT → 13:00 UTC
Loại – Biên cuối không bao gồm.

Bước thực hành tiếp theo

  1. Chọn dữ liệu có nguồn cho đúng mã/ngày. MT4 kiểm tra nến,mô phỏng và file FXT ngoài; MT5 kiểm tra tick thật và thay thế. Lưu nguồn,múi giờ,kỳ thiếu và thiết lập; tên chế độ không tự xác nhận phù hợp.
  2. Đặt phí và trễ theo môi trường thử. Dùng giả định tài khoản có tài liệu rồi thử điều kiện xấu hơn; không áp 7 USD/lot hoặc phạt pip cố định cho mọi broker.
  3. Có thể dùng bốn năm chọn tham số rồi năm sau thử cố định nếu hợp chiến lược. So năm hóa cùng cơ sở, không chẩn đoán curve-fit chỉ vì WFE<0.5. Xem số mẫu,chế độ,phí và giữ đánh giá cuối chưa đụng tới.
  4. Rà lúc mỗi giá/chỉ báo có sẵn. Chỉ đổi index 0 sang nến đã đóng nếu chiến lược cần vậy. So timestamp tín hiệu và lệnh; thay đổi kết quả 30% không tự chứng minh look-ahead.

Khám phá dữ liệu nghiên cứu nguồn

Nghiên cứu liên kết trình bày 2.560 công bố EUR/USD và 49 ngày trong tuần không công bố trong 2016–2025. Nhóm biên tập đối chiếu với 49 ngày TARGET đóng theo lịch, không thấy ngày mở dự kiến bị thiếu trong mẫu. Xem dữ liệu, mã và giới hạn tại nghiên cứu; không coi mọi khoảng trống dữ liệu tester đều là ngày nghỉ.

Nghiên cứu: tỷ giá không được công bố khác dữ liệu thiếu, ECB 2016–2025 →

Kiểm tra mức độ hiểu bài

Bài tập: khoảng 2 phút.

Bộ tạo thêm bản ghi trong cùng phút thứ ba. Điều nào giữ nguyên trong mô hình?

Xem đáp án và giải thích

Không thêm phút có tick thật. Thước đo này đếm phút, không đếm bản ghi.

Câu hỏi khác

Modelling Quality 99% khác 90% thế nào?
Trường MT4 mô tả cách tạo tick từ lịch sử, không là phần trăm dự báo đúng hoặc lợi nhuận tương lai. Hiển thị 99% của công cụ ngoài cần kiểm tra quy trình riêng. Xem đường trong nến, phía giá và phí. MT5 tick thật cũng cần kiểm tra phút bị thay tick tạo.
Thiết lập MT5 tester theo thứ tự nào?
Chọn EA biên dịch,lưu đầu vào/build; chọn mã,khung,ngày,vốn/tiền tài khoản và mô hình ký quỹ. Chọn tick phù hợp,kiểm phí/swap/trễ. Chạy đơn tắt tối ưu trước,đối chiếu thao tác,lưu báo cáo/nhật ký. Không có tối thiểu năm năm hoặc thời gian tải cố định cho mọi trường hợp.
Tránh look-ahead trong MQL5 thế nào?
Kiểm thông tin đã có khi quyết định. Shift 0 có thể hợp lệ cho giá hiện tại,chưa phải đỉnh/close cuối nến. Quy tắc nến đóng cần timestamp nến đóng. CopyRates start_pos khác index mảng đích: xem as_series,số phần tử và giờ nến. Demo khác backtest không tự chẩn đoán rò rỉ.
Backtest thủ công hay tự động?
Replay thủ công có thể ghi tiêu chí chủ quan nhưng xem lặp dễ biết trước giá sau. Mã tự động tái tạo quy tắc nếu dữ liệu,phiên bản,thiết lập/ngẫu nhiên được kiểm soát. Nhiều giao dịch không tạo độc lập thống kê. So cùng tín hiệu/phí; không có quy tắc 100 lệnh hoặc số giờ làm chuẩn phổ quát.
TimeGMT bằng giờ server xác nhận bộ lọc UTC chưa?
Chưa. Trong tester MT5 chúng được làm bằng nhau. Cần UTC và offset theo ngày rõ ràng. Với mô hình cửa sổ 12:00–13:00 UTC, 19:00 ICT nhận, 20:00 ICT loại; chưa chạy trên broker thật hoặc kiểm lịch offset thực.

Nguồn và kiểm chứng

  1. www.metatrader4.com

    Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.

  2. docs.mql4.com

    Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.

  3. www.metatrader5.com

    Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.

  4. www.metatrader5.com

    Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.

  5. www.mql5.com

    Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.

  6. www.mql5.com

    Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.

Các phép tính dùng giả định được nêu rõ. Chúng không thay thế dữ liệu thị trường hiện tại hoặc điều khoản của nhà cung cấp.

Về tác giả

Jarosław Wasiński là biên tập viên và nhà phân tích thị trường tại Ba Lan. Ông sáng lập MyBank.pl năm 2004 và theo dõi thị trường ngoại hối từ năm 2007.