Xuất dữ liệu lịch sử từ MT4/MT5 ra CSV

Hướng dẫn thao tác · 6 phút đọc

Sổ Lệnh đọc dữ liệu nến từ file trên máy bạn, không tải sẵn dữ liệu về máy chủ. Bạn tự xuất từ MetaTrader của chính mình, nên dữ liệu khớp đúng với sàn bạn đang dùng — kể cả spread. Bài này chỉ cách lấy file đó.

Cách nhanh: xuất nhiều cặp một lượt bằng script

Nếu bạn cần vài cặp, đừng bấm tay từng cái. Trong bản tải về có sẵn file mt5/XuatLichSu.mq5 làm việc đó một lượt.

  1. Mở MT5, vào File → Open Data Folder
  2. Đi tiếp vào thư mục MQL5\Scripts
  3. Chép file XuatLichSu.mq5 vào đó
  4. Quay lại MT5, cửa sổ Navigator → chuột phải → Refresh
  5. Mở mục Scripts, kéo XuatLichSu thả vào biểu đồ bất kỳ
  6. Bảng tham số hiện ra — điền rồi bấm OK

Các tham số và ý nghĩa:

Tham sốMặc địnhNên đặt gì
InpSymbolsEURUSD,GBPUSD,…Danh sách cặp, cách nhau bằng dấu phẩy
InpTimeframePERIOD_M1Để M1. Lý do ở mục dưới
InpYears2Số năm lịch sử. Bắt đầu bằng 1 cho nhẹ
InpFolderSoLenhThư mục con trong MQL5\Files
InpUseSuffixbậtTự dò hậu tố của sàn, ví dụ EURUSD.pro hay EURUSDm

File ra nằm ở MQL5\Files\SoLenh\, tên dạng GBPUSD_M1.csv. Chạy xong MT5 hiện hộp thoại báo số file và số nến đã xuất.

Cách thủ công trên MT5

  1. View → Symbols (phím tắt Ctrl+U)
  2. Tìm và chọn cặp tiền trong cây bên trái
  3. Sang thẻ Bars
  4. Chọn khung thời gian và khoảng ngày, bấm Request
  5. Bấm Export, lưu file

Cách thủ công trên MT4

Tools → History Center (phím tắt F2), chọn cặp, chọn khung thời gian, bấm Export.

File MT4 kiểu cũ không có dòng tiêu đề và phân cách bằng dấu phẩy. Bộ đọc vẫn hiểu, nhưng nó không có cột spread — hệ thống sẽ dùng spread bạn khai trong Cài đặt thay vì spread thật của từng cây nến.

Vì sao nên xuất khung M1

Vì engine luôn tua theo khung gốc của file, còn biểu đồ thì đổi khung được. Nạp file M1 nghĩa là bạn xem phân tích trên H4 hay D1 tuỳ thích, nhưng lệnh được kiểm tra chạm cắt lỗ / chốt lời với độ chính xác từng phút — đúng cách thị trường thật vận hành.

Nạp file M5 thì mất khung M1, và mọi lệnh chỉ được kiểm tra năm phút một lần. Với lệnh có cắt lỗ hẹp, khác biệt này không nhỏ.

Bù lại, file M1 nặng hơn nhiều. Xem mục cuối bài về giới hạn dung lượng.

Đặt tên file cho đúng

Đặt dạng GBPUSD_M5_....csv thì hệ thống tự nhận ra cặp tiền và khung thời gian, khỏi phải chọn tay. Bộ đọc chấp nhận:

  • File MT5 có dòng tiêu đề <DATE> <TIME> <OPEN> …, phân cách bằng tab
  • File MT4 kiểu cũ, không tiêu đề, phân cách bằng dấu phẩy, tên dạng EURUSD60.csv
  • File chung có tiêu đề Date,Open,High,Low,Close,Volume với ngày giờ gộp một cột
  • Phân cách bằng tab, dấu phẩy, chấm phẩy hoặc khoảng trắng — tự dò

Ba lỗi hay gặp

Xuất ra ít nến hơn mong đợi

MT5 chỉ tải lịch sử về máy khi cần. Lần chạy đầu thường thiếu vì terminal đang tải dở. Cách xử lý: mở biểu đồ cặp đó, chuyển sang khung M1, kéo lui về quá khứ cho MT5 tải đủ, rồi xuất lại. Với script thì cứ chạy lại lần hai — lần đầu nó đã kích cho MT5 bắt đầu tải.

Ngoài ra nhiều sàn chỉ giữ lịch sử M1 vài năm gần nhất. Đặt InpYears là 10 không có nghĩa bạn sẽ nhận được 10 năm.

Giờ trong file lệch với giờ Việt Nam

Mốc thời gian trong file MT5 là giờ máy chủ của sàn, thường UTC+2 hoặc UTC+3 tuỳ mùa. Hệ thống hiển thị đúng con số trong file, không tự quy đổi — vì quy đổi sai còn tệ hơn không quy đổi.

Chỗ duy nhất cần biết độ lệch là phần phân loại phiên Á / Âu / Mỹ trên trang thống kê. Khai độ lệch ở Cài đặt → Lệch giờ sàn so với UTC. Không biết sàn mình đặt múi nào thì mở một biểu đồ M1 và so giờ cây nến mới nhất với giờ thật.

Nạp một lần rồi thôi

Bộ dữ liệu bạn nạp nằm lại trong trình duyệt: lần sau mở trang là có sẵn, không phải quay lại MT5. Mỗi cặp giữ riêng một bộ, đổi qua lại trong hộp thoại Nạp dữ liệu…. Một năm M1 của một cặp khoảng 370.000 nến, file 40–45 MB — cỡ đó vẫn giữ được bình thường.

Hai ngoại lệ. Thứ nhất, trình duyệt ở chế độ ẩn danh thường không cho lưu dữ liệu lớn; lúc đó trang chỉ giữ được một bộ và có thể mất khi đóng tab — hệ thống nói rõ ra chứ không im lặng. Thứ hai, dọn dẹp bộ nhớ trình duyệt sẽ xoá cả dữ liệu nến, và lúc đó phải nạp lại từ file.

Xuất nhiều cặp một lượt thì chọn hết số file đó trong một lần, hoặc kéo thả cả nhóm vào biểu đồ. Không phải nạp từng file một.

Về bản quyền dữ liệu

Dữ liệu bạn xuất từ terminal của chính bạn, dùng cho việc của chính bạn, ở ngay trên máy bạn — không có phát tán lại. Đó là lý do công cụ này được thiết kế đọc file từ máy người dùng thay vì phục vụ sẵn kho dữ liệu. Nếu bạn định chia sẻ lại file dữ liệu cho người khác, hãy xem điều khoản sử dụng của sàn trước.

Câu hỏi hay gặp

Nên xuất khung thời gian nào từ MT5?
M1. Engine luôn tua theo khung gốc của file, còn biểu đồ thì đổi khung được — nạp file M1 nghĩa là bạn xem trên H4 hay D1 tuỳ thích mà lệnh vẫn được kiểm tra chạm cắt lỗ / chốt lời với độ chính xác từng phút. Nạp file M5 thì mất khung M1 và mọi lệnh chỉ được kiểm tra năm phút một lần.
Vì sao xuất ra ít nến hơn khoảng thời gian đã chọn?
MT5 chỉ tải lịch sử về máy khi cần, nên lần chạy đầu thường thiếu vì terminal đang tải dở. Mở biểu đồ cặp đó, chuyển sang M1, kéo lui về quá khứ cho tải đủ rồi xuất lại; với script thì cứ chạy lại lần hai. Ngoài ra nhiều sàn chỉ giữ lịch sử M1 vài năm gần nhất, nên đặt số năm lớn không có nghĩa bạn sẽ nhận được chừng đó.
Giờ trong file lệch với giờ Việt Nam thì sửa ở đâu?
Mốc thời gian trong file là giờ máy chủ của sàn, thường UTC+2 hoặc UTC+3 tuỳ mùa. Hệ thống hiển thị đúng con số trong file chứ không tự quy đổi, vì quy đổi sai còn tệ hơn không quy đổi. Chỗ duy nhất cần biết độ lệch là phần phân loại phiên Á / Âu / Mỹ — khai ở Cài đặt, mục “Lệch giờ sàn so với UTC”.
File MT4 kiểu cũ có dùng được không?
Được. Bộ đọc hiểu file MT4 không có dòng tiêu đề, phân cách bằng dấu phẩy. Nhưng file đó không có cột spread, nên hệ thống sẽ dùng spread bạn khai trong Cài đặt thay vì spread thật của từng cây nến.

Chưa có file cũng bấm được ngay

Bộ dữ liệu mẫu GBPUSD M5 đã nạp sẵn. Xuất file của bạn lúc nào cũng được, nạp vào bằng nút Nạp dữ liệu… ở màn backtest.

Mở màn backtest →

Đọc tiếp: Backtest là gì · Đọc chỉ số hiệu suất