Lưu Trữ Bền Vững (Persistent Memory): Sức Mạnh Của SQLite Trong MT5
Vấn đề lớn nhất của biến trong RAM là: Mất điện = Mất sạch.
Một con Bot đang gồng lỗ ở Level 5 (Martingale), nếu bị restart máy tính, nó sẽ quên mất mình đang ở Level 5 và bắt đầu lại từ Level 1.
-> Thảm họa.
Giải pháp: Chúng ta cần một “Bộ nhớ vĩnh cửu”.
1. GlobalVariables Có Tốt Không?
MQL5 có hàm GlobalVariableSet để lưu biến vào ổ cứng.
Tuy nhiên:
– Nó chỉ lưu được Double (Số thực).
– Không có cấu trúc (chỉ là cặp Key-Value).
– Nếu bạn có hàng trăm biến trạng thái, việc quản lý Key rất rối rắm.
2. SQLite Database – Chuẩn Mực Mới
Từ phiên bản build 2xxx, MT5 đã hỗ trợ SQLite native.
Đây là một bước tiến vĩ đại cho Bot Trading.
Bạn có thể lưu toàn bộ trạng thái Bot vào một file TinhBot_State.db.
Bảng State:
| ID | Key | Value |
| :— | :— | :— |
| 1 | current_step | 5 |
| 2 | total_profit | 150.5 |
| 3 | last_entry_time | 1712345678 |
3. Class CStorage
Chúng ta sẽ xây dựng class CStorage để wrap các câu lệnh SQL.
class CStorage {
public:
bool CreateDatabase();
bool SaveState(int step, double profit);
bool LoadState(int &step, double &profit);
};
Quy trình:
– OnInit: Bot gọi LoadState. Nếu có file DB, nó khôi phục trạng thái cũ (Step 5). Nếu chưa có, nó khởi tạo (Step 1).
– OnTick: Mỗi khi vào lệnh xong, Bot gọi SaveState để cập nhật DB ngay lập tức.
4. Lợi Ích Của SQLite
- Portable: Bạn có thể copy file
.db từ máy cá nhân lên VPS, Bot sẽ tiếp tục chạy tiếp tục đúng trạng thái đó.
- Backup: Dễ dàng backup history giao dịch riêng của Bot.
- Complex Data: Lưu được cả String, BLOB, cấu trúc phức tạp.
Với SQLite, Bot của bạn trở nên “Bất tử” với việc Restart VPS.
👉 Tiếp theo: Nhưng nếu Bot khởi động lại và thấy dữ liệu trong DB khác với dữ liệu thực tế trên sàn thì sao? Xem ngay: Hệ Thống Tự Phục Hồi (Disparity Recovery): Khi Bot Tự Chữa Lành