Sanity Checks: Những Bẫy Lỗi Toán Học Cần Tránh Tuyệt Đối
Bạn code công thức chia Lot:
double lots = Risk / StopLoss;
Một ngày đẹp trời, sàn bị lỗi, trả về giá trị StopLoss = 0.
Kết quả: lots = Infinity. Bot vào lệnh với khối lượng Max 1000 Lots -> Cháy tài khoản trong 1 nốt nhạc.
Đó là lý do ta cần Sanity Checks (Kiểm Tra Tỉnh Táo).
1. Nguyên Tắc “Paranoid” (Hoang Tưởng)
Hãy luôn giả định rằng mọi dữ liệu đầu vào đều có thể SAI. Đừng tin ai cả, kể cả Server của sàn.
Tất cả các hàm tính toán đều phải có rào chắn bảo vệ.
2. Danh Sách Các Bẫy Thường Gặp
Bẫy chia cho 0 (Zero Division)
SAI:
return A / B;
ĐÚNG:
if (B == 0) {
CAuditManager::Error("Lỗi chia cho 0!");
return 0; // Hoặc giá trị mặc định an toàn
}
return A / B;
Bẫy Tràn Mảng (Array Out of Range)
Truy cập Close[100] khi nến chưa load đủ 100 cây -> Crash Bot.
Luôn kiểm tra ArraySize() hoặc Bars() trước khi truy cập nến.
Bẫy Sai Số Lot (Invalid Volume)
Tính ra Lot = 0.12345. Sàn chỉ cho phép bước giá 0.01. Gửi lệnh 0.12345 sẽ bị từ chối.
Phải dùng hàm NormalizeDouble() và kiểm tra MinLot, MaxLot, LotStep.
// Hàm chuẩn hóa Lot an toàn
double CheckLot(double lots) {
if (lots < MinLot) return MinLot;
if (lots > MaxLot) return MaxLot;
// Làm tròn theo Step
return MathFloor(lots / LotStep) * LotStep;
}
3. Internal Bug Audit
Thêm các điểm ASSERT vào code.
Nếu một biến số có giá trị vô lý (ví dụ: Balance < 0), Bot phải tự động Shutdown (Tự ngắt) và gửi báo động. Thà dừng chạy còn hơn chạy sai.
TỔNG KẾT LOẠT BÀI
Chúc mừng bạn đã đi hết hành trình 10 bài viết nâng cấp Bot Trading lên Chuẩn Công Nghiệp.
Từ việc tách File, dùng Database, tự phục hồi đến Test hỗn loạn. Đây là con đường chông gai mà chỉ những Quant Trader nghiêm túc mới dám đi.
Robot V5 giờ đây không chỉ là một con Bot kiếm tiền, nó là một Hệ Thống Di Sản có thể chạy bền bỉ năm này qua năm khác.
Hãy bắt đầu code dòng đầu tiên của CStateEngine ngay hôm nay!
👉 Khóa học tham khảo: Đăng ký ngay khóa học “Lập Trình Bot Auto Trading Đa Nền Tảng” để nhận trọn bộ Source Code mẫu chuẩn công nghiệp này.