Thực hành

EA MQL5: kiểm dữ liệu, chỉ số mảng và phản hồi lệnh

CopyBuffer, AS_SERIES, dữ liệu rỗng, thứ tự giao dịch và môi trường local/remote; tách mô hình kiểm với thực thi MT5 thật.

Minh họa biên tập chương trình và lớp kiểm dữ liệu, không màn hình EA đã chạy.
Đúng dữ liệu và phản hồi trước khi đánh giá kết quả tự động.

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…

  • Chọn đúng nến trong CopyBuffer và khai báo hướng mảng.
  • Tách handle/số chép/giá trị hợp lệ với tín hiệu.
  • Đối soát yêu cầu, deal/vị thế và môi trường tự động hóa.

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

Backtesting (kiểm thử dữ liệu lịch sử) Kế hoạch giao dịch Tài khoản mô phỏng (demo) Drawdown (sụt giảm từ đỉnh) Stop loss — lệnh dừng lỗ Báo giá lại — requote

Expert Advisor MQL5 là chương trình xử lý sự kiện trong MetaTrader 5. Có thể đánh giá quy tắc, gửi yêu cầu giao dịch khi đủ quyền. Xử lý sự kiện, quyền và phản hồi máy chủ khác khớp thành công; gắn chương trình lên biểu đồ chưa xác lập kết quả giao dịch.

Expert Advisor MQL5 là gì?

MetaEditor biên dịch MQ5 thành EX5 chạy được. Có thể phân phối tệp biên dịch không nguồn; học MQL5 không làm lộ thuật toán EX5 chưa công bố. EA có thể gửi yêu cầu được phép. Chỉ báo có thể tính/thông báo nhưng sự kiện và cấm chức năng giao dịch khác; nói “chỉ vẽ” cũng chưa đủ.

EA MQL5 dùng MT5; MT4 cũng dùng tên EA nhưng ngôn ngữ/giao diện riêng. Hệ tự động khác có thể dùng giao diện đặt lệnh khác. EA trong MT4/MT5 và Bước đầu tự động hóa giúp so phụ thuộc.

Chỉ số 0 chưa chắc nến đóng gần nhất

Giả định CopyBuffer thành công với start_pos=1,count=3 vào mảng thông thường không AS_SERIES. Chọn ba giá trị nến đã đóng; cũ nhất trước trong bộ nhớ vật lý. Đúng cấu hình này, giá trị nến đóng gần nhất ở chỉ số 2.

Vuốt ngang để xem hết sơ đồ →

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

Thứ tự vật lý ba giá trị CopyBufferMảng không AS_SERIES nhận ba giá trị từ shift 1:bộ nhớ shift 3=103,shift 2=101,shift 1=102. Nến đóng gần nhất ở index 2. Ngưỡng>102.5 đúng với 103 cũ nhưng sai với 102 mới.MẢNG THƯỜNG:CŨ NHẤT TRƯỚCCopyBuffer:start_pos=1,count=3chỉ số 0shift 3103chỉ số 1shift 2101chỉ số 2shift 1102cũ hơnđóng gần nhấtNgưỡng>102.5:103 đạt,102 không.Không chép shift 0.

Giá trị hư cấu 103,101,102; trả đúng 3 phần tử, không lỗi hoặc thiếu. Mảng thông thường không AS_SERIES; ngưỡng>102.5 chỉ kiểm chọn dữ liệu, không tín hiệu giao dịch. Tài liệu CopyBuffer nêu start_pos đếm từ nến hiện và phần tử cũ nhất ở đầu bộ nhớ vật lý.

Đọc 103 ở chỉ số 0 thay 102 ở chỉ số 2 có thể đảo kết quả cùng phép so.

Ghi start_pos, số trả về và hướng đánh chỉ số mảng đích. Đủ số nhưng sai thứ tự vẫn chọn sai nến. Không áp chỉ số 2 cho mọi cài đặt.

OnInit,OnTick,OnDeinit và sự kiện khác

OnInit xử lý khởi tạo, không bảo đảm chỉ gọi một lần suốt đời sử dụng. Kiểm tài nguyên, trả trạng thái thất bại nếu thiết lập cần chưa hoàn tất.

OnTick xử lý NewTick của symbol biểu đồ gắn. Khi sự kiện này đã trong hàng đợi hoặc đang xử lý, không thêm sự kiện mới cùng loại. EA có thể dùng sự kiện khác và không cần OnTick. Tắt AutoTrading ngăn yêu cầu giao dịch mới, không dừng chương trình hoặc ngắt handler hiện.

OnDeinit xử lý dỡ/khởi tạo lại và lý do, như gỡ, đóng hoặc đổi cấu hình gây khởi tạo lại. Quản lý tài nguyên/trạng thái đã lưu. OnTimer/OnTradeTransaction có thể thiết yếu; không chỉ ba callback. EA nhiều symbol không được suy tick biểu đồ khiến mọi dữ liệu symbol khác mới.

Yêu cầu, CTrade và khớp thật

OrderSend gửi yêu cầu; true chưa xác nhận khớp. Kiểm mã phản hồi, đối soát order/deal/position. OrderCheck là tiền kiểm, không bảo đảm khớp sau. Thử lỗi hư cấu:yêu cầu mua 0.10 lot nhưng mất chắc chắn về phản hồi; gửi lại không đối soát có thể thành 0.20 lot nếu cả hai khớp. Thiếu xác nhận cục bộ chưa nghĩa máy chủ chưa làm gì.

OnTradeTransaction tách xóa order với thêm deal vào lịch sử, không bảo đảm thứ tự ưu tiên thông báo. Không vị thế đầu, hai mua đã xác nhận D1=0.04,D2=0.06 lot. Bộ đếm lỗi đặt 0 khi ORDER_DELETE cho 0 sau D1,D2,ORDER_DELETE nhưng 0.10 sau ORDER_DELETE,D1,D2. Tổng mua xác nhận đều 0.10. Trạng thái order khác phơi nhiễm vị thế; sổ thật còn cần bán, đảo, sửa lịch sử và chế độ tài khoản.

CTrade có Buy,Sell,PositionClose. Kiểm Buy thành công chưa luôn giao dịch thành công; xem ResultRetcode và ResultDeal. Trượt giá là chênh giá khớp cần xét riêng.

Strategy Tester và dữ liệu đánh giá

Strategy Tester MT5 kiểm lịch sử bằng tick tạo hoặc tick thật do broker thu, tùy chế độ/dữ liệu. Ghi nguồn, giờ, hợp đồng và phí; không mặc định tick thật từ nguồn giá MetaQuotes chung.

Chọn tham số trên chính lịch sử dùng đánh giá có thể phóng đại bằng chứng, không bảo đảm toán học đường mượt hoặc thất bại tiền thật. Giữ kỳ chưa chạm để đánh giá, ghi các lựa chọn nghiên cứu đã thử. Kiểm thử lịch sử cần cả phương pháp lựa chọn.

Khi nào tự động hóa phù hợp yêu cầu?

EA có thể làm kiểm lặp và theo dõi công cụ đã chọn.200 lệnh/tháng, chạy đêm hoặc quyết định nhanh là yêu cầu thiết kế có thể có, không bằng chứng lợi thế.

Định đầu vào/sự kiện, gồm điều kiện không giao dịch. Tin bất thường/điều kiện thị trường cần kiểm và giám sát, không tự loại mọi tự động hóa. Biểu đồ marketplace hoặc khảo sát diễn đàn không rõ nguồn chưa ước lượng đáng tin hiệu suất thật tới.

Tự viết EA:phạm vi và vận hành

Dự án EA nhỏ giúp kiểm quy tắc chính xác có được triển khai đúng. Ngân sách học theo kỹ năng/phạm vi; ba–sáu tháng hoặc tự viết thay mua chưa bảo đảm tốt hơn.

Chạy không người cần hạ tầng, quyền và phục hồi. AutoTrading cục bộ không đóng vị thế hoặc dừng tính. Stop thường đã nhận ở server có thể còn sau đóng terminal; thoát chỉ do EA cần chương trình chạy và tới server. MetaQuotes Virtual Hosting là môi trường di trú riêng, cho phép tự động giao dịch; nút local không dừng bản xa đó. Windows VPS là dịch vụ khác. VPS và đường truyền cần xét đúng môi trường.

Định kiểm chấp nhận cho thiếu dữ liệu, khởi động lại, bước lot sai, phản hồi chưa rõ, sửa vị thế tay. Khôi phục phơi nhiễm hiện trước chạy tiếp, không tin tín hiệu local cũ. Netting cùng symbol dùng chung vị thế ròng; Magic Number không tạo vốn/margin riêng.

Có handle, dữ liệu đã dùng được chưa?

Có handle chưa chứng minh chỉ báo tính xong nến cần. BarsCalculated trả số dữ liệu đã tính hoặc−1 khi lỗi. Tiếp kiểm số CopyBuffer thật, đúng buffer và offset nến. Không đổi đọc lỗi thành 0:RSI 0 là một trạng thái, không “chưa có thông tin”.

Bốn lớp kiểm khả dụng

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

Có handle, dữ liệu dùng được chưa?Bốn kiểm riêng:handle, số đã tính, số chép và giá trị hợp lệ.Handlekhông INVALIDDữ liệu đã tínhđủ nến cầnCopyBufferđủ số yêu cầuGiá trịhợp lệ,không rỗng
Khả dụng cần mọi lớp kiểm đều đạt.

Mô hình cần một giá trị:(A)handle không hợp lệ:không đọc;(B)có handle nhưng 0 phần tử chép:chờ;(C)chép 1 nhưng EMPTY_VALUE:không tín hiệu dùng được;(D)chép 1 giá trị hợp lệ 45:mới đánh giá luật.45 hư cấu không là tín hiệu đầu tư.

EMPTY_VALUE mặc định DBL_MAX, là số hữu hạn; chỉ kiểm finite chưa đủ. Chỉ báo tùy chỉnh có thể dùng marker rỗng khác. Kiểm hợp đồng của nó, không loại mọi 0. Thiếu lịch sử, marker rỗng và số hợp lệ là các trạng thái khác.

Bài tập:có handle và chép một giá trị, nhưng là EMPTY_VALUE. Làm gì tiếp?

Chưa đánh ngưỡng chiến lược. Kiểm buffer, nến, marker rỗng, ghi dữ liệu chưa dùng được rồi thử ở sự kiện thích hợp tiếp. Không bịa quan sát 0.

Dữ liệu API cần kiểm khả dụng riêng: Phát lại thông tin ngoại tuyến. Quy tắc phụ thuộc biểu đồ có giới hạn riêng: So kiểm trực quan.

Các bước thực hành tiếp theo

  1. Trong môi trường demo phù hợp, mở Strategy Tester MT5; xem EA mẫu Moving Average hoặc MACD Sample trên EUR/USD H1, chạy một lượt rồi đọc equity, drawdown, profit factor. Đây bài học đọc báo cáo, không chứng minh giao dịch thật sẽ giống.
  2. Mở tài liệu chính thức mql5.com/en/docs, tìm OnInit,OnTick,CTrade để biết cấu trúc và ví dụ. Chưa cần viết ngay, không thời hạn học bảo đảm.
  3. Viết đầu vào, vào/thoát, cỡ và điều kiện không giao dịch. Đánh dấu quyết định tùy nghi; bối cảnh có thể đặc tả nếu định đủ dữ liệu/điều kiện. Bảng kiểm setup.
  4. Lập dự án học nhỏ với tiêu chí dữ liệu, sự kiện và phản hồi. Phạm vi/thời gian theo chức năng và kỹ năng cần.
  5. Kiểm quy trình demo trước cân nhắc rủi ro thật. Một tháng chỉ minh họa; demo có thể khác khớp thật. Tester mô phỏng trễ không đo mọi khớp thực tương lai.

Cùng bộ nhớ nhưng hai cách đánh chỉ số

Giữ đúng ba phần tử đã chép ở hình:thứ tự vật lý 103,101,102 tương ứng shift 3,2,1; shift 0 không có. Thay mảng đích bằng mảng động một chiều và đặt AS_SERIES=true thành công:chỉ số logic 0 giờ trỏ 102, chỉ số 1 trỏ 101, chỉ số 2 trỏ 103. Dữ liệu lịch sử không đổi, cách truy cập đổi. Đặt lại false thành công thì chỉ số 0 lại trỏ 103.

Cùng ba phần tử, AS_SERIES đổi chỉ số logicGiả định mảng động một chiều, đủ3 phần tử và đặt cờ thành công; thứ tự vật lý103,101,102 không đổi.PHÉP TÍNH GIẢ ĐỊNHAS_SERIES=false[0]=103,[1]=101,[2]=102AS_SERIES=true[0]=102,[1]=101,[2]=103Đổi cờ thất bạiKhông giả định hướng đãđổi
Cùng ba phần tử, AS_SERIES đổi chỉ số logic. Giả định mảng động một chiều, đủ3 phần tử và đặt cờ thành công; thứ tự vật lý103,101,102 không đổi.

Tách shift nguồn, bộ nhớ vật lý và chỉ số logic. Mô hình ánh xạ không là chạy MT5 hoặc khuyến nghị tín hiệu.

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.

AS_SERIES=false
[0]=103,[1]=101,[2]=102 – Shift3,2,1; nến đóng gần nhất ở chỉ số2.
AS_SERIES=true
[0]=102,[1]=101,[2]=103 – Hướng truy cập đảo; nến đóng gần nhất ở chỉ số0, không phải nến hiện shift0.
Đổi cờ thất bại
Không giả định hướng đã đổi – Mảng tĩnh/nhiều chiều không hỗ trợ cờ; kiểm trả về và cài đặt thực.

ArraySetAsSeries không đặt được cờ cho mảng tĩnh đã định kích thước lúc biên dịch hoặc mảng nhiều chiều. Vì vậy đừng thêm lời gọi rồi giả định thành công; kiểm kết quả và hướng thực với ArrayGetAsSeries. Giữ trong log buffer_num,start_pos,count yêu cầu/count trả, kiểu mảng và cờ. Đây mô hình ánh xạ chỉ số theo tài liệu, không đã biên dịch/chạy EA. Không được thay đáp án bài tập nguồn:đề dùng mảng thường không AS_SERIES nên 102 vẫn ở chỉ số 2.

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

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

CopyBuffer từ shift1 trả[103,101,102] vào mảng thường không AS_SERIES, đủ ba phần tử. Giá trị nến đóng gần nhất?

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

Bộ nhớ vật lý bắt đầu phần tử cũ nhất; cuối ở chỉ số2 giữ shift1 trong mảng thường này.

Câu hỏi khác

EA MQL5 khác bot Python thế nào?
EA dùng sự kiện/dữ liệu/hàm MT5. Python có thể dùng API nhà cung cấp hoặc tích hợp Python với terminal MT5, không nhất thiết REST/FIX ngoài môi trường. So phụ thuộc, sự kiện, dữ liệu, phản hồi và kiểm; không ngôn ngữ nào luôn hơn về chất lượng chiến lược/thực thi.
Chạy EA cần biết code?
Không luôn phải viết MQL5 để chạy EA biên dịch có tài liệu, nhưng cần kiểm đầu vào, quyền và hoạt động. Có nguồn mới hỗ trợ đọc thuật toán; học ngôn ngữ không lộ EX5 kín. Kiểm hành vi, log, giới hạn và phục hồi trên môi trường phù hợp; không số tuần bảo đảm đủ.
Vì sao tester đẹp mà thật lỗ?
Có thể khác chọn tham số, dữ liệu, spread, phí, trễ và khớp. Tìm cùng lịch sử rồi chỉ báo tốt nhất có thể phóng đại bằng chứng, không định lý bảo đảm backtest đẹp hoặc thật lỗ. Giữ các biến thể đã thử, tách phát triển/đánh giá với cùng hợp đồng/giờ/phí; một lần đánh giá tốt chưa chứng minh bền.
Có bắt buộc VPS?
Chọn theo uptime, dữ liệu và đường khớp. VPS có thể hỗ trợ liên tục hoặc một phần đường truyền, không bảo đảm trễ, fill hoặc giá chung. Tách Windows VPS với MetaQuotes Virtual Hosting; nút AutoTrading local không dừng EA đã di trú xa. Kiểm điều khoản dịch vụ thật.
AS_SERIES=true có khiến mảng chứa nến hiện?
Không. Nó đổi hướng đánh chỉ số mảng hỗ trợ, không thêm shift0 vào dữ liệu chép từ shift1. Đủ ba phần tử103,101,102 theo vật lý:logictrue0 là102 của shift1, false2 mới là102. Kiểm cờ đặt thành công, không dùng quy tắc này cho mảng tĩnh/nhiều chiều.

Nguồn và kiểm chứng

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

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

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

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

  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.

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

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.