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ư hoặc tín hiệu giao dịch.
Trả lời ngắn: Multi-Account Management cho EA là cách quản trị nhiều account context bằng một lớp chính sách và evidence chung, trong khi mỗi account vẫn có identity, worker, risk budget, state và journal riêng. Cách làm này cần thiết để tránh nhầm account, copy lot máy móc hoặc để một lỗi cục bộ lan thành lỗi toàn hệ thống.
Đọc xong, bạn sẽ hiểu:
- Vì sao lưu nhiều account trong Navigator chưa phải kiến trúc automation nhiều account.
- Cách chuẩn hóa risk theo equity và xác minh current account trước mọi action.
- Khi nào halt riêng một account và khi nào phải kéo global kill switch.
1. Multi-Account Management cho EA là gì?
Multi-account management là quản trị nhiều account context qua một bộ policy và evidence chung. Nó không có nghĩa một EA được phép “nhìn thấy danh sách account rồi bắn lệnh khắp nơi”. Mỗi account phải có identity, runtime owner và sổ trạng thái riêng.
MetaTrader có thể lưu nhiều account trong một platform và hiển thị chúng theo server trong Navigator. Người dùng chuyển account bằng cách chọn account khác; nền tảng còn có tùy chọn tự tắt automated trading sau khi switch để giảm nguy cơ robot giao dịch nhầm account (MetaTrader 5 — Manage Trading Accounts). Việc lưu và switch này khác với vận hành đồng thời nhiều worker độc lập.
Hãy hình dung một chuỗi có ba quầy thu ngân. Quản lý dùng chung quy định hoàn tiền và báo cáo cuối ngày, nhưng mỗi quầy có một két, một chìa và một sổ ca. Nếu gom cả ba sổ vào một tờ rồi chỉ ghi “EA A đã xử lý”, cuối ngày không biết tiền thuộc quầy nào.
Trong kiến trúc bài này, control plane là lớp giữ registry, phân bổ risk, global guards và evidence. Bên dưới là A01, A02, A03; mỗi worker chỉ phục vụ một account context và một release.
Hình 1 — Chính sách dùng chung không xoá ranh giới identity, state và journal của từng account.
Nhiều account cũng không tự tạo đa dạng hóa. Nếu cả ba cùng một logic, cùng exposure USD và cùng lỗi code, thêm account chỉ nhân bản cùng rủi ro. Bài này kiểm plumbing và governance, không chứng minh edge.
2. Bốn lớp: registry, worker, allocator, evidence
a. Account registry: danh bạ không được trùng
Account registry là danh sách canonical identity và cấu hình được phép vận hành. Không nhận diện account chỉ bằng login hoặc nickname. Một record nên khóa:
- Account alias nội bộ.
- Login, broker company và server.
- Currency và trade mode: demo, contest hoặc real.
- Release hash và config hash.
- Worker owner, risk cap, heartbeat limit và trạng thái.
MQL5 cho phép đọc current account qua ACCOUNT_LOGIN, ACCOUNT_SERVER, ACCOUNT_CURRENCY, ACCOUNT_TRADE_MODE và các account properties khác (MQL5 — Account Properties). Current account là account đang kết nối trong platform context đó. Worker phải đối chiếu current values với registry khi start, reconnect, switch và ngay trước action.
Hình 2 — Mỗi worker phải xác minh current account trước khi xử lý action.
b. Worker: một context, một owner
Worker là runtime cô lập gắn với đúng một account và release. Nó giữ heartbeat, permissions, positions, intents, requests, results và local state của account đó. Tên EA giống nhau không đủ để gộp log; key phải chứa ít nhất account identity và release identity.
c. Allocator: chuẩn hóa trước khi cộng
Copy cùng 0.10 lot sang nhiều account không giữ cùng risk. Equity, currency, contract specification, tick value và stop distance có thể khác.
Ta dùng metric minh họa:
R_i = cash risk at stop / fresh equity_i × 100
0.40 R nghĩa là cash risk bằng 0.40% equity của account đó. Với A01 equity USD 10,000, request 0.40 R tương đương cash-risk budget $40. Với A02 equity EUR 8,000, 0.30 R tương đương €24. Đây chưa phải volume; worker còn phải dùng symbol properties của chính account để chuyển budget thành volume hợp lệ.
d. Evidence: request không phải result
Mỗi worker ghi identity → intent → allocation → request → result → state. OnTradeTransaction cung cấp sự kiện liên quan request, result và thay đổi trên trading account; một thao tác có thể phát sinh nhiều transaction events (MQL5 — OnTradeTransaction). Vì vậy, control plane không được cộng request như thể tất cả đã thành position.
3. Ledger MA27: hai account lỗi, không được giả vờ cả ba đều khỏe
Protocol tổng hợp MA27:CONTROL:V1 dùng account demo, heartbeat tối đa 60s và global cap 0.80 R. Đây là dữ liệu học tập, không phải default MetaTrader hoặc benchmark thị trường.
| Account | Mode/Currency | Equity | Request | Heartbeat | Expert trade | Final | State |
|---|---|---|---|---|---|---|---|
| A01 | Demo/USD | 10,000 |
0.40 R |
12s |
true | 0.40 R |
OBSERVE |
| A02 | Demo/EUR | 8,000 |
0.30 R |
95s |
true | 0 |
HALT_ACCOUNT / STALE_HEARTBEAT |
| A03 | Demo/USD | 12,000 |
0.25 R |
18s |
false | 0 |
HALT_ACCOUNT / EXPERT_NOT_ALLOWED |
A02 chắc chắn halt trong MA27 vì heartbeat 95s vượt contract 60s. A03 có heartbeat mới nhưng permission cho EA không đạt. Hai lỗi khác nhau cùng dẫn tới final 0; reason code phải giữ khác nhau để sửa đúng nguyên nhân.
Tổng request là 0.95 R. Sau account gates, allocated chỉ còn 0.40 R. Global cap là 0.80 R, nên reserve còn 0.40 R. Healthy 1/3, halted 2/3.
Hình 3 — Hai account bị halt riêng; global allocation dừng mở mới nhưng shared state vẫn classified.
Verdict toàn hệ thống là DEGRADED / NO NEW GLOBAL ALLOCATION. A01 có thể tiếp tục observation-only; sample có zero trade requests và không dùng tiền. Không fire global kill vì registry, identity và reason codes vẫn classified.
Containment là dừng worker lỗi mà không che shared risk. Nếu identity collision, registry hỏng, duplicate owner, global cap breach hoặc shared state không phân loại được, lỗi không còn cục bộ; lúc đó phải fire global kill switch.
Nếu identity và evidence còn classified, isolation có thể contain một account fault. Nó không bảo đảm broker execution, fill hoặc network.
4. Sai lầm, giới hạn và rủi ro
Sai lầm 1: copy lot. 0.10 lot trên account USD 10k không mang cùng cash risk với account EUR 8k. Hãy normalize theo fresh equity rồi mới convert theo symbol/account.
Sai lầm 2: dùng login trần làm identity. Server và broker company thuộc identity. Alias A01 giúp đọc, nhưng không thay canonical tuple.
Sai lầm 3: switch account rồi để EA tiếp tục. MetaTrader có protective options tắt automated trading khi switch account, profile hoặc chart symbol/period (MetaTrader 5 — Platform Settings). Đây là lớp phụ; worker vẫn phải tự verify current identity.
Sai lầm 4: dùng shared mutable config và shared log. Một worker sửa risk cap có thể ảnh hưởng worker khác; một file log thiếu account key làm attribution sai. Nếu tôi chỉ group log theo EA name, tôi sẽ gán nhầm transaction cho account.
Sai lầm 5: halt sai tầng. Ngắt cả hệ thống vì A02 stale làm mất containment. Ngược lại, chỉ halt A02 khi registry có identity collision lại bỏ qua shared corruption.
Blast radius là phạm vi bị ảnh hưởng bởi một lỗi hoặc credential. Một credential có quyền rộng, một database chung không namespace hoặc một retry service dùng chung có thể biến lỗi nhỏ thành lỗi nhiều account.
Giới hạn lớn nhất: broker rules, currency, margin, symbol mapping và execution khác nhau. Global metric R hỗ trợ governance nhưng không thay account-level volume validation. Nhiều account cũng không tạo profit guarantee hay diversification tự động.
5. Checklist control plane fail-closed
- Tạo canonical registry; fail nếu duplicate alias, login/server tuple hoặc owner.
- Tách secret theo worker và không ghi credential vào log.
- Khóa một worker ↔ một account context ↔ một release.
- Verify login, server, currency, trade mode và release khi start/reconnect/switch.
- Bật protective auto-disable trên account/profile/symbol switch.
- Đọc fresh equity và account permissions trước allocation.
- Tính account risk cap trước, rồi mới áp global cap.
- Convert normalized risk sang volume bằng symbol properties của account đó.
- Ghi heartbeat, intent, request, result và state với account/release key.
- Reconcile positions và transactions theo từng account, không cộng chéo.
- Halt account khi identity mismatch, stale heartbeat, permission fail hoặc result unknown cục bộ.
- Fire global kill khi registry/shared state hỏng, duplicate owner hoặc global cap breach.
- Không blind retry; request chưa classified phải được reconcile trước.
- Lưu evidence bundle: registry version, hashes, snapshots, ledgers và verdict.
Hình 4 — Lỗi cục bộ được contain; lỗi shared identity hoặc global cap phải kéo cầu dao tổng.
Decision table tối thiểu:
| Phạm vi evidence | Ví dụ | Action |
|---|---|---|
| Một account, reason classified | A02 stale | HALT_ACCOUNT |
| Một account, permission classified | A03 expert false | HALT_ACCOUNT |
| Shared registry/identity unknown | duplicate owner | GLOBAL KILL |
| Global budget violated | allocated vượt cap | GLOBAL KILL |
Reconciliation là đối chiếu identity, requests, results, positions và state. Chỉ resume worker sau khi reason đã sửa, evidence mới đủ và không có request cũ ở trạng thái mơ hồ.
6. Bắt đầu từ đâu: Multi-Account Sheet 15 phút
Dùng Google Sheets hoặc LibreOffice offline. Không nhập login thật, không kết nối platform, không gửi request và không dùng tiền thật.
- Nhập A01/A02/A03, equity, request, heartbeat và permission.
- Công thức
fresh = heartbeat <= 60. - Công thức
final = requestchỉ khi fresh và permission đều true; ngược lại0. - Cộng requested, allocated và tính reserve
0.80 - allocated. - Đếm healthy/halted và chọn reason code.
- Chọn global verdict: account reasons đều classified nhưng healthy chỉ
1/3, nên dừng allocation mới.
a. Mẫu đối chiếu đã điền
| Account | Request | Gate | Final | State |
|---|---|---|---|---|
| A01 | 0.40 R |
healthy | 0.40 R |
OBSERVE |
| A02 | 0.30 R |
heartbeat 95s > 60s |
0 |
HALT_ACCOUNT |
| A03 | 0.25 R |
expert trade false |
0 |
HALT_ACCOUNT |
| Global | request 0.95 R |
cap 0.80 R |
allocated 0.40 R |
DEGRADED / NO NEW GLOBAL ALLOCATION |
Nếu sheet cho A02 final khác 0, kiểm lại freshness formula. Nếu sheet fire global kill chỉ vì A03 permission false, xem lại ranh giới account/shared ở mục 3 và 5.
7. Tổng kết
a. Năm ý chính
- Control plane dùng chung policy nhưng mỗi account giữ identity, worker, state và journal riêng.
- Navigator lưu nhiều account không đồng nghĩa automation đồng thời nhiều account.
- Risk phải normalize theo fresh equity; không copy lot.
- A02 và A03 halt riêng vì reasons classified; A01 không được dùng để che tỷ lệ healthy
1/3. - Shared identity, registry, owner hoặc global-cap fault phải fire global kill.
b. Câu hỏi tự kiểm tra
- Vì sao login trần chưa đủ làm account identity?
- Vì sao
0.10 lotkhông nên được copy sang mọi account? - Trong MA27, vì sao A02 halt còn global kill chưa fire?
- Khi nào lỗi phải nâng từ
HALT_ACCOUNTlênGLOBAL KILL?
c. Gợi ý đáp án
Xem gợi ý câu 1
Account identity còn cần server, company, currency/trade mode và release context. Xem mục 2.
Xem gợi ý câu 2
Equity, currency, stop distance và symbol specification khác nhau làm cash risk khác nhau. Xem mục 2 và 4.
Xem gợi ý câu 3
A02 có reason stale classified; shared registry và global cap vẫn biết rõ. Hệ thống chuyển degraded và dừng allocation mới. Xem mục 3.
Xem gợi ý câu 4
Khi shared registry/identity không đáng tin, có duplicate owner hoặc global cap bị vi phạm. Xem mục 3 và 5.
d. Thuật ngữ cần nhớ
| Thuật ngữ | Giải thích ngắn |
|---|---|
| Multi-account management | Governance chung cho nhiều account context cô lập. |
| Control plane | Lớp điều phối policy, allocation, guards và evidence. |
| Account registry | Danh sách canonical identity và cấu hình account. |
| Worker | Runtime gắn với một account và một release. |
| Current account | Account đang kết nối trong platform context. |
| Normalized risk R | Cash risk chia cho fresh account equity. |
| Heartbeat | Evidence định kỳ rằng worker loop còn sống. |
| Containment | Dừng lỗi cục bộ mà không che shared risk. |
| Global kill switch | Dừng allocation/action trên mọi worker. |
| Reconciliation | Đối chiếu identity, requests, results và state. |
e. Nguồn tham khảo
- MetaTrader 5 — Manage Trading Accounts
- MetaTrader 5 — Platform Settings
- MQL5 — Account Properties
- MQL5 — OnTradeTransaction
f. Học tiếp
Bài trước, VPS Deployment cho EA #26, khóa một execution owner cho một release. Bài tiếp theo, AI + EA Integration #28, sẽ đặt mô hình AI vào ranh giới đề xuất có schema, confidence và deterministic guard.
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ư hoặc tín hiệu giao dịch. Mọi thị trường đều có rủi ro mất vốn.
Bài tiếp theo