Checklist 25 điểm trước khi cho bot chạy tiền thật
Backtest đẹp. Demo hai tuần xanh. Bạn bấm nút chuyển sang tài khoản tiền thật — và trong 3 ngày đầu, bot làm đúng những thứ chưa từng xuất hiện ở demo: vào lệnh lệch giá, gấp đôi khối lượng, quên mất lệnh đang mở sau khi VPS khởi động lại.
Bài này là danh sách 25 điểm tôi dùng để kiểm tra trước khi cho một con bot cầm tiền thật, chia thành 4 nhóm: tài khoản & broker, thông số symbol & logic, rủi ro & tiền, hạ tầng & vận hành. Mỗi điểm đều kèm cách kiểm tra cụ thể và code Python cho những điểm có thể tự động hoá.
Vì sao demo xanh mà tiền thật lại đỏ?
Có một câu dễ gây hiểu nhầm: "Bot của tôi chạy demo tốt mà". Demo không phải bản sao của tiền thật, nó chỉ là một môi trường khác. Ba nhóm khác biệt lớn nhất:
1. Môi trường khớp lệnh khác. Tài khoản demo thường có spread mỏng, khớp lệnh tức thì, không trượt giá. Tiền thật có spread giãn lúc tin ra, có slippage, có lúc broker từ chối lệnh (requote, reject, off quotes). Bot không xử lý những tình huống này thì không sai logic — nó chỉ chưa từng gặp tình huống đó.
2. Cấu hình tài khoản khác. Server demo và server live là hai server khác nhau. Cùng broker nhưng stop level, lot step, contract size, chế độ hedging/netting có thể khác. Đây là lý do phổ biến nhất khiến bot chạy đúng ở demo nhưng sai khối lượng ở live.
3. Vận hành khác. Khi tiền thật, bạn quan tâm đến việc "bot còn sống không" — và đó lại là thứ khó biết nhất. Bot chết âm thầm lúc 3h sáng không báo lỗi cho ai cả.
Checklist dưới đây được thiết kế để trả lời cả 3 nhóm trên, theo thứ tự có thể thực thi: kiểm tra môi trường trước, kiểm tra logic sau, kiểm tra tiền cuối cùng.
A. Tài khoản & broker (7 điểm)
1. Đúng loại tài khoản và đúng server
Tài khoản demo và tài khoản live của cùng một broker thường nằm ở server khác nhau (ví dụ Broker-Demo và Broker-Live02). Đừng chỉ đổi login/password — phải kiểm tra lại:
- Loại tài khoản:
Standard,Raw/ECN,Cent,Swap-free— mỗi loại một bộ thông số. - Đơn vị tiền tệ tài khoản (USD, EUR, VND) — ảnh hưởng trực tiếp đến cách tính rủi ro.
- Đòn bẩy của tài khoản live thường khác demo (nhiều broker cho demo đòn bẩy cao hơn).
Cách kiểm tra: đăng nhập tài khoản live bằng tay trước, mở đúng symbol bot sẽ giao dịch, chụp lại bảng Specifications rồi so với demo từng dòng.
2. Đo spread thực tế theo giờ, không lấy lúc thị trường đẹp
Đừng đo spread lúc 21h phiên London–New York. Hãy đo spread trung bình và lớn nhất trong 24 giờ, đặc biệt ở các mốc bot hay chạy: 3h–5h sáng (phiên Á mỏng), quanh tin lớn, và quanh rollover.
# Do spread trung binh / lon nhat theo gio (chay tren may co MetaTrader 5)
import time
from collections import defaultdict
import MetaTrader5 as mt5
SYMBOL = "XAUUSD"
mt5.initialize()
stats = defaultdict(list)
for _ in range(720): # ~2 gio, 10 giay/lan
info = mt5.symbol_info(SYMBOL)
if info:
spread = (info.ask - info.bid) / info.point # spread theo point
stats[time.localtime().tm_hour].append(spread)
time.sleep(10)
for hour in sorted(stats):
s = stats[hour]
print(f"{hour:02d}h trung binh {sum(s)/len(s):6.1f} point | lon nhat {max(s):6.1f} point")
mt5.shutdown()Ngưỡng áp dụng: nếu spread lớn nhất trong ngày lớn hơn 3 lần spread trung bình, bot phải có cơ chế không giao dịch khi spread vượt ngưỡng đó — chứ không chỉ đặt max_spread cho vui.
3. Stop level và freeze level của broker
SYMBOL_TRADE_STOPS_LEVEL là khoảng cách tối thiểu giữa giá hiện tại và SL/TP. Bot đặt SL quá gần → broker từ chối lệnh với lỗi Invalid stops (mã 10016). Đây là lỗi hay gặp nhất khi bot được viết trên broker này rồi đem sang broker khác.
Cách kiểm tra: in trade_stops_level và nhân với point để ra khoảng cách thực (theo giá), rồi so với SL gần nhất mà bot có thể đặt.
4. Lot step, min/max lot và contract size
Ba thông số này quyết định khối lượng bot thực sự gửi đi:
| Thông số | Ý nghĩa | Lỗi thường gặp |
|---|---|---|
volume_min | Khối lượng nhỏ nhất | Bot tính ra 0.005 lot → broker từ chối |
volume_step | Bước nhảy khối lượng | Bot gửi 0.017 lot → broker tự làm tròn thành 0.02 |
volume_max | Khối lượng lớn nhất | Gấp lệnh DCA quá tay → lệnh bị từ chối giữa chuỗi |
trade_contract_size | 1 lot = bao nhiêu đơn vị | Tính sai pip value → sai luôn rủi ro |
Quy tắc: mọi phép tính khối lượng phải làm tròn xuống theo `volume_step`, không phải làm tròn gần nhất. Làm tròn lên là tự tăng rủi ro ngoài kế hoạch.
5. Kiểm tra margin cho lệnh LỚN NHẤT (không phải lệnh đầu tiên)
Nhiều bot chỉ kiểm tra margin đủ cho lệnh đầu, nhưng chết ở lệnh thứ 5 của chiến lược gấp/DCA. Hãy tính margin cho tổng khối lượng tệ nhất mà chiến lược có thể mở (ví dụ 7 lệnh DCA với hệ số 1.5), ở mức đòn bẩy thật của tài khoản live.
Nếu tổng margin đó vượt quá ~50% equity, chiến lược của bạn không cần thị trường xấu để chết — chỉ cần một chuỗi DCA bình thường.
6. Chế độ hedging hay netting (quan trọng nhất với bot hedging)
MT5 có 2 chế độ tài khoản, và bot hedging chỉ chạy đúng ở chế độ hedging:
- Hedging: mở được nhiều lệnh cùng chiều, mỗi lệnh có ticket riêng, SL/TP riêng.
- Netting: chỉ có một vị thế ròng cho mỗi symbol. Lệnh ngược chiều sẽ đóng bớt vị thế thay vì mở lệnh mới.
Trên tài khoản netting, bot DCA/hedging sẽ làm ra kết quả hoàn toàn khác — có khi nó "tự đóng" lệnh của chính mình mà bạn không hiểu vì sao. Cách kiểm tra: ACCOUNT_MARGIN_MODE phải trả về RETAIL_HEDGING.
7. Quy định của broker với bot và tần suất gửi lệnh
Đọc kỹ điều khoản về giao dịch tự động. Ba thứ cần xác nhận:
- Broker có cho phép EA/bot không (đa số có, một số broker prop-firm thì cấm).
- Giới hạn số lệnh/giây hoặc số lệnh/ngày (nhiều broker giới hạn ngầm — gửi quá nhanh sẽ bị tạm khoá API).
- Có yêu cầu IP whitelist không — nếu VPS của bot đổi IP (bạn đổi VPS, hoặc VPS bị cấp IP mới), bot có thể bị chặn kết nối.
B. Thông số symbol & logic (6 điểm)
8. Digits, Point, TickSize, TickValue — sai một bậc là sai 10 lần
Đây là nhóm lỗi tốn tiền nhất. Bảng phân biệt:
| Thông số | XAUUSD thường gặp | USDJPY |
|---|---|---|
digits | 2 | 3 |
point | 0.01 | 0.001 |
tick_size | 0.01 | 0.001 |
tick_value | 1.0 USD / 1 lot | ~0.67 USD / 1 lot |
Nếu code hardcode point = 0.0001 (theo thói quen Forex 4 số) rồi đem chạy trên XAUUSD, mọi khoảng cách SL/TP và khối lượng của bạn sẽ sai 100 lần.
Quy tắc vàng: không bao giờ hardcode point, digits, tick_value. Luôn đọc từ symbol_info tại thời điểm chạy và ghi lại log những giá trị đó ở lần khởi động đầu tiên của bot.
9. Giờ giao dịch, rollover và cuối tuần
Bot cần biết khi nào không được giao dịch:
- Thị trường đóng (weekend) — lệnh market sẽ bị từ chối.
- Rollover (thường 5h–6h sáng giờ server): swap được tính, spread giãn mạnh, thanh khoản mỏng.
- 30 phút trước/sau tin lớn (theo lịch kinh tế) nếu chiến lược không dành cho tin.
Cách kiểm tra: log lại TimeCurrent() và giờ server khi bot vào lệnh, rồi đối chiếu xem có lệnh nào rơi vào 3 khung giờ trên trong 2 tuần demo. Rất nhiều bot "lỗ bất thường" chỉ vì vài lệnh khớp lúc spread giãn.
10. Slippage trong backtest có khớp thực tế không?
Backtest mặc định thường giả lập sai thực tế một cách vô tình:
- Khớp lệnh tại giá yêu cầu thay vì giá thị trường ngoài phạm vi.
- Không mô phỏng
requote(giá yêu cầu không còn hợp lệ). - Không tính độ trễ: bot trên VPS của bạn ở Frankfurt, server broker ở London — lệnh bạn gửi đi mất 20–80ms, giá có thể đã đổi.
Hãy đặt backtest với slippage tệ nhất có thể (ví dụ 1–2 lần spread) rồi xem chiến lược còn dương không. Nếu chỉ cần thêm nửa spread là hết lãi, chiến lược đó chưa đủ bền để chạy tiền thật.
11. Xử lý requote, reject, partial fill
Bot phải phân biệt rõ 3 loại phản hồi từ broker và có hành vi riêng:
- `10004 Requote` — giá đổi. Cách xử lý đúng: đọc lại giá, kiểm tra còn trong ngưỡng cho phép, gửi lại tối đa N lần (thường 2–3).
- `10006 Reject` — bị từ chối. Không được gửi lại vô hạn; phải log và dừng chuỗi.
- `10030 Partial fill` / `10008 Placed` một phần — chỉ khớp một phần khối lượng. Bot phải tính lại khối lượng thực còn lại, nếu không sẽ gấp đôi vị thế khi nó retry.
Quy tắc: mọi vòng retry phải đếm số lần, và có giới hạn cứng. Bot gửi lại lệnh không giới hạn là cách nhanh nhất để cháy tài khoản.
12. Trạng thái lệnh sau khi mất kết nối
Đây là điểm bị bỏ qua nhiều nhất. Kịch bản: bot gửi lệnh → mất mạng 3 giây → bot không nhận được phản hồi. Câu hỏi sống còn: lệnh đã khớp hay chưa?
Bot đúng phải làm như sau khi khởi động lại hoặc sau khi có sự cố mạng:
- Đọc toàn bộ vị thế đang mở hiện tại từ broker (
positions_get()). - Đối chiếu với trạng thái nội bộ mà bot ghi trong file/DB.
- Nếu lệch → lấy broker làm chuẩn, đánh dấu bất đồng vào log, và chỉ hành động tiếp khi đã đồng bộ.
Bot lấy trạng thái nội bộ làm chuẩn sẽ "quên" lệnh đã khớp, rồi mở lệnh thứ hai — chính là lỗi gấp đôi vị thế rất hay gặp.
13. Chống gửi trùng lệnh khi bot restart
Có 2 công cụ bắt buộc:
- Magic number riêng cho từng bot/chiến lược:
positions_get()chỉ lọc lệnh của mình, không nhầm với lệnh đánh tay. - Comment/tag trên lệnh, ví dụ
FM_GRID_02. Khi bot khởi động lại, nó chỉ được phép tiếp tục chuỗi đã có, không được bắt đầu chuỗi mới cùng tag.
Ngoài ra nên có khoá một instance: chỉ một tiến trình bot được chạy. Hai instance cùng chạy là thảm hoạ — mỗi cái tưởng mình chưa mở lệnh và cả hai cùng mở.
C. Rủi ro & tiền (5 điểm)
14. Rủi ro theo % equity, không theo lot cố định
Đặt lot cố định 0.10 nghĩa là: tài khoản 1.000$ rủi ro 2%, tài khoản 10.000$ cũng 0.10 lot nhưng rủi ro chỉ 0.2%. Khối lượng phải tính ngược từ rủi ro:
def tinh_lot(equity: float, risk_percent: float, sl_points: float,
tick_value: float, tick_size: float) -> float:
"""Khoi luong = (equity * risk%) / (khoang SL tinh theo gia * gia tri 1 don vi)"""
risk_money = equity * risk_percent / 100.0
sl_price_distance = sl_points * tick_size # doi point -> khoang gia
loss_per_lot = sl_price_distance * (tick_value / tick_size)
if loss_per_lot <= 0:
return 0.0
return risk_money / loss_per_lotSau đó làm tròn xuống theo volume_step, và kiểm tra volume_min — có trường hợp tài khoản nhỏ đến mức lot tối thiểu đã vượt rủi ro cho phép. Lúc đó câu trả lời đúng là không vào lệnh, không phải vào với lot tối thiểu.
15. Giới hạn lỗ trong ngày
Đặt một ngưỡng cứng: lỗ trong ngày vượt X% (thường 3–5%) thì tự dừng đến hết ngày. Ngưỡng này phải được bot tự kiểm tra mỗi vòng lặp, không phụ thuộc vào việc bạn ngồi xem.
Điểm cần lưu ý khi code: phải so với số dư đầu ngày (lấy lúc 0h giờ server và lưu lại), không so với equity hiện tại — vì equity trôi theo lệnh đang mở sẽ làm ngưỡng bị lệch.
16. Giới hạn drawdown và hành vi khi chạm ngưỡng
Ba mức cần định nghĩa trước, chứ không phải nghĩ ra lúc đang cháy:
| Mức | Hành vi |
|---|---|
| −5% | Cảnh báo cho bạn, giảm lot còn 50% |
| −10% | Dừng mở lệnh mới, chỉ quản lý lệnh hiện có |
| −15% | Đóng toàn bộ và dừng bot hẳn, chờ người xử lý |
17. Tổng số lệnh tối đa và tổng exposure
Giới hạn số lệnh đang mở cùng lúc và tổng khối lượng theo một chiều. Với bot chạy nhiều symbol, hãy giới hạn cả tổng rủi ro danh mục:
Nếu bot chạy 5 symbol, mỗi lệnh rủi ro 2% và chúng tương quan cao (ví dụ 5 cặp cùng liên quan USD), thì khi USD biến động mạnh bạn không lỗ 2% một lệnh — bạn lỗ 10% cùng lúc.
18. Kịch bản dừng khẩn cấp phải hoạt động khi bot treo
Bot treo là chuyện bình thường (script lỗi, treo request, VPS chậm). Vì vậy cách dừng khẩn cấp không được phụ thuộc vào bot:
- Có khả năng đóng toàn bộ lệnh từ bên ngoài kể cả khi bot không phản hồi.
- Có người thứ hai biết cách bấm nút đó.
- Có tài liệu 1 trang: vào đâu, bấm gì, ai gọi ai.
Nếu kịch bản duy nhất của bạn là "mở teamviewer vào VPS rồi tắt bot", bạn đang phụ thuộc vào việc máy đó còn bật và mạng nhà còn sống.
D. Hạ tầng & vận hành (7 điểm)
19. VPS: cấu hình, vị trí và uptime
- Cấu hình thực tế: MT5 + bot + terminal chạy nhiều chart cần tối thiểu 2 vCPU / 4 GB RAM / SSD.
- Vị trí đặt VPS nên gần server broker (cùng khu vực) để giảm độ trễ — chênh lệch 50ms mỗi lệnh là chênh lệch giá thật với bot tần suất cao.
- Kiểm tra cam kết uptime và hành vi khi VPS bảo trì: bạn có được thông báo trước không?
Như đã nói ở bài Vì sao bot trading cần VPS và cách vận hành 24/7, VPS là điều kiện cần — nhưng điều kiện đủ là phải biết nó còn sống hay không.
20. Tắt auto-update và auto-reboot của Windows
Windows tự cập nhật rồi khởi động lại là "sát thủ" số một của bot chạy tiền thật, và nó thường rơi vào 2h–4h sáng. Cần:
- Đặt Active Hours và tắt cập nhật tự động khởi động lại.
- Tắt
Fast Startupnếu bot cần khởi động lại sạch. - Chuyển Power Plan sang
High Performancevà tắt sleep/hibernate cho ổ đĩa và USB (một số VPS treo khi ổ đĩa ngủ).
21. MT5: AutoTrading, EA attach đúng chart, đúng timeframe
Ba lỗi im lặng nhất:
- Nút AutoTrading bị tắt — MT5 vẫn mở, EA vẫn hiện mặt cười, nhưng không lệnh nào được gửi.
- EA không nằm trên chart đúng (bị kéo nhầm timeframe, hoặc thuộc tính hết hạn).
- Thuộc tính EA:
Allow live tradingbị bỏ tick, hoặc giới hạn danh sách symbol.
Cách kiểm tra tự động: EA nên ghi log định kỳ "tôi còn sống" (heartbeat) ra file, kèm trạng thái TerminalInfoInteger(TERMINAL_TRADE_ALLOWED). Chỉ số này là bằng chứng khách quan cho câu hỏi "chart có đang chạy không".
22. Tự khởi động sau khi reboot (và tự đăng nhập MT5)
Bot phải tự sống lại nếu VPS reboot vì lý do ngoài kế hoạch:
- Task Scheduler: chạy khi system startup, không chỉ khi user logon.
- MT5 cần được cấu hình lưu tài khoản và tự kết nối lại.
- Bot nên có cơ chế chờ: đợi MT5 kết nối xong mới bắt đầu (kiểm tra
terminal_info().connectedvới timeout).
23. Log: biết đọc ở đâu khi bot sai
Không có log nghĩa là không có khả năng sửa lỗi. Log tối thiểu phải ghi:
- Mỗi lần vào/ra lệnh: symbol, khối lượng, giá, mã phản hồi của broker, độ trễ.
- Mỗi lần bot khởi động: version, thông số symbol đã đọc, trạng thái đồng bộ với broker.
- Có rotation (theo ngày hoặc theo dung lượng) để VPS không bị đầy ổ.
Đây cũng là dữ liệu duy nhất cho phép bạn tái dựng chuyện gì đã xảy ra lúc 3h sáng.
24. Cảnh báo: có kênh báo khi bot chết, và phải kiểm tra kênh đó
Có cảnh báo mà không kiểm tra lại còn tệ hơn không có, vì bạn tin là mình an toàn. Ba bài kiểm tra bắt buộc trước khi chạy tiền thật:
- Bài kiểm tra kênh: gửi thử một cảnh báo giả, xác nhận bạn nhận được.
- Bài kiểm tra ngắt: tắt MT5 (hoặc rút mạng) xem cảnh báo có tới trong vòng 1–2 phút không.
- Bài kiểm tra ngủ: để điện thoại cách xa bạn, bật chuông cho kênh cảnh báo — vì cảnh báo lúc 3h sáng mà bạn không nghe thấy thì bằng không.
Với bot cầm tiền thật, tôi dùng Telegram để báo sự cố và một VPS riêng đứng canh VPS của bot (VPS canh VPS phải ở nơi khác, không cùng nhà cung cấp, để sự cố của nhà cung cấp không làm cả hai chết cùng lúc).
25. Kế hoạch rollback và người chịu trách nhiệm lúc 3h sáng
Câu hỏi cuối cùng, và là câu hỏi quyết định: khi có sự cố lúc 3h sáng, ai xử lý?
- Ngưỡng nào thì tự động về demo? (thường: lỗ vượt kế hoạch, hoặc bot hành vi bất thường)
- Bao lâu không xử lý được thì chuyển sang phương án dừng hẳn?
- File nào ghi lại những gì đã xảy ra để sáng mai xem?
Nếu câu trả lời là "để sáng mai xem", bạn chưa có kế hoạch vận hành — bạn đang có một kỳ vọng.
Bảng checklist 25 điểm (in và tích)
| # | Nhóm | Điểm kiểm tra | Xong |
|---|---|---|---|
| 1 | Tài khoản | Đúng server/loại tài khoản/đòn bẩy live | ☐ |
| 2 | Tài khoản | Đo spread theo giờ (trung bình + lớn nhất) | ☐ |
| 3 | Tài khoản | Stop level / freeze level của broker | ☐ |
| 4 | Tài khoản | Lot step, min/max lot, contract size | ☐ |
| 5 | Tài khoản | Margin cho chuỗi lệnh tệ nhất | ☐ |
| 6 | Tài khoản | Chế độ hedging vs netting | ☐ |
| 7 | Tài khoản | Điều khoản bot, giới hạn tần suất, IP whitelist | ☐ |
| 8 | Symbol & logic | Digits/Point/TickSize/TickValue (không hardcode) | ☐ |
| 9 | Symbol & logic | Giờ giao dịch, rollover, cuối tuần | ☐ |
| 10 | Symbol & logic | Slippage backtest khớp thực tế | ☐ |
| 11 | Symbol & logic | Xử lý requote/reject/partial fill có giới hạn | ☐ |
| 12 | Symbol & logic | Đồng bộ trạng thái lệnh sau mất kết nối | ☐ |
| 13 | Symbol & logic | Chống gửi trùng (magic + tag + 1 instance) | ☐ |
| 14 | Rủi ro | Lot tính từ % equity, làm tròn xuống | ☐ |
| 15 | Rủi ro | Giới hạn lỗ ngày (theo số dư đầu ngày) | ☐ |
| 16 | Rủi ro | 3 mức drawdown + hành vi tương ứng | ☐ |
| 17 | Rủi ro | Giới hạn số lệnh và tổng exposure | ☐ |
| 18 | Rủi ro | Kill switch không phụ thuộc bot | ☐ |
| 19 | Hạ tầng | VPS đủ cấu hình, gần broker, uptime | ☐ |
| 20 | Hạ tầng | Tắt auto-update/auto-reboot/sleep | ☐ |
| 21 | Hạ tầng | AutoTrading + EA đúng chart + heartbeat | ☐ |
| 22 | Hạ tầng | Tự khởi động lại sau reboot | ☐ |
| 23 | Hạ tầng | Log đầy đủ + rotation | ☐ |
| 24 | Hạ tầng | Cảnh báo + đã kiểm tra bằng bài kiểm tra ngắt | ☐ |
| 25 | Hạ tầng | Kế hoạch rollback + người chịu trách nhiệm | ☐ |
Quy trình chạy checklist này trong 2 tuần
Đừng kiểm tra 25 điểm trong một buổi tối — làm 3 vòng, mỗi vòng có mục tiêu rõ:
Vòng 1 — Môi trường (1 buổi, trên tài khoản live với lot nhỏ nhất):
Điểm 1 → 7. Mục tiêu: biết chính xác môi trường khớp lệnh thật. Chạy 5 lệnh nhỏ bằng tay để cảm nhận spread và độ trễ; đừng tin bảng thông số, hãy tin giá khớp thực tế.
Vòng 2 — Logic (1–2 tuần trên demo mô phỏng xấu):
Điểm 8 → 13. Mục tiêu: làm bot thất bại một cách có kiểm soát — rút mạng giữa lúc gửi lệnh, tắt MT5 đột ngột, restart bot khi đang có lệnh mở, đẩy spread lên cao. Đây là giai đoạn duy nhất bạn được phép phá hoại hệ thống của mình.
Vòng 3 — Tiền thật (2 tuần với lot tối thiểu):
Điểm 14 → 25. Mục tiêu: vận hành thật trong điều kiện bình thường, nhưng với khối lượng nhỏ đến mức sai sót không gây hậu quả. Trong 2 tuần này, cái bạn đánh giá không phải lợi nhuận — mà là số lần bạn phải can thiệp bằng tay. Nếu phải can thiệp nhiều hơn 1 lần/tuần, vấn đề nằm ở hạ tầng hoặc cảnh báo, chưa phải ở chiến lược.
5 điểm bị bỏ qua nhiều nhất (theo thực tế)
- Chế độ hedging/netting (điểm 6) — bot hedging chạy trên tài khoản netting cho kết quả vô nghĩa, và bạn sẽ tưởng chiến lược hỏng.
- TickSize/TickValue (điểm 8) — sai một bậc, khối lượng sai 10 lần. Không thể phát hiện bằng mắt nếu không in log.
- Gửi trùng sau restart (điểm 13) — không có magic number, bot restart là mở lại chuỗi lệnh đã có.
- Spread lúc rollover (điểm 9) — lệnh khớp lúc 5h sáng với spread gấp 5 lần bình thường; chiến lược scalping chết vì điều này.
- Cảnh báo không được kiểm tra lại (điểm 24) — có cảnh báo, nhưng chưa từng thử tắt MT5 để xem nó có thật sự gửi.
Câu hỏi thường gặp
Bot chạy demo 2 tuần có lãi, vậy cần checklist này không?
Cần — và cần hơn cả khi demo lỗ. Demo lãi thường là do môi trường khớp lệnh dễ: spread mỏng, không trượt giá, không requote. Checklist này chủ yếu kiểm tra những thứ demo không có, nên nó không mâu thuẫn với việc demo xanh.
Tôi dùng cBot của cTrader thì có cần kiểm tra mấy điểm này không?
Phần tài khoản và hạ tầng thì giống hoàn toàn. Riêng phần symbol, cTrader có Symbol API trả về tick size/value tương tự — nguyên tắc "không hardcode" vẫn áp dụng. Khác biệt chính nằm ở chỗ cTrader không có chế độ netting/hedging theo tài khoản như MT5 mà quản lý vị thế theo cách riêng.
Làm sao biết bot còn sống khi tôi không ngồi trước máy?
Bạn cần một tín hiệu từ bên trong chart (EA ghi heartbeat kèm trạng thái AutoTrading) chứ không chỉ "VPS còn online". VPS online mà MT5 đã tắt là kịch bản rất thường gặp: máy vẫn sống, bot đã chết.
Ngưỡng lỗ ngày nên đặt bao nhiêu?
Không có con số đúng cho mọi người, nhưng có một cách chọn: lấy mức lỗ khiến bạn mất ngủ rồi chia ba. Nếu bạn thấy bình thường khi mất 3% một ngày, đặt ngưỡng dừng ở 5% và xem lại sau 1 tháng.
Bao lâu thì nên chạy lại checklist?
Mỗi lần thay đổi môi trường: đổi broker, đổi VPS, đổi chế độ tài khoản, hoặc nâng cấp bot. Thông số broker thay đổi mà không thông báo là chuyện có thật, nên tối thiểu 6 tháng nên chạy lại vòng 1.
Tóm lại
25 điểm này không phải để làm bot của bạn phức tạp hơn. Chúng tồn tại vì thị trường không cần bot của bạn sai logic để lấy tiền của bạn — chỉ cần môi trường khác một chút, hoặc bot chết vào đúng đêm thị trường biến động.
Nếu bạn chỉ làm được 3 việc trong danh sách này, hãy làm: kiểm tra chế độ hedging/netting (6), không hardcode thông số symbol (8), và có cảnh báo thật sự hoạt động khi bot chết (24). Ba điểm đó là ba cách chết tốn kém nhất và cũng khó phát hiện nhất.
Phần hạ tầng — biết bot còn sống hay đã chết, báo động trong khoảng 30 giây, và có log để đọc lại — là phần tôi làm thành sản phẩm Find Me VPS Guardian: Agent trên VPS, EA Watchdog trên chart, cảnh báo Telegram/Email và khởi động lại MT5 từ xa. Nếu bạn chỉ muốn tự làm, bài Checklist VPS cho bot 24/7 có hướng dẫn dựng từ đầu.
Và nếu bạn đang tìm chỗ học để viết bot cho đúng ngay từ đầu — từ lấy dữ liệu balance/equity, cấu trúc module, đến kiểm soát lỗi — xem lộ trình ở khóa học lập trình bot auto trading. Còn bản đọc để hiểu vì sao bot thắng ở demo nhưng thua ở tiền thật thì nằm trong sách 5ME – FIND ME: Từ Xác Suất Đến Lợi Thế.
Weekly Digest — Nhận Bản Tin Hàng Tuần
Nhận các bài viết phân tích kỹ thuật chuyên sâu, thuật toán giao dịch tự động (Trading Bot) và các giải pháp công nghệ mới nhất từ Hướng Nghiệp Dữ Liệu.
