Mục lục
Trả lời ngắn: Money Management Engine trong EA là bộ máy nhận ngân sách rủi ro và kịch bản dừng để tính volume (khối lượng giao dịch) ứng viên, làm tròn rồi kiểm mức phơi nhiễm và ký quỹ. Kết quả là volume được chấp nhận hoặc mã từ chối có bằng chứng, không phải lot cố định.
Đọc xong, bạn sẽ hiểu:
- Vì sao lot phải là output thay vì input cố định.
- Những dữ liệu nào phải có trước khi tính volume.
- Cách đi từ ngân sách đến volume rồi qua các cổng giới hạn.
- Vì sao margin và ngân sách rủi ro là hai khái niệm khác nhau.
Lưu ý giáo dục: Mọi số trong bài là đơn vị demo để học cách kiểm soát phần mềm, không phải mức rủi ro hay volume khuyến nghị. Engine không bảo đảm lợi nhuận hoặc giới hạn lỗ thực tế khi có gap, trượt giá và chi phí.
1. Money Management Engine là gì và không phải gì
a. Một bộ chuyển đổi có quyền từ chối
Money Management Engine, hay bộ quản lý vốn, biến một ý định giao dịch thành candidate volume — volume ứng viên để kiểm tra. Nó không trả lot ngay từ một công thức duy nhất. Nó đi qua bốn lớp:
- input contract — hợp đồng dữ liệu đầu vào;
- calculation core — lõi tính toán;
- constraint gates — các cổng giới hạn;
- decision output — kết quả chấp nhận, kiểm lại hoặc từ chối.
Hãy hình dung khâu đóng kiện lên xe. Khối lượng hàng mong muốn phải được so với tải trọng kiện, bước đóng gói, tổng tải đã có và phần tải dự phòng. Nếu thiếu cân hoặc chưa biết giới hạn xe, nhân viên không đoán rồi cho hàng lên. So sánh này chỉ giải thích chuỗi kiểm soát; thị trường còn có biến động giá và thực thi.
b. Lot là output, không phải cấu hình bất biến
Lot là đơn vị thường dùng để biểu diễn volume. Một lot cố định không mang cùng ý nghĩa trên mọi symbol — mã sản phẩm giao dịch — tài khoản và khoảng dừng. Cùng volume nhưng contract size (quy mô hợp đồng), cách tính kết quả, đơn vị tiền và khoảng giá khác nhau có thể tạo mức lỗ ước tính khác nhau.
Vì vậy, engine nhận snapshot mới, tính candidate, làm tròn xuống theo bước volume, rồi kiểm các giới hạn. Output cuối có thể là:
ACCEPT: volume cùng evidence đầy đủ;RECHECK: thiếu policy hoặc dữ liệu cần làm rõ;REJECT: vi phạm điều kiện cứng.
Evidence, hay bằng chứng, là các input, phép tính và mã lý do giúp tái hiện quyết định.
c. Điều engine không làm
Engine không tạo lợi thế giao dịch, sửa signal kém hoặc bảo đảm lệnh dừng khớp đúng giá. Nó cũng không thay thế Risk Engine ở bài #9. Money Management Engine tính và kiểm một candidate; Risk Engine áp chính sách rộng hơn như tổng giới hạn hệ thống, trạng thái dừng và phản ứng sự cố.
2. Input contract: snapshot nào phải có
a. Snapshot tài khoản
Account snapshot, hay bản chụp tài khoản, phải được lấy gần thời điểm tính. Các trường chính gồm:
ACCOUNT_EQUITY: equity, tức giá trị tài khoản hiện tại sau khi phản ánh lãi/lỗ thả nổi;ACCOUNT_MARGIN_FREE: free margin, tức ký quỹ khả dụng theo tài khoản;- margin đang dùng, currency và thời điểm đọc;
- quyền giao dịch và chế độ margin.
MetaQuotes cung cấp các thuộc tính này qua AccountInfoDouble(). AccountInfoDouble, Account Properties
Engine phải định nghĩa reference capital, hay vốn tham chiếu, dùng để tính ngân sách. Đó có thể là equity snapshot hoặc một giá trị policy khác. Không được âm thầm đổi giữa balance và equity.
b. Candidate contract
Candidate cần symbol, direction phục vụ calculator, giá vào giả định và mức dừng dự kiến. Khoảng dừng phải hữu hạn, khác zero và đúng phía theo contract chiến lược. Nếu không có stop hoặc dữ liệu giá không hợp lệ, engine trả reject code thay vì dùng lot mặc định.
Risk budget, hay ngân sách rủi ro, là mức lỗ ước tính tối đa mà policy cấp cho candidate trong phép tính. Ví dụ 0,5% ở bài này hoàn toàn tùy ý để minh họa, không phải best practice.
c. Symbol contract
Mỗi symbol cung cấp:
SYMBOL_VOLUME_MIN: volume nhỏ nhất;SYMBOL_VOLUME_MAX: volume lớn nhất;SYMBOL_VOLUME_STEP: bước thay đổi;SYMBOL_VOLUME_LIMIT: tổng volume tối đa theo một hướng, gồm position và pending order.
Các giá trị này được đọc bằng SymbolInfoDouble(). MetaQuotes lưu ý volume thấp hơn min, cao hơn max hoặc không là bội số step sẽ gây lỗi; chương trình cũng phải kiểm limit. Permitted volumes
Hình 1 — Min, step, max kiểm candidate riêng; limit kiểm tổng volume đã có và đang chờ.
d. Snapshot danh mục
Exposure, hay tổng mức phơi nhiễm, không chỉ gồm position đang mở. Engine còn đọc pending orders và reserved intents — các ý định đã được giữ chỗ nhưng request chưa xác nhận — để tránh hai candidate cùng dùng một phần ngân sách.
Mỗi snapshot cần dấu thời gian. Dữ liệu quá hạn, NaN (giá trị không phải số), bộ tính thất bại hoặc loss-per-unit bằng zero đều là lý do dừng. Fail-closed, hay đóng an toàn, nghĩa là không phát candidate mới khi chưa chứng minh input hợp lệ.
3. Pipeline tính candidate volume
a. Từ vốn tham chiếu đến ngân sách
Trong ví dụ demo:
Budget = Reference Capital × Policy Cap
Vốn tham chiếu 10.000 demo units, trần policy 0,5%, nên budget là 50 demo units.
Policy cap, hay trần theo chính sách, là input do hệ thống định nghĩa; nó không phải hằng số thị trường. Engine ghi rõ version policy đã dùng.
b. Tính mức lỗ ước tính cho một đơn vị volume
Thay vì tự áp một công thức pip/tick cho mọi symbol, EA có thể dùng OrderCalcProfit() để ước tính kết quả bằng đơn vị tiền của tài khoản giữa giá vào và giá dừng cho volume 1.0. Hàm dựa trên tài khoản và điều kiện thị trường hiện tại; kết quả vẫn chỉ là ước tính. OrderCalcProfit
Lấy trị tuyệt đối của kết quả để có loss per unit, hay mức lỗ ước tính cho 1.0 volume. Ví dụ demo cho 200.
Raw Volume = Budget ÷ Loss Per Unit = 50 ÷ 200 = 0,25
Raw volume, hay volume thô, chưa được phép gửi. Calculator thất bại, trả zero hoặc giá dừng không hợp lệ phải dẫn tới REJECT_CALCULATION.
Hình 2 — Phép tính chỉ minh họa pipeline; các số không phải khuyến nghị rủi ro hoặc volume.
c. Làm tròn xuống và tính lại
Normalize down, hay làm tròn xuống theo step, dùng:
Normalized = floor(Raw ÷ Step) × Step
Raw 0,25, step 0,01 cho normalized 0,25. Nếu raw là 0,29 và step 0,10, kết quả phải là 0,20, không làm tròn lên 0,30.
Sau đó engine kiểm min, max và tính lại estimated loss bằng normalized volume. Nếu raw thấp hơn min, việc nâng lên min có thể vượt budget. Phản ứng bảo thủ là REJECT_BELOW_MIN, không tự round up.
d. Cổng exposure
Ví dụ giả lập có position exposure 0,40, pending 0,10, candidate 0,25:
0,40 + 0,10 + 0,25 = 0,75
Nếu symbol limit là 1,00, gate này pass. Nhưng exposure gate còn có thể kiểm trần strategy, account và correlated group do policy quy định. Thiếu reserved intent data phải dẫn tới RECHECK_DATA.
e. Cổng margin và kiểm tra yêu cầu
OrderCalcMargin() ước tính margin cần cho một thao tác theo account hiện tại. Tài liệu MetaQuotes nhấn mạnh phép tính đơn lẻ này không tính các position và pending orders đang tồn tại, nên không phải ảnh chụp tổng collateral sau giao dịch. OrderCalcMargin
OrderCheck() tiếp tục kiểm tra request và trả margin/free margin dự kiến cùng mã phản hồi. OrderCheck
Margin estimate 120 và free margin 2.000 chưa đủ để ACCEPT nếu policy không định nghĩa phần dự phòng phải giữ. Margin là tài sản bảo đảm; risk budget là mức lỗ ước tính theo stop. Hai con số không thay thế nhau.
Hình 3 — Candidate chỉ đi tới Decision sau khi qua dữ liệu, volume, exposure và margin gates.
4. Sáu lỗi và giới hạn quan trọng
a. Một lot cho mọi symbol
Volume giống nhau không tạo cùng mức rủi ro. Quy mô hợp đồng, cách tính kết quả, đơn vị tiền và khoảng dừng khác nhau. Lot cố định chỉ có thể là quy tắc cố ý sau khi đã đánh giá, không phải phương án mặc định khi bộ tính lỗi.
b. Một công thức tick dùng khắp nơi
Tick value và tick size có thể phụ thuộc symbol/calc mode. Tự nhân pip theo một công thức Forex cho mọi loại tài sản dễ sai currency conversion và contract. Dùng calculator chính thức rồi fail nếu hàm trả lỗi.
c. Làm tròn lên
Round up từ raw volume sang min hoặc step có thể làm estimated loss vượt budget. Engine nên floor, tính lại loss và reject nếu kết quả dưới min.
d. Bỏ qua giới hạn tổng
Min/max kiểm một candidate. SYMBOL_VOLUME_LIMIT kiểm tổng position và pending orders theo hướng. Chỉ pass min/max chưa đủ.
e. Dùng free margin làm risk budget
Free margin trả lời còn bao nhiêu collateral theo account. Risk budget trả lời policy cho phép ước tính mất bao nhiêu theo stop. Tài khoản có nhiều free margin không đồng nghĩa candidate phù hợp với risk policy.
f. Coi estimated loss là guaranteed loss
Gap là khoảng trống giá; slippage là chênh giữa giá dự kiến và giá thực thi. Cùng commission, spread, swap và thanh khoản, chúng có thể làm realized loss khác estimated loss. Engine phải ghi assumption và không dùng lời “đảm bảo”.
Dữ liệu tài khoản/symbol cũ, stop bằng zero, calculator fail hoặc policy thiếu đều là output hợp lệ dạng từ chối. Chúng không phải lý do để chọn lot nhỏ tùy ý.
5. Checklist và Budget Worksheet 15 phút
a. Mười hai câu kiểm tra
- Vốn tham chiếu là balance, equity hay giá trị policy nào?
- Snapshot có mới và cùng timestamp không?
- Candidate có entry/stop hợp lệ không?
- Budget cap được version hóa chưa?
OrderCalcProfit()cho loss-per-unit hợp lệ không?- Raw volume bằng budget chia loss-per-unit chưa?
- Volume được floor theo step hay bị round up?
- Normalized volume có qua min/max không?
- Position, pending và reserved intents có nằm trong exposure không?
- Aggregate volume có qua symbol limit không?
- Margin estimate, free margin và reserve policy có đủ không?
- Decision có reason code cùng evidence không?
Hình 4 — Decision Card buộc engine nêu bằng chứng và lý do, không chỉ trả một số lot.
b. Bài tập miễn phí, không dùng tiền thật
Dùng giấy hoặc Google Sheets trong 10–15 phút. Tất cả giá trị dưới đây là demo units, không gắn với symbol thật. Không mở MetaTrader hoặc gửi request.
c. Mẫu đối chiếu tham khảo
| Check | Input | Calculation | Result | Gate |
|---|---|---|---|---|
| Budget | 10.000 × 0,5% | 50 | 50 demo units | PASS |
| Raw volume | 50 ÷ 200 | 0,25 | 0,25 | PASS |
| Step | floor(0,25 ÷ 0,01) × 0,01 | 0,25 | 0,25 | PASS |
| Exposure | 0,40 + 0,10 + 0,25 | 0,75 | ≤ 1,00 | PASS |
| Margin | estimate 120 vs free 2.000 | cần reserve policy | chưa đủ policy | RECHECK |
Hàng cuối cố ý là RECHECK, không phải ACCEPT. So sánh estimate với free margin vẫn thiếu policy về phần dự phòng.
Làm thêm hai biến thể:
- đổi step thành
0,10: raw0,25phải floor về0,20; - raw
0,004, min0,01: trảREJECT_BELOW_MIN, không nâng lên0,01.
Artifact cần có là worksheet, input version và reason codes. Nó không phải “lot đúng” cho giao dịch thật.
6. Tổng kết: lot là kết quả của một chuỗi kiểm soát
a. Năm ý chính
- Money Management Engine biến dữ liệu và policy thành candidate có bằng chứng.
- Loss-per-unit nên được ước tính theo account, symbol và market environment hiện tại.
- Raw volume phải làm tròn xuống rồi kiểm min, max, step và giới hạn tổng.
- Exposure gồm position, pending order và reserved intent.
- Margin gate không thay thế risk budget; thiếu reserve policy phải
RECHECK.
Bài trước là Quản lý Order trong EA. Bài tiếp theo chuyển sang Signal Engine trong EA #7.
b. Câu hỏi tự kiểm tra
- Vì sao lot nên là output thay vì input cố định?
- Vì sao raw volume không được làm tròn lên?
- Free margin khác risk budget ở đâu?
- Khi raw thấp hơn min, engine nên trả gì?
c. Gợi ý đáp án
Xem gợi ý câu 1
Volume phải phản ánh budget, loss-per-unit và các giới hạn hiện tại. Xem lại mục 1.
Xem gợi ý câu 2
Làm tròn lên có thể khiến estimated loss vượt budget. Xem lại mục 3.
Xem gợi ý câu 3
Free margin là collateral khả dụng; risk budget là mức lỗ ước tính policy cấp. Xem lại mục 3.
Xem gợi ý câu 4
Trả mã từ chối dưới minimum thay vì tự nâng volume. Xem lại mục 4.
d. Thuật ngữ cần nhớ
| Thuật ngữ | Giải thích ngắn |
|---|---|
| Risk budget | Ngân sách lỗ ước tính theo policy |
| Loss per unit | Mức lỗ ước tính cho 1.0 volume |
| Raw volume | Volume trước khi chuẩn hóa |
| Normalize down | Làm tròn xuống theo volume step |
| Exposure | Tổng mức phơi nhiễm đang có và giữ chỗ |
| Free margin | Ký quỹ khả dụng của tài khoản |
| Reserved intent | Ý định đã giữ chỗ nguồn lực |
| Reject code | Mã giải thích vì sao candidate bị từ chối |
| Realized loss | Khoản lỗ thực tế sau thực thi |
e. Nguồn tham khảo
- MetaQuotes — AccountInfoDouble
- MetaQuotes — Account Properties
- MetaQuotes — OrderCalcProfit
- MetaQuotes — OrderCalcMargin
- MetaQuotes — Permitted volumes
- MetaQuotes — Symbol Properties
- MetaQuotes — OrderCheck
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. EA và thị trường đều có rủi ro kỹ thuật lẫn rủi ro mất vốn.
Bài tiếp theo