Bài viết gần đây
-
-
Tổng Kết: Trade Thông Minh Hơn, Không Phải Vất Vả Hơn
Tháng 2 10, 2026 -
Hướng Dẫn Cài Đặt và Nhận Tín Hiệu Từ Huong Nghiep Du Lieu
Tháng 2 10, 2026 -
Hướng Dẫn Cài Đặt và Nhận Tín Hiệu Từ Huong Nghiep Du Lieu
Tháng 2 10, 2026 -
Quản Lý Vốn: Bot Tín Hiệu Giúp Bạn Kỷ Luật Hơn Trong Trading
Tháng 2 10, 2026
| Logic Chuyển Trạng Thái Chi Tiết FSM
Được viết bởi thanhdt vào ngày 03/02/2026 lúc 19:25 | 41 lượt xem
Hướng dẫn Code FSM cho Bot Trading (Phần 2): Logic Chuyển Trạng Thái Chi Tiết
Trong Phần 1, chúng ta đã bàn về kiến trúc tổng quan của FSM (Finite State Machine) cho Bot Trading. Ở phần này, chúng ta sẽ đi sâu vào việc triển khai code (Implementation). Làm sao để chuyển từ ý tưởng sơ đồ sang những dòng code chạy thực tế?
1. Cấu trúc dữ liệu cho Step
Trước khi viết logic chuyển trạng thái, ta cần định nghĩa một Step quản lý những gì.
python
class Step:
def __init__(self, step_id, entry_price, volume):
self.id = step_id
self.state = "INIT" # Trạng thái ban đầu
self.buy_order = None # Lưu ticket/ID lệnh Buy
self.sell_order = None # Lưu ticket/ID lệnh Sell
self.entry_price = entry_price
self.volume = volume
self.tp_gap = 100 # Ví dụ: 100 point
2. Logic Chuyển Trạng Thái (State Transition Logic)
Trái tim của FSM nằm ở hàm on_tick() hoặc update(), nơi bot kiểm tra điều kiện thị trường để quyết định xem có chuyển trạng thái hay không.
Sơ đồ Logic:
- INIT -> HEDGED: Khi đặt đủ 2 lệnh Buy & Sell.
- HEDGED -> TP_BUY: Khi
Giá Hiện Tại >= Giá Entry + TP. - HEDGED -> TP_SELL: Khi
Giá Hiện Tại <= Giá Entry - TP. - TP_BUY -> REBALANCE: Ngay sau khi lệnh Buy đóng, ta cần bù lệnh.
- REBALANCE -> HEDGED: Khi đã bù đủ lệnh, step quay lại trạng thái cân bằng an toàn.
Code minh họa (Pseudo-code/Python)
“`python
def update_step(step, current_price):
# 1. Xử lý trạng thái INIT
if step.state == "INIT":
if not step.buy_order and not step.sell_order:
step.buy_order = place_order("BUY", step.volume)
step.sell_order = place_order("SELL", step.volume)
if step.buy_order and step.sell_order:
step.state = "HEDGED"
print(f"Step {step.id} -> HEDGED")
# 2. Xử lý trạng thái HEDGED (Quan trọng nhất)
elif step.state == "HEDGED":
# Kiểm tra TP Buy
if current_price >= step.entry_price + step.tp_gap:
close_order(step.buy_order)
step.buy_order = None
step.state = "TP_BUY"
print(f"Step {step.id} -> TP_BUY")
# Kiểm tra TP Sell
elif current_price <= step.entry_price - step.tp_gap:
close_order(step.sell_order)
step.sell_order = None
step.state = "TP_SELL"
print(f"Step {step.id} -> TP_SELL")
# 3. Xử lý trạng thái sau khi đã chốt lời (TP_BUY / TP_SELL)
elif step.state == "TP_BUY":
# Logic: Lúc này chỉ còn Sell đang gồng lỗ.
# Ta cần chờ hoặc Rebalance ngay lập tức tùy thuật toán.
# Ở đây giả sử Rebalance ngay:
step.state = "REBALANCE"
elif step.state == "TP_SELL":
step.state = "REBALANCE"
# 4. Xử lý Rebalance
elif step.state == "REBALANCE":
if not step.buy_order:
# Bù lệnh Bye (thường là lệnh Pending hoặc Market giá mới)
step.buy_order = place_order("BUY", step.volume)
if not step.sell_order:
step.sell_order = place_order("SELL", step.volume)
# Nếu đã đủ cả 2 lệnh
if step.buy_order and step.sell_order:
step.state = "HEDGED"
print(f"Step {step.id} Rebalanced -> HEDGED")
“`
3. Xử lý sự cố (Edge Cases)
Thực tế khốc liệt hơn lý thuyết. Bot viết bằng FSM phải xử lý được các tình huống sau:
- Mất kết nối / Khởi động lại Bot:
- Do FSM lưu trạng thái trong bộ nhớ (RAM), nếu tắt bot, trạng thái sẽ mất.
- Giải pháp: Cần lưu trạng thái vào File hoặc Database (hoặc comment của lệnh trên sàn). Khi bot bật lại, nó phải đọc lại lịch sử để khôi phục trạng thái
step.state.
- Lệnh bị từ chối (Rejection):
- Khi gửi lệnh Buy ở trạng thái
INITnhưng sàn báo lỗi (hết tiền, thị trường đóng cửa). - Giải pháp: Ở trạng thái
INIThoặcREBALANCE, bot phải retry (thử lại) sau vài giây chứ không được crash.
- Khi gửi lệnh Buy ở trạng thái
- Trượt giá (Slippage):
- Lệnh TP có thể không khớp đúng giá
Entry + TP. - Giải pháp: Logic TP nên dùng dấu
>=thay vì==.
- Lệnh TP có thể không khớp đúng giá
Kết luận
Việc chia nhỏ logic thành từng khối if-else dựa trên state giúp code cực kỳ dễ debug. Nếu bot hoạt động sai ở bước chốt lời, bạn chỉ cần nhìn vào block elif step.state == "HEDGED" để sửa, không sợ ảnh hưởng đến logic vào lệnh ban đầu.
Ở phần sau, chúng ta sẽ bàn về Quản lý vốn nâng cao khi kết hợp nhiều Step FSM lại với nhau.