Trả lời ngắn: Grid System trong EA là bộ điều phối các mức giá định trước. Mỗi mức có định danh, điều kiện kích hoạt và trạng thái riêng; hệ thống chỉ ghi nhận đã thực hiện khi có bằng chứng từ máy chủ giao dịch. Grid không mặc định tăng khối lượng, bình quân giá hay bảo đảm giá quay lại.

Đọc xong, bạn sẽ hiểu: vì sao lưới phải hữu hạn; cách phân biệt chạm giá, yêu cầu, lệnh, lần khớp và vị thế; cách khóa chống lặp; và vì sao hai chế độ tài khoản cần đối chiếu khác nhau.

Lưu ý giáo dục: Mọi mức giá, khối lượng và giới hạn trong bài là dữ liệu giả để học thiết kế hệ thống. Đây không phải công thức lưới, tín hiệu hoặc lời khuyên giao dịch.

1. Grid System là bộ điều phối hữu hạn

a. Năm phần của một grid

Mức lưới (grid level) là một mức giá có ID và trạng thái riêng. Một Grid System tối thiểu cần:

  • giá neo (anchor) làm mốc dựng hình học;
  • khoảng cách (spacing) giữa các mức;
  • tập mức hữu hạn, không tự kéo dài mãi;
  • chính sách (policy) kích hoạt, hủy và đặt lại;
  • giới hạn số mức, khối lượng, yêu cầu đang chờ và tổng rủi ro.

Một chu kỳ (cycle) là vòng đời của kế hoạch lưới có ID và phiên bản. Cùng giá nhưng khác chu kỳ là hai đối tượng khác nhau.

b. Grid không tự là DCA hay Recovery

Grid sở hữu hình học mức giá và trạng thái từng mức. Nó không bắt buộc tăng khối lượng, cũng không mặc định bình quân giá. Bài tiếp theo về DCA sở hữu chính sách tích lũy theo thời gian hoặc mức giá; hệ thống phục hồi (Recovery) lại là câu chuyện khác về xử lý trạng thái bất lợi.

Nếu cứ thêm mức và tăng khối lượng khi giá đi xa, hệ thống đã mang thêm đặc tính kiểu Martingale. Đó không phải định nghĩa bắt buộc của lưới và làm mức phơi nhiễm (exposure) phình nhanh.

Hãy hình dung thang máy chỉ có năm tầng. Cabin đi ngang tầng 3 không chứng minh hành khách đã bước vào. Giá chạm mức lưới cũng chưa chứng minh yêu cầu đã được thực hiện.

2. Từ kế hoạch mức giá đến trạng thái được xác nhận

a. Máy trạng thái của một mức lưới

Máy trạng thái (state machine) demo:

PLANNED → ELIGIBLE → REQUESTED → CONFIRMED | REJECTED | CANCELLED

  • PLANNED: mức có trong kế hoạch nhưng chưa đủ điều kiện.
  • ELIGIBLE: giá đã cắt qua mức và các cổng kiểm soát đều đạt.
  • REQUESTED: ý định đã được chuyển sang khâu thực thi.
  • CONFIRMED: bằng chứng máy chủ xác nhận lần khớp phù hợp.
  • REJECTED/CANCELLED: máy chủ hoặc bộ điều phối từ chối/hủy yêu cầu.

Ý định nội bộ (intent) là đề nghị hành động, chưa phải lệnh (order) hay lần khớp (deal). Mỗi ý định dùng khóa chống lặp (idempotency key) như cycleId:levelId:actionVersion; nhịp giá hoặc hàm gọi lại cùng khóa không được tạo ý định thứ hai.

b. Tám bước xử lý

  1. Kiểm chu kỳ, mã giao dịch và chế độ tài khoản.
  2. Khôi phục danh sách mức bất biến.
  3. Chuẩn hóa theo bước giá (tick size) và quy tắc khối lượng.
  4. Đối chiếu (reconciliation) trạng thái nội bộ với lệnh, lần khớp và vị thế (position) trên máy chủ.
  5. Kiểm giá cắt mức cùng cổng Lọc, Phiên và Rủi ro.
  6. Kiểm giới hạn đã xác nhận, đang xử lý (in-flight) và rủi ro.
  7. Tạo một ý định, kiểm tra trước (preflight), rồi gửi yêu cầu (request).
  8. Chỉ kết thúc trạng thái khi có bằng chứng giao dịch hoặc đối chiếu.

MQL5 định nghĩa SYMBOL_TRADE_TICK_SIZE là bước giá tối thiểu; khối lượng có MIN, MAX, STEP, LIMIT. Không “làm tròn đại” dữ liệu sai sau khi tạo ý định. Symbol properties

c. OrderSend=true chưa phải đã khớp

OrderCheck() kiểm tham số, tiền và ước tính ký quỹ/vốn; đạt kiểm tra vẫn không bảo đảm thao tác được thực hiện. OrderCheck

OrderSend() trả true khi yêu cầu qua kiểm tra cơ bản và được nhận để xử lý; đó chưa phải thực thi thành công. Phải đọc retcode và sự kiện sau đó. OrderSend

Một yêu cầu có thể sinh nhiều giao dịch kỹ thuật; thứ tự đến không được bảo đảm. OnTradeTransaction() vẫn có thể nhận giao dịch mới và hàng đợi chỉ có 1.024 phần tử. Hàm xử lý phải ngắn, chống lặp, chịu được đảo thứ tự. OnTradeTransaction

Hình 1 — Grid chỉ đổi trạng thái khi có bằng chứng; chạm giá và yêu cầu được nhận chưa phải thực thi đã xác nhận.

3. Demo C7 và bảy lỗi thường gặp

a. Sổ năm mức lưới

Toàn bộ số dưới đây là demo:

  • chu kỳ C7;
  • giá neo 100 U, khoảng cách 2 U;
  • các mức L-2=96, L-1=98, L0=100, L+1=102, L+2=104;
  • giới hạn đã xác nhận 2, giới hạn đang xử lý 1;
  • khối lượng mỗi ý định 1 U giả.

Ảnh chụp giá đi 100 → 98.2 → 97.8. L-1 thành ELIGIBLE với khóa C7:L-1:v1. Sau OrderSend=true, trạng thái chỉ là REQUESTED; có lần khớp phù hợp mới thành CONFIRMED.

Lặp nhịp giá vẫn dùng khóa cũ, không tạo yêu cầu thứ hai. Khi L-2 cũng CONFIRMED, giới hạn bằng 2; các mức còn lại bị chặn, không sinh L-3 hay L+3.

Hình 2 — Mô hình năm mức luôn hữu hạn; mỗi mức có một định danh và giới hạn chặn ý định mới.

b. Lệnh, lần khớp và vị thế không phải một

Lệnh (order) là yêu cầu đã được hệ thống chuẩn hóa; lệnh có thể được đặt, khớp một phần/hết, từ chối, hủy hoặc hết hạn. Lệnh được thực hiện tạo lần khớp (deal), rồi lần khớp mở/sửa vị thế (position). Order properties

Khớp một phần (partial fill) nghĩa khối lượng yêu cầu mới được thực hiện một phần. Sổ mức lưới phải giữ khối lượng đã xác nhận, không chỉ cờ đúng/sai.

Với tài khoản bù trừ (netting), mỗi mã chỉ có một vị thế; nhiều lần khớp có thể cùng sửa nó. Tài khoản phòng hộ (hedging) cho phép nhiều vị thế. Vì vậy “một mức bằng một vị thế” là sai. Account type: netting or hedging

Hình 3 — Lệnh, lần khớp và vị thế là các lớp bằng chứng khác nhau; chế độ tài khoản làm đổi cách đối chiếu.

c. Bảy lỗi và giới hạn

  1. Lưới vô hạn: tự sinh mức mới khi giá đi xa.
  2. Khoảng cách thay giới hạn rủi ro: khoảng cách giá không giới hạn mức phơi nhiễm.
  3. Tăng khối lượng âm thầm: lưới biến thành phơi nhiễm kiểu Martingale.
  4. Chạm giá hoặc gửi thành công thành đã khớp: trạng thái nội bộ đi trước dữ kiện máy chủ.
  5. Không khóa chống lặp/đối chiếu: nhịp giá hoặc hàm gọi lại lặp tạo hành động trùng.
  6. Một vị thế cho mỗi mức: sai với tài khoản bù trừ.
  7. Bỏ khớp một phần, khoảng trống giá và chi phí: thực thi có thể thiếu khối lượng, nhảy mức, lệch giá và cộng dồn ký quỹ/chi phí.

Xu hướng kéo dài có thể tích phơi nhiễm; khoảng trống giá có thể bỏ qua mức; chi phí tăng theo số thao tác. Grid không bảo đảm giá hồi về trung bình, tự gỡ lỗ hay loại bỏ rủi ro.

4. Grid contract trước khi viết code

a. Mười bốn câu phải trả lời

  1. ID/phiên bản chu kỳ?
  2. Mã và chế độ tài khoản?
  3. Nguồn giá neo?
  4. Đơn vị khoảng cách?
  5. Số mức tối đa?
  6. ID mức bất biến?
  7. Giá đúng bước?
  8. Khối lượng đúng quy tắc?
  9. Ai sở hữu giới hạn rủi ro?
  10. Giới hạn đang xử lý?
  11. Chuyển trạng thái hợp lệ?
  12. Trường của khóa chống lặp?
  13. Nguồn đối chiếu lệnh/lần khớp/vị thế?
  14. Ai đặt lại, hủy, thoát?

b. Khi nào phải dừng

Nếu ảnh chụp tài khoản, siêu dữ liệu mã giao dịch hoặc việc đối chiếu chưa hoàn tất, hệ thống trả UNKNOWN/HALT. Không dùng bộ nhớ đệm cũ rồi tiếp tục tạo ý định.

Kiểm tra trước đạt chưa phải bằng chứng thực thi. Yêu cầu hết thời gian chờ cũng không tự nghĩa thất bại cuối; phải đối chiếu bằng mã lệnh, khóa và lịch sử máy chủ trước khi thử lại.

5. Grid Worksheet 15 phút

a. Cách làm

Dùng giấy hoặc Google Sheets; chưa mở MT5, chưa kết nối tài khoản và chưa dùng tiền thật.

Tạo sổ C7 với năm dòng:

b. Mẫu đối chiếu

Mức Giá demo Khóa Sự kiện Trạng thái cuối
L-2 96 U C7:L-2:v1 lần khớp được xác nhận CONFIRMED
L-1 98 U C7:L-1:v1 nhịp giá lặp, yêu cầu, lần khớp CONFIRMED
L0 100 U C7:L0:v1 đã chạm giới hạn PLANNED
L+1 102 U C7:L+1:v1 đã chạm giới hạn PLANNED
L+2 104 U C7:L+2:v1 đã chạm giới hạn PLANNED

Sau đó thêm một hàm gọi lại lặp cho L-1. Kết quả đúng vẫn chỉ có một khóa và một ý định đã xác nhận. Nếu bạn tạo dòng thứ hai cho L-1, quy tắc chống lặp đang sai.

6. Tổng kết: mức lưới hữu hạn, bằng chứng rõ

a. Năm ý chính

  • Grid là bộ điều phối hữu hạn theo mức giá, không phải lưới vô tận.
  • Mỗi cặp chu kỳ–mức cần ID, trạng thái và khóa chống lặp.
  • Chạm giá và OrderSend=true chưa chứng minh đã khớp.
  • Bù trừ/phòng hộ làm đổi cách đối chiếu, không làm đổi định danh mức.
  • Khoảng cách không thay giới hạn rủi ro; dữ liệu thiếu phải UNKNOWN/HALT.

Bài trước là Volatility Filter trong EA. Bài tiếp theo là DCA System trong EA #14.

b. Câu hỏi tự kiểm tra

  • Vì sao lưới phải có số mức tối đa?
  • Khi nào mức được coi là CONFIRMED?
  • Vì sao một mức không luôn tương ứng một vị thế?
  • Hàm gọi lại lặp nên tạo bao nhiêu ý định?

c. Gợi ý đáp án

Xem gợi ý câu 1

Số mức tối đa khóa phạm vi hình học; không có nó, bộ điều phối có thể kéo lưới mãi khi giá đi xa. → xem mục 1 và 3.

Xem gợi ý câu 2

Chỉ khi sự kiện giao dịch hoặc lần đối chiếu có bằng chứng máy chủ phù hợp, không phải lúc chạm giá hay gửi thành công. → xem mục 2.

Xem gợi ý câu 3

Bù trừ gộp hoạt động cùng mã vào một vị thế; phòng hộ có thể giữ nhiều vị thế. → xem mục 3.

Xem gợi ý câu 4

Một ý định duy nhất cho cùng chu kỳ–mức–phiên bản nhờ khóa chống lặp. → xem mục 2 và 5.

d. Thuật ngữ cần nhớ

Thuật ngữ Giải thích ngắn
Mức lưới (grid level) Mức giá có ID và trạng thái riêng.
Chu kỳ (cycle) Vòng đời kế hoạch lưới có ID/phiên bản.
Ý định (intent) Đề nghị nội bộ, chưa phải thực thi.
Khóa chống lặp Ngăn hàm gọi lại tạo hành động trùng.
Đối chiếu So trạng thái nội bộ với máy chủ.
Lệnh (order) Yêu cầu đã được hệ thống chuẩn hóa.
Lần khớp (deal) Lần thực hiện lệnh làm đổi vị thế.
Vị thế (position) Trạng thái sở hữu trên tài khoản.
Giới hạn rủi ro Chặn phơi nhiễm hoặc số lượng.

e. Nguồn tham khảo

Nội dung này phục vụ mục đích giáo dục, không phải lời khuyên đầu tư hoặc tín hiệu giao dịch. Grid System không thể loại bỏ rủi ro thị trường, dữ liệu hoặc thực thi.