| [Core] CStateEngine: Cỗ Máy Trạng Thái FSM Điều Khiển Bot

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

[Core] CStateEngine: Cỗ Máy Trạng Thái FSM Điều Khiển Bot

Bạn có bao giờ viết một con Bot với hàng tá câu lệnh if...else lồng nhau?
if (RSI < 30) { if (MA > 200) { if (Balance > 1000) { ... } } }

Kết quả là một “nồi lẩu thập cẩm” logic rất khó debug. Khi muốn sửa một điều kiện, bạn phải rà soát lại toàn bộ.

Giải pháp chuẩn công nghiệp là: Finite State Machine (FSM) – Máy trạng thái hữu hạn, được hiện thực hóa qua class CStateEngine.

1. Tư Duy Hướng Trạng Thái (State-Oriented)

Thay vì hỏi “Giá đang là bao nhiêu?”, hãy hỏi “Bot đang ở trạng thái nào?”.
Tại mỗi thời điểm, Bot chỉ có thể ở MỘT trạng thái duy nhất.

Ví dụ các trạng thái của Robot V5:
STATE_IDLE: Rảnh rỗi, chờ tín hiệu.
STATE_ENTRY_WAIT: Đã có tín hiệu, đang chờ Retest để vào.
STATE_HEDGED: Đang gồng lỗ 2 tài khoản (Buy/Sell cân bằng).
STATE_RECOVERY: Đang xử lý lệnh lỗ (Tự cứu).
STATE_SURPLUS: Đã chốt lời, chờ Reset.

2. Thiết Kế Class CStateEngine

CStateEngine sẽ quản lý việc chuyển đổi trạng thái (Transition).

class CStateEngine {
private:
    ENUM_BOT_STATE m_current_state;
public:
    void OnTick() {
        switch (m_current_state) {
            case STATE_IDLE:
                // Chỉ kiểm tra tín hiệu vào lệnh
                if (SignalTriggered()) SwitchState(STATE_ENTRY_WAIT);
                break;
            case STATE_HEDGED:
                // Chỉ tập trung tính toán gỡ lệnh
                if (CanUnhedge()) SwitchState(STATE_RECOVERY);
                break;
        }
    }
};

3. Lợi Ích Của FSM

  • Tách biệt Logic: Khi debug lỗi vào lệnh, bạn chỉ cần nhìn vào STATE_IDLESTATE_ENTRY_WAIT. Không cần quan tâm đến logic gồng lỗ.
  • Tránh Xung Đột: Bot không bao giờ vừa mở lệnh mới vừa đang gồng lỗ (trừ khi bạn thiết kế như vậy), vì 2 trạng thái này tách biệt.
  • Dễ Mở Rộng: Muốn thêm tính năng “Trailing Stop”? Chỉ cần thêm trạng thái STATE_TRAILING.

4. Áp Dụng Thực Tế

Trong Robot V5, CStateEngine sẽ phối hợp với CInventory:
1. CInventory báo: “Đang có 5 lệnh Buy, 0 lệnh Sell”.
2. CStateEngine tự hiểu: “À, vậy là đang ở trạng thái STATE_LONG_ONLY“.
3. Từ đó CStateEngine ra quyết định: “Chỉ tìm điểm Sell để Hedge cân bằng” hoặc “Tìm điểm Buy thêm để Average Down”.

Đây chính là “Bộ não” thông minh giúp Bot tự hành xử trong mọi tình huống thị trường.

👉 Tiếp theo: Khi não đã ra lệnh, cần một “cánh tay” vững chắc để thực thi. Xem ngay: [Exec] CExecution: Nghệ Thuật Đẩy Lệnh, Xử Lý Trượt Giá & Retry