| Bài 4: Kỹ Thuật FSM Chống Trùng Lệnh (Anti-Multiposition) Trên Thị Trường Biến Động Mạnh

Được viết bởi thanhdt vào ngày 01/06/2026 lúc 10:16 | 15 lượt xem

Trong lập trình giao dịch lưới (Grid Trading), một trong những thảm họa lớn nhất mà lập trình viên thường gặp phải là hiện tượng trùng lệnh (Multiposition). Khi tin tức ra hoặc thị trường xảy ra trượt giá (Slippage), giá giật nến mạnh qua lại tại một ranh giới tầng giá. Hàm OnTick được kích hoạt liên tục trong mili-giây, khiến bot mở hàng loạt lệnh tại cùng một tầng giá, đẩy tài khoản vào trạng thái kiệt quệ ký quỹ ngay lập tức. Để giải quyết triệt để vấn đề này, Nhị Quái V6 Pro sử dụng kiến trúc Máy Trạng Thái Hữu Hạn (Finite State Machine – FSM) kết hợp bộ khóa thời gian an toàn.


1. Rủi ro trùng lệnh và hạn chế của bộ lọc thông thường

Thông thường, lập trình viên sẽ kiểm tra xem tầng giá đó đã có lệnh nào chưa bằng cách duyệt qua danh sách vị thế đang mở. Tuy nhiên, trên thị trường thực tế:
1. Độ trễ máy chủ (Server Latency): Khi gửi yêu cầu mở lệnh lên máy chủ, phải mất từ 100ms – 500ms lệnh mới khớp và xuất hiện trong danh sách vị thế. Trong thời gian chờ này, có hàng chục tick giá mới ập đến và kích hoạt thêm hàng loạt lệnh mới.
2. Trượt giá (Slippage): Giá giật liên tục qua mốc tầng khiến bộ lọc vị thế không kịp cập nhật trạng thái.


2. Thiết kế FSM Chống trùng lệnh với STEP_READY và STEP_BUSY

Nhị Quái thiết kế một máy trạng thái FSM đơn giản cho mỗi tầng lưới với 2 trạng thái chính:
* STEP_READY: Tầng giá đang ở trạng thái sạch sẽ, sẵn sàng nhận lệnh mới.
* STEP_BUSY: Tầng giá đang bận rộn xử lý (yêu cầu mở lệnh đã được gửi đi và đang chờ máy chủ khớp).

Để đồng bộ hóa xuyên suốt và chống sập nguồn, trạng thái bận rộn được ghi trực tiếp vào Global Variable với giá trị thời gian thực tế TimeCurrent() làm khóa bảo vệ.

Quy tắc khóa thời gian 10 giây:

Mỗi khi gửi yêu cầu mở lệnh, tầng đó sẽ bị khóa cứng ở trạng thái STEP_BUSY trong vòng 10 giây. Nếu sau 10 giây mà máy chủ vẫn không báo khớp (lỗi mạng, từ chối lệnh từ sàn), tầng giá mới được mở khóa tự động về STEP_READY để thử lại.


3. Phân tích mã nguồn MQL5: Bộ khóa FSM chống trùng lệnh

Dưới đây là mã nguồn kiểm tra trạng thái FSM trước khi vào lệnh trong Nhị Quái V6 Pro:

“`mql5
enum ENUM_STEP_STATE { STEP_READY, STEP_BUSY };

ENUM_STEP_STATE GetFSMState(int magic, int step, ENUM_POSITION_TYPE type) {
// Tạo định danh biến toàn cầu duy nhất cho tầng lệnh
string gv_name = GetGVPrefix(magic) + “FSM” + IntegerToString(step) + “_” + (type == POSITION_TYPE_BUY ? “B” : “S”);

if(GlobalVariableCheck(gv_name)) {
    datetime last_action = (datetime)GlobalVariableGet(gv_name);
    // Nếu khóa chưa quá 10 giây, giữ trạng thái bận rộn để bảo vệ
    if(TimeCurrent() - last_action > 10) {
        GlobalVariableDel(gv_name); // Mở khóa tự động sau 10s
        return STEP_READY;
    }
    return STEP_BUSY;
}
return STEP_READY;

}
“`


🎓 Kết luận & Bài học tiếp theo

Kiến trúc FSM chống trùng lệnh chính là tấm lá chắn công nghệ giúp Nhị Quái V6 Pro miễn nhiễm trước bão tin tức và trượt giá cực đoan. Trong bài học tiếp theo (Bài 5), chúng ta sẽ cùng đi sâu vào tìm hiểu Thuật Toán Gặt X – cơ chế chốt lời đơn lẻ từng tầng vô cùng linh hoạt để giải phóng ký quỹ.


🎓 Học làm chủ thuật toán định lượng và lập trình Bot Auto Trading cùng chuyên gia tại:
👉 Khóa học Lập trình MT5 Nâng cao – Hedging & Tự động hóa
💬 Liên hệ nhận tài liệu và tư vấn 1-1 trực tiếp qua Zalo