Mục lục
Nội dung này phục vụ mục đích giáo dục, không phải lời khuyên đầu tư, gợi ý EA hoặc hướng dẫn bật robot trên tài khoản thật.
Trả lời ngắn: Sai lầm có thể xảy ra ở cả vòng đời EA: chọn theo quảng cáo, cài file không rõ nguồn, dùng cấu hình sai phiên bản, thử nghiệm sai dữ liệu, cấp quyền quá rộng, bỏ theo dõi hoặc tự chạy lại khi chưa kiểm tra tài khoản.
Cách phòng là yêu cầu bằng chứng và đặt điểm dừng ở từng giai đoạn.
Đọc xong, bạn sẽ hiểu:
- 12 lỗi nằm ở giai đoạn nào.
- Vì sao “thử nhỏ” không sửa thiếu evidence.
- Monitoring/recovery khác chạy được ra sao.
- Cách làm pre-mortem trước khi attach EA.
1. Sai lầm là failure của lifecycle
a. Bảy giai đoạn
SELECT → INSTALL → CONFIGURE → TEST → RUN → MONITOR → RECOVER
Mỗi stage có input, evidence và stop condition. EA không nên đi tiếp chỉ vì stage trước “không báo lỗi”.
Hình 1 — Mỗi giai đoạn cần bằng chứng riêng; pass trước không tự mở gate sau.
b. Symptom, root cause, control
Ví dụ symptom: EA không mở action. Root cause có thể:
- signal WAIT;
- pre-trade BLOCK;
- AutoTrading off;
- session closed;
- init failed;
- no connection.
Tăng risk/input để “bắt nó chạy” là chữa symptom. Control đúng là log reason, trace lifecycle và sửa root cause.
c. “Thử nhỏ” vẫn có risk loại khác
Size nhỏ giảm một phần market exposure nhưng không giảm malware risk, credential leakage, duplicate actions, wrong-symbol behavior hay operational confusion. Không dùng size để thay source review/test.
d. Evidence ladder không cho vay điểm
Compile pass không bù source mơ hồ. Backtest đẹp không bù logic fail. Demo ổn không bù monitoring chết. Mỗi gate độc lập vì nó kiểm failure mode khác.
Một cách ghi:
SELECT: FAIL | INSTALL: NOT STARTED | CONFIGURE: NOT STARTED
Không ghi tổng 70% rồi đi tiếp. Gate fail đóng các stage sau cho tới khi evidence được sửa.
2. Sai lầm ở Select, Install và Configure
a. #1 Chọn bằng screenshot/equity curve
Screenshot thiếu passport, raw trades, costs, drawdown type và search process. Curve đẹp có thể là selected run.
Stop condition: không có report/log/passport → STOP — EVIDENCE MISSING.
b. #2 Tin tên strategy/AI/low risk
Tên marketing không nói edge, regime, sizing, failure. “AI” cũng không chứng minh model/data/governance.
Control: strategy card EDGE / REGIME / HOLDING / EXECUTION / FAILURE.
c. #3 Cài file không rõ nguồn
File .ex5 vẫn là software chạy trong terminal. Unknown source/version/hash/license behavior là supply-chain risk.
MetaTrader 5 hướng dẫn các nguồn tìm robots nhưng user vẫn phải đánh giá provenance và test. MetaTrader 5 Help — Where to Find Trading Robots
Control: source, vendor identity, version, checksum, change notes, quarantine/test environment; không cấp DLL/WebRequest nếu chưa cần.
d. #4 Copy preset khác version
Tên input giữ nguyên nhưng unit/default/semantics có thể đổi. Preset v1 + EA v2 là configuration drift.
Control: schema/version match, startup effective config, validation.
e. #5 Đoán unit và zero semantics
15 là point/pip/second? 0 là off/invalid/zero thật? Đoán sai có thể tắt control.
OnInit nên validate và trả failure khi input invalid. MQL5 Reference — OnInit
f. #6 Cấp quyền quá rộng
AutoTrading, DLL, WebRequest hoặc file access là permission khác nhau. “EA yêu cầu” chưa phải lý do.
Control: least privilege, allowlist, documented endpoint, no secret in logs.
g. Không đọc journal/init log
EA attach nhưng OnInit fail, handle không tạo hoặc input bị reject. User chỉ nhìn chart rồi nghĩ “market chưa có tín hiệu”.
Control: mỗi startup phải có version, effective config, permission, dependency và INIT_OK/FAIL_REASON. Không có init evidence thì status là unknown.
Hình 2 — Red flag giúp chặn sớm trước khi lỗi biến thành side effect.
3. Sai lầm ở Test, Run, Monitor và Recover
a. #7 Chỉ xem profit, không kiểm logic
EA có thể có profit report dù duplicate, look-ahead hoặc result handling sai.
Control: Given/When/Then cases, expected logs, verify before validation.
b. #8 Tune trên holdout
Mở holdout, chỉnh input rồi chạy lại khiến holdout thành development. Gọi nó “out-of-sample” là sai evidence.
Strategy Tester hỗ trợ single test và optimization; cách phân data/selection thuộc test design. MetaTrader 5 Help — Strategy Testing
Control: freeze design, untouched holdout, search log.
c. #9 Chuyển từ backtest thẳng live
Backtest không test đủ connection, server reject, latency, operational restart và alert. Evidence ladder cần compile → logic → history → holdout → demo/forward → live gate riêng.
Control: không nhảy bậc; mỗi bậc có acceptance criteria.
d. #10 Chạy rồi không monitor
Chart còn mở không chứng minh EA healthy. Cần heartbeat, last event, connection, queue lag, request/result, position reconcile, disk/log và alert delivery.
Control: liveness + correctness monitoring; test alert channel.
e. #11 Auto-resume sau restart
Memory reset nhưng account có position/order. EA mặc định IDLE có thể duplicate.
Control: startup reconcile; unknown state → SAFE/HALT; manual acknowledgement.
f. #12 Không có recovery/runbook
Biết halt nhưng không biết ai xử lý, snapshot ở đâu, reset thế nào. Operator dễ bấm bật lại.
Control: incident card trigger / owner / containment / evidence / recovery.
g. Dùng cùng một account cho test lẫn vận hành
Nhiều EA/manual action cùng account làm ownership mơ hồ. Magic/comment không phải security boundary; close/modify từ công cụ khác vẫn có thể ảnh hưởng.
Control: environment separation, explicit ownership, account-level observer và change window. Khi không tách được, mọi position/order phải map owner hoặc gắn orphan.
h. Không pin version/data
EA/preset/tester/data tự đổi giữa các lần. User so report nhưng không biết drift.
Control: release manifest, hashes, build, data date và change log; khi drift, tạo baseline mới.
4. Bẫy nhận thức và giới hạn
a. Automation bias
Automation bias là xu hướng tin output máy hơn bằng chứng khác. EA chạy đều dễ tạo cảm giác khách quan. Nhưng rule/data có thể sai.
Control: independent checks, visible reason codes, human review cho exceptional state.
b. Recency và outcome bias
Ba tuần lời khiến user tăng confidence; một tuần lỗ khiến đổi preset. Sample ngắn không nói regime distribution.
Outcome bias là đánh giá quyết định chỉ theo kết quả. Risk block đúng nhưng trade sau đó “đáng lẽ lời” vẫn là control đúng.
Control: review process compliance trước outcome.
c. Sunk-cost và escalation
Đã mua EA/đã tune lâu khiến user tiếp tục dù evidence fail. Đây là sunk-cost bias.
Control: pre-defined reject gates và owner không trực tiếp gắn doanh số.
d. Survivorship/selection
Chỉ thấy EA còn được quảng bá; failures biến mất. Chỉ nhìn best presets là selection bias.
Control: hỏi search space, failed runs, full period và raw artifacts.
e. Giới hạn của checklist
Checklist không phát hiện mọi bug, malware hay market regime. Tick đủ ô có thể thành ritual.
Câu chắc chắn: checklist giảm omission trong scope đã viết.
Câu có điều kiện: nếu evidence thật và reviewer độc lập, lifecycle gates tăng reliability — không guarantee.
f. Normalization of deviance
Một alert lặp nhưng “chưa gây loss” dễ bị coi bình thường. Đây là normalization of deviance: lệch chuẩn trở thành thói quen vì hậu quả chưa xuất hiện.
Control: alert budget, aging, owner và escalation. UNKNOWN_RESULT phải giữ severity cho tới reconcile, không tự close vì equity chưa đổi.
g. Hindsight sửa câu chuyện
Sau failure, user có thể nói “EA vốn không dành cho regime này” dù trước đó không có regime rule. Đó là hindsight.
Control: hypothesis/regime/failure được timestamp trước run. Thay đổi sau failure là version mới, không rewrite plan cũ.
5. Checklist và pre-mortem lab
a. Checklist 12 câu
- Source/version/hash?
- Strategy card đủ?
- Permissions tối thiểu?
- Preset/schema match?
- Unit/range/dependency?
- Logic cases pass?
- Holdout untouched?
- Cost/execution stress?
- Monitoring/heartbeat?
- Reconcile restart?
- Kill/HALT semantics?
- Recovery owner/evidence?
b. Pre-mortem
Pre-mortem giả định hệ thống đã fail, rồi hỏi failure nào xảy ra, dấu hiệu sớm, control, evidence và owner.
Hình 3 — Pre-mortem buộc ta thiết kế cách nhìn thấy lỗi trước khi lỗi thật xảy ra.
c. Bài tập 10–15 phút
Dùng giấy/Sheets, không terminal/account/tiền thật.
Mẫu đối chiếu đã điền
| Stage | Red flag | Evidence thiếu | Action |
|---|---|---|---|
| Select | chỉ screenshot | raw report/passport | STOP |
| Install | nguồn/hash mơ hồ | provenance | QUARANTINE |
| Configure | preset khác version | schema/version | REJECT |
| Test | tune trên holdout | untouched sample | RESET DESIGN |
| Run | permission rộng | least privilege | BLOCK |
| Monitor | no heartbeat | liveness evidence | HALT |
| Recover | auto-resume unknown state | reconcile | SAFE |
Chọn row Recover, viết failure: duplicate action; early sign: internal state empty nhưng account position tồn tại; control: reconcile; owner: operator/system owner.
d. Red-flag register
Thêm severity, detected_at, owner, resolution và evidence link. Một flag chỉ close khi evidence tồn tại, không khi “đã xem”.
Kết quả mong đợi là stop/review queue, không phải quyết định dùng EA.
e. Điểm dừng
Dừng nếu source, passport, permission, holdout, monitoring hoặc recovery thiếu. Không bù bằng size nhỏ.
Trước khi bỏ điểm dừng, người duyệt phải trả lời ba câu: bằng chứng mới là gì, ai kiểm độc lập, và failure cũ đã được tái hiện rồi đóng bằng test nào. Ví dụ, đổi AUTO-RESUME thành SAFE chưa đủ nếu startup test vẫn không dựng lại tình huống account còn position nhưng bộ nhớ EA trống. Khi chưa có artifact trả lời ba câu này, trạng thái vẫn là STOP, kể cả demo đang chạy yên.
Một control cũng có hạn sử dụng. Sau khi đổi EA, preset, broker, symbol specification hoặc quyền terminal, hãy đánh dấu evidence cũ là cần xem lại. Đây không phải làm khó operator; nó ngăn việc dùng một lần pass trong môi trường cũ để bảo lãnh cho hệ thống mới.
6. Tổng kết
a. Năm ý chính
- Sai lầm EA nằm xuyên lifecycle.
- Screenshot/tên/preset không thay evidence.
- Test logic và holdout trước performance.
- Monitoring/reconcile/runbook là phần của hệ thống.
- Pre-mortem biến red flag thành control có owner.
b. Câu hỏi tự kiểm tra
- Vì sao size nhỏ không sửa unknown source?
- Tune trên holdout làm mất bằng chứng gì?
- Heartbeat khác chart mở ra sao?
- Auto-resume cần gate nào?
c. Gợi ý đáp án
Xem gợi ý câu 1
Size chỉ giảm market exposure, không giảm software/permission risk. Xem lại mục 1 và mục 2.
Xem gợi ý câu 2
Holdout không còn độc lập với selection. Xem lại mục 3.
Xem gợi ý câu 3
Heartbeat là liveness evidence; chart mở chỉ là UI state. Xem lại mục 3.
Xem gợi ý câu 4
Reconcile account/internal state rồi manual/recovery approval. Xem lại mục 3 và mục 5.
d. Thuật ngữ cần nhớ
| Thuật ngữ | Giải thích ngắn |
|---|---|
| Lifecycle | Chuỗi stage từ chọn tới recover. |
| Provenance | Nguồn gốc file/version. |
| Configuration drift | Preset/schema/version không còn khớp. |
| Least privilege | Chỉ cấp quyền tối thiểu cần thiết. |
| Heartbeat | Bằng chứng hệ thống còn sống. |
| Reconcile | Khớp internal với external state. |
| Pre-mortem | Giả định fail để thiết kế control. |
| Automation bias | Tin output máy quá mức. |
| Outcome bias | Đánh giá process chỉ theo kết quả. |
| Red flag | Dấu hiệu cần stop/review. |
e. Nguồn tham khảo
- MetaTrader 5 Help — Where to Find Trading Robots
- MetaTrader 5 Help — Strategy Testing
- MQL5 Reference — OnInit
Bài trước: Quản trị rủi ro cho EA #13. Bài tiếp theo: Framework xây dựng EA từ Zero đến Hero #15.
Nội dung này phục vụ mục đích giáo dục; không phải lời khuyên đầu tư, đánh giá một EA cụ thể hoặc hướng dẫn live.
Bài tiếp theo