Trong bài viết này
Sau khi đọc bài này…
- Phân biệt thiếu dữ liệu với điều kiện vào lệnh không thỏa.
- Tính khối lượng, spread và kết quả mẫu với đúng đơn vị.
- Lập kiểm tra trạng thái trước khi gửi lại lệnh sau lỗi.
Tra cứu thuật ngữ ngay trong bài
SMA — trung bình động đơn giản Kế hoạch giao dịch Backtesting (kiểm thử dữ liệu lịch sử) Giá trị danh nghĩa vị thế Tài khoản mô phỏng (demo) Kỳ vọng kết quả (expectancy)Dự án thuật toán đầu tiên có thể chỉ ghi tín hiệu, tính khối lượng hoặc kiểm tra phơi nhiễm mà không đặt giao dịch. Chọn một thao tác có kết quả bạn giải thích và kiểm chứng được. Xác định dữ liệu, quy tắc và hành vi chương trình trước khi cấp quyền đặt lệnh; tự động hóa không chứng minh chiến lược có lãi.
Giao dịch thuật toán là gì và không phải là gì?
Tách chọn tín hiệu, thực hiện quyết định đã có, quản lý vị thế và báo cáo. Chương trình chia nhỏ lệnh đã quyết định không cùng mục đích với robot tự chọn điểm vào. Báo cáo BIS 2020 về thuật toán thực hiện FX bàn về cấu trúc, thực hiện và rủi ro, không chứng minh robot bán lẻ sinh lời. Trong báo cáo đó EA là execution algorithm; MetaTrader dùng EA cho Expert Advisor.
Ghi mã giao dịch, nguồn dữ liệu, giờ hoạt động, thời điểm quyết định, quy tắc vào/thoát, khối lượng, giới hạn phơi nhiễm và hành vi khi đã có vị thế. Các đầu vào và giám sát vẫn là quyết định con người. Tự động hóa có thể ngăn một lỗi tay nhưng tạo lỗi khác, như gửi trùng yêu cầu sau khởi động lại. Kiểm tra tính đúng của chương trình riêng với kết quả kinh tế của quy tắc.
Chọn công cụ theo công việc
Tác vụ thông báo có thể chỉ cần alert. Alerts gốc của MT5 hỗ trợ so sánh giá, khối lượng giao dịch gần nhất hoặc thời gian, không phải trình soạn tùy ý điều kiện trung bình động kết hợp ATR. Logic riêng có thể cần indicator hoặc EA. MQL5 chạy trong MT5; Python có thể phân tích dữ liệu hoặc dùng kết nối được tài liệu hỗ trợ. Không có lộ trình bắt buộc alert → MQL5 → Python → FIX.
Chọn môi trường phù hợp tài khoản, dữ liệu và thao tác. Không giả định mọi sản phẩm broker đều có cùng số dòng code, thời gian xây dựng, độ trễ hoặc quyền API. EA bằng MQL5 giải thích hành vi chương trình trong nền tảng; backtest Forex bằng Python là quy trình nghiên cứu riêng. Không bắt buộc viết lại cùng ý tưởng bằng cả hai.
Không đoán giá thứ ba bị thiếu
Số bản ghi yêu cầu là một phần quy tắc. Hai giá hợp lệ không xác định trung bình ba giá.
Vuốt ngang để xem toàn bộ sơ đồ →
Cuộn ngang để xem hết sơ đồ.
Mô hình giả định cho một công cụ và khung. Các bản ghi là nến lịch sử đã đóng; x là giá cũ thiếu, không phải tương lai. Ba giá từ cũ đến mới: x, 100, 102; trọng số bằng 1/3, không làm tròn trước khi so.
Nếu x=98, trung bình 100; nếu x=106, trung bình 308/3 ≈ 102,667. Điều kiện giá cuối 102 lớn hơn trung bình có hai kết quả khác nhau. Trung bình hai giá biết là 101 nhưng đổi quy tắc; điền 0 tạo dữ liệu giả. Ghi thiếu dữ liệu và chưa đưa quyết định; nếu tải lại thành công, kiểm tra đúng các nến dự định. CopyRates trả số bản ghi thực có; bài này không kiểm tra chiều chỉ số mảng.
Kỹ năng và ngôn ngữ
Cần lập trình, xử lý dữ liệu, tính khối lượng rủi ro và tư duy thống kê đủ cho chức năng đang dùng. Đường vốn ngắn chỉ mô tả mẫu đó, không chứng minh lợi nhuận tương lai. Lập quy trình kiểm định với dữ liệu phù hợp, đánh giá ngoài mẫu và kiểm tra thực hiện demo. MQL5 kết nối qua MT5; Python có thể dùng terminal hoặc giao diện khác được tài liệu hỗ trợ. Độ trễ đầu cuối phụ thuộc code, hosting, mạng và broker, không được bảo đảm ở mức một chữ số mili giây.
Ví dụ từ quy tắc đến backtest
Với crossover EUR/USD H1 giả định, định nghĩa chính xác EMA, SMA, ATR, lúc có tín hiệu, stop và target. So quyết định tay với tự động trên cùng dữ liệu và ngày trước. Test tự động năm năm không nhất thiết giống mẫu tay sáu tháng vì giai đoạn và nguồn khác. Đối chiếu sai khác cùng kỳ, tính chi phí rồi đánh giá quy tắc đã cố định trên dữ liệu riêng.
Đặc tả ngoại tuyến có thể dùng EMA 21, SMA 55 và khoảng ATR chọn cho bài tập. Ghi có dùng H1 đã đóng hay không, và khi nào được đánh giá. Ban đầu chỉ ghi tín hiệu, chưa đặt lệnh. Kiểm tra có tín hiệu, không có tín hiệu, chuyển nến, thiếu lịch sử và vị thế đã tồn tại. Thiếu đầu vào không phải kết quả hợp lệ “không vào”.
Mô hình khối lượng riêng: equity 10.000 USD, ngân sách lỗ do giá ban đầu 0,5%, stop 25 pip, pip EUR/USD 0,0001. Hợp đồng 100.000 EUR/lot cho giá trị 10 USD/pip/lot. Ngân sách 50 USD; khối lượng trước phí = 50/(25×10)=0,20 lot, danh nghĩa 20.000 EUR. Các tham số giả định không phải khuyến nghị rủi ro phổ quát; danh nghĩa, margin và lỗ dự kiến là ba đại lượng khác nhau.
Tính hoa hồng và giả định thực hiện trước khi làm tròn xuống bước khối lượng hợp đồng. Stop thường có thể khớp khác khi gap; 50 USD không phải lỗ tối đa vô điều kiện. So cùng quy tắc, dữ liệu và từng giao dịch, không chỉ lãi cuối giống nhau. Giữ chọn tham số riêng với đánh giá; kết quả tốt trên mẫu dùng để chọn có thể là thiên lệch lựa chọn.
Chương trình có thể tạo spread giả bằng trộn báo giá đúng nhưng khác thời điểm. Luồng giả định: t1 Bid/Ask 1,1000/1,1002; t2 là 1,1010/1,1012. Mỗi spread 2 pip nếu pip 0,0001. Lấy Ask t1 trừ Bid t2 cho (1,1002−1,1010)/0,0001=−8 pip. Bộ lọc spread< 2,5 sẽ nhận nhầm số ghép đó; không phải spread âm được quan sát ngoài thị trường.
SymbolInfoTick trả giá hiện tại và thời điểm cập nhật trong một MqlTick. Kiểm tra thành công rồi tính từ các trường của cấu trúc đã giữ. Thêm ca cố ý trộn hai báo giá riêng đều hợp lệ. Báo giá nhất quán chỉ là kiểm tra dữ liệu, không bảo đảm thanh khoản hay giá khớp tương lai.
Tách kiểm tra code, dữ liệu và kết quả kinh tế
Dự án có thể sai ở quy tắc, code, dữ liệu thiếu, thực hiện hoặc vận hành. Không xếp mọi thất bại thành hai nguyên nhân và bỏ qua lỗi lập trình. Sau phản hồi lệnh không rõ, kiểm tra orders, deals và positions thực trước khi gửi lại. OrderSend trả true chưa chứng minh đã khớp; xem retcode và trạng thái giao dịch. Lưu phiên bản quy tắc, thời điểm thông tin và lý do hành động hoặc không hành động.
Backtest cần dữ liệu đúng sản phẩm, chi phí và thứ tự thời gian. Lưu mọi biến thể đã thử; tách dữ liệu phát triển và đánh giá. Sửa quy tắc sau khi xem kết quả ngoài mẫu tức dùng kỳ đó để phát triển. Tìm kiếm lợi thế bàn cách đánh giá; giữ báo cáo thất bại và lý do đổi, không chỉ đường vốn đẹp nhất.
Tỷ lệ thắng, kỳ vọng và profit factor trả lời câu hỏi khác nhau. Mẫu R cố định giả định 100 lệnh: 40 thắng+2R, 60 thua−1R. Trung bình(80−60)/100=+0,2R trước phí; profit factor 80/60≈1,33. Đây là đầu vào chọn để tính, không phải chiến lược đã test hoặc bằng chứng mẫu tới có cùng kết quả.
Lập bảng chi phí dữ liệu, hosting, giấy phép và thời gian dù ngôn ngữ không thu phí giấy phép. Giá dịch vụ, quyền truy cập và phục hồi phụ thuộc cấu hình. Kiểm tra khởi động lại và mất kết nối; VPS không loại mọi lỗi hoặc trách nhiệm giám sát.
Bốn trạng thái cần ghi khác nhau
Không gộp thiếu dữ liệu, không có tín hiệu và chưa biết trạng thái vào cùng một nhãn “không giao dịch”.
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.
- Đủ dữ liệu, điều kiện sai
- Không có tín hiệu – Ghi kết quả hợp lệ; không sửa dữ liệu để tạo lệnh.
- Thiếu bản ghi
- Chưa đánh giá – Tải đúng lịch sử, kiểm tra đủ số và thời điểm.
- Phản hồi lệnh không rõ
- Chưa biết trạng thái – Đối chiếu orders/deals/positions trước khi gửi lại.
- Đủ dữ liệu, có tín hiệu
- Chưa đồng nghĩa đã khớp – Nếu được phép đặt lệnh, vẫn cần kiểm tra thực hiện.
Bài thực hành tiếp theo
- Chọn một thao tác, viết đặc tả dữ liệu, thời gian, quy tắc, kết quả và điều kiện phải dừng đánh giá. Nhật ký tín hiệu đáng tin có thể là dự án đầu hoàn chỉnh.
- Kiểm tra đủ bản ghi và nhất quán báo giá trên ca nhỏ; tách nến đã đóng với nến hiện tại, giữ thời điểm đầu vào.
- Nếu cần lệnh, dùng môi trường được xác định rõ là demo; thử chấp nhận, từ chối, khởi động lại và phản hồi không rõ. Xem trạng thái thực trước khi gửi lại. Hạn lịch không buộc chuyển sang tiền thật.
- Cố định quy tắc để đánh giá riêng với chi phí/dữ liệu phù hợp. So cùng ngày và từng quyết định; điều tra sai khác đáng kể, không đặt ngưỡng phần trăm chung tùy tiện.
- Viết quy trình tạm dừng, khởi động và cập nhật. Tắt AutoTrading cục bộ không đóng vị thế đang có. Tách bảo vệ đã được server chấp nhận với logic chương trình và kiểm tra bản chạy từ xa riêng. Demo không bảo đảm thực hiện live giống hệt.
Kiểm tra mức độ hiểu bài
Bài tập: khoảng 2 phút.
Xem đáp án và giải thích
Giả định điền 98 hoặc 106 cho kết quả ngược nhau. Giữ trạng thái thiếu dữ liệu.
Câu hỏi khác
Dự án đầu có phải robot tự đặt lệnh không?
Chọn alert, EA hay Python thế nào?
Cần kỹ năng gì ngoài đổi tham số?
Phải kiểm tra các kiểu thất bại nào?
Nguồn và kiểm chứng
- www.bis.org
Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.
- 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.
- 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.
- 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.
- 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.
- 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.
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.
