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: AI + EA Integration là cách nối một model với Expert Advisor để model tạo typed proposal từ feature snapshot, còn EA kiểm schema, phiên bản, độ mới, giới hạn số, risk và trạng thái account trước khi chấp nhận. Model không sở hữu order API và không được tự vượt qua deterministic guards.
Đọc xong, bạn sẽ hiểu:
- Vì sao model output phải là proposal có schema, không phải lệnh.
- Khác biệt runtime và test giữa embedded ONNX với external WebRequest service.
- Cách reject wrong-schema, stale, low-confidence và NaN output bằng một ledger có reason code.
1. AI + EA Integration là gì?
Một AI model trong bài này chỉ là hàm nhận đầu vào số đã chuẩn hóa rồi trả output. Inference là một lần chạy model trên một bộ đầu vào. Bộ đầu vào đó gọi là feature snapshot: các giá trị có version, timestamp và nguồn rõ tại cùng một thời điểm.
Output không đi thẳng thành order. Nó được đóng thành typed proposal — một đề xuất có field và kiểu dữ liệu cố định. Expert Advisor kiểm proposal bằng code deterministic: cùng input và state thì gate cho cùng kết quả. Chỉ sau các gate, proposal mới được ghi ACCEPT_OBSERVATION hoặc reason reject. Sample bài này không có execution.
Ví dụ đời thường: model giống một analyst trẻ gửi phiếu nhận định. Phiếu phải có model ID, snapshot ID, thời gian, confidence và output. EA giống bàn compliance/risk: kiểm đúng mẫu, còn hạn, số hợp lệ, không vượt policy. Analyst không có chìa khóa kho tiền.
Hình 1 — Model chỉ đề xuất; EA giữ schema, freshness, risk và quyền quyết định.
Một pipeline tách trách nhiệm:
- Data adapter tạo feature snapshot.
- Model adapter chạy inference.
- Proposal adapter đóng output vào schema.
- Policy engine kiểm identity, freshness, confidence và bounds.
- Risk engine kiểm account/portfolio state.
- Execution engine nằm sau cùng và tách quyền.
- Audit ledger lưu input ID, output, gate reason và latency.
Tách lớp giúp thay model mà không thay risk policy. Nó cũng cho phép chạy model observation-only, so sánh output và tắt adapter mà EA core vẫn hoạt động an toàn.
Model output ≠ order. Confidence cao không cấp quyền execution. AI cũng không chứng minh edge, không tự sửa data leakage và không biết broker state nếu contract không cung cấp.
2. Hai integration pattern, một proposal contract
a. Embedded ONNX: model chạy trong MQL5 context
ONNX là định dạng model mở. MQL5 có nhóm hàm tạo session, đặt input/output shapes và chạy model. Tài liệu chính thức cho biết model ONNX có thể được tích hợp vào strategy và kiểm behavior trong Strategy Tester (MQL5 — ONNX Models).
Quy trình khái niệm:
frozen model file/buffer → create session → verify shapes/types → normalize snapshot → OnnxRun → proposal
OnnxCreate trả session handle hoặc INVALID_HANDLE; OnnxRun trả true/false và lỗi có thể đọc bằng GetLastError (OnnxCreate, OnnxRun). Vì vậy, “không tạo được session” hoặc “run false” phải thành reject/halt, không dùng output cũ.
Ưu điểm là model artifact, preprocessing và EA có thể được version cùng release. Strategy Tester có thể chạy pipeline embedded. Nhưng ONNX support không chứng minh model được train đúng. Input shape đúng cũng không chứng minh feature đúng timestamp.
MQL5 có automatic type conversion cho ONNX tensors, nhưng tài liệu cảnh báo conversion không kiểm overflow. Nếu cần kiểm soát chặt, contract phải xác minh type/range trước inference; không giao an toàn số học cho implicit conversion (ONNX Type Conversion).
b. External AI service: model ở ngoài terminal
EA có thể gọi HTTP service bằng WebRequest. URL phải được người dùng thêm vào allowlist. Lời gọi là synchronous: execution chờ response hoặc timeout. WebRequest dùng được từ EA/script nhưng không chạy được trong Strategy Tester (MQL5 — WebRequest).
Pipeline:
snapshot → serialize request → HTTP timeout/status → parse body → proposal schema → gates
External service dễ cập nhật model và dùng runtime ngoài MQL5, nhưng thêm network, authentication, privacy, service version và availability boundary. Không gọi service trực tiếp trong critical tick path rồi giả định latency luôn thấp. Tách cadence bằng timer/queue và dùng cached proposal có expiry rõ.
Trong Strategy Tester, external adapter phải dùng recorded response hoặc local replay fixture. Replay là response đã lưu được phát lại deterministic. Replay test được parser, schema và gates; nó không test DNS, TLS, network latency, service availability hoặc live model version.
Hình 2 — Hai adapter dùng chung proposal contract nhưng có runtime và test boundary khác nhau.
c. Contract chung
Dù model chạy ở đâu, EA chỉ nhận AI28:PROPOSAL:V1. Adapter không được trả free-form text rồi để code “đoán ý”. Unknown field quan trọng, missing field, wrong type hoặc wrong version đều reject.
3. Ledger AI28: chỉ 1/5 proposal qua gate
Contract tổng hợp AI28:PROPOSAL:V1 có các field:
| Field | Ý nghĩa |
|---|---|
schema_version |
Phiên bản cấu trúc proposal |
model_id |
Model artifact được allowlist |
feature_snapshot_id |
Identity của input đã version |
generated_at |
Thời điểm tạo proposal |
valid_for_s |
Thời lượng proposal còn hợp lệ |
regime_label |
TREND, RANGE hoặc UNCERTAIN |
risk_multiplier_candidate |
Candidate hữu hạn trong [0,1] |
confidence |
Model score theo calibration contract |
abstain |
Model chủ động từ chối đề xuất |
Hình 3 — Schema biến output model thành dữ liệu có thể validate và audit.
Policy khóa schema AI28:PROPOSAL:V1, model M28-A, max age 30s, confidence min .70, multiplier hữu hạn [0,1], label allowlist và abstain=false.
| ID | Schema/model | Age | Confidence | Label/multiplier | Result |
|---|---|---|---|---|---|
| P1 | V1 / M28-A | 8s |
.82 |
TREND / .60 |
ACCEPT_OBSERVATION |
| P2 | V1 / M28-A | 10s |
.61 |
RANGE / .40 |
REJECT_LOW_CONFIDENCE |
| P3 | V1 / M28-A | 47s |
.88 |
TREND / .70 |
REJECT_STALE |
| P4 | V2 / M28-A | 6s |
.91 |
TREND / .65 |
REJECT_SCHEMA |
| P5 | V1 / M28-A | 5s |
.93 |
TREND / NaN |
REJECT_NONFINITE |
Confidence là score chỉ có ý nghĩa trong calibration contract của model; nó không tự động là xác suất đúng. Non-finite là giá trị không hữu hạn như NaN hoặc infinity. Abstain là model tự nói “không có đề xuất dùng được”.
P5 chắc chắn reject vì NaN không phải số hữu hạn. Nếu tôi chỉ nhìn confidence .93, tôi sẽ bỏ sót output không thể dùng trong phép tính risk. P4 cũng reject trước khi xét confidence vì consumer chỉ hiểu schema V1.
Hình 4 — Confidence cao không cứu được stale, wrong-schema hoặc NaN output.
Tổng accepted 1/5, rejected 4/5, trade requests 0. Verdict là OBSERVE ONLY / FIX REJECTIONS / NO EXECUTION.
Gate order quan trọng. Kiểm schema/model trước, rồi snapshot/freshness, abstain, numeric finite/bounds, confidence, account/risk và idempotency. Khi parser chưa hiểu proposal, không được đọc riêng confidence rồi đi tiếp.
4. Sai lầm, giới hạn và rủi ro
Sai lầm 1: nối model output thẳng vào order. Cách này cho model vượt qua account identity, position, margin, cap và duplicate-request gates.
Sai lầm 2: feature skew. Training dùng close bar đã hoàn tất nhưng serving dùng current incomplete bar; cùng tên feature nhưng khác nghĩa. Preprocessing, timezone, missing-data rule và scaling phải version.
Sai lầm 3: lookahead hoặc leakage. Feature vô tình dùng dữ liệu chưa tồn tại tại thời điểm decision. Backtest đẹp khi đó không phải bằng chứng deployable.
Sai lầm 4: model/schema không version. Service đổi field hoặc model mới trong khi EA consumer không đổi. Model ID, hash, schema và preprocessing version phải nằm trong evidence.
Sai lầm 5: WebRequest blocking trong OnTick. Request synchronous có thể chặn handler tới timeout. MQL5 xử lý events tuần tự; nếu NewTick đang xử lý hoặc đã nằm trong queue, NewTick mới không được thêm (MQL5 — Event Handling). Vì vậy, proposal cadence phải tách khỏi critical execution path.
Sai lầm 6: retry mù. Timeout không chứng minh server chưa xử lý. Dùng request ID/idempotency key và reconcile response trước retry.
Sai lầm 7: dùng output cũ khi model lỗi. Session fail, HTTP error, body parse fail hoặc stale cache phải reject. Không “giữ tín hiệu gần nhất” nếu expiry đã hết.
Drift là phân phối input hoặc behavior output lệch khỏi baseline đã validate. Drift monitor có thể báo thay đổi; nó không tự biết model còn edge. Model/service còn mở rộng security và privacy boundary: allowlist tối thiểu, không gửi secret/account data không cần thiết, giới hạn payload và log redaction.
Embedded ONNX giảm network dependency nhưng vẫn có model/runtime errors, shape mismatch và data skew. External service linh hoạt hơn nhưng Strategy Tester không gọi được WebRequest. Không pattern nào tự bảo đảm lợi nhuận.
5. Checklist integration fail-closed
- Freeze feature spec, preprocessing, model ID/hash và proposal schema.
- Gắn feature snapshot ID, source timestamp và data-quality flags.
- Với ONNX, verify model handle, input/output count, shapes, types và finite ranges.
- Với service, khóa allowlist, TLS URL, timeout, request ID, expected HTTP status và max body.
- Không đặt synchronous network call trong critical tick/execution path.
- Parse exact schema; reject missing, wrong type/version và unknown critical fields.
- Verify model ID, feature snapshot identity và age.
- Reject
abstain=true, unknown label, non-finite hoặc out-of-bound output. - Áp confidence gate theo calibration contract, không gọi score là “độ chính xác”.
- Áp account identity, permissions, position, portfolio cap và margin gates.
- Dùng idempotency key; không retry khi result state chưa classified.
- Lưu request hash, snapshot ID, model/schema, output, latency và gate reason.
- Monitor reject mix, latency, missing/NaN rate và drift indicators.
- Khi model/service unavailable, default là no new AI proposal; EA core không được mất kill switch.
Hình 5 — Gate chạy theo thứ tự; trạng thái unknown dừng trước execution.
Test ladder:
| Tầng | Embedded ONNX | External service |
|---|---|---|
| Unit/offline | Feature, shapes, proposal gates | Serializer, parser, schema gates |
| Strategy Tester | Model + EA historical behavior | Recorded/replay responses only |
| Shadow | Live data, zero requests | Live network/service, zero requests |
| Demo | Sau mọi gate, exposure tối thiểu | Sau mọi gate, exposure tối thiểu |
Nếu model và feature spec còn representative, shadow evidence có thể tìm integration faults; nó không chứng minh future edge. Mọi real-money decision nằm ngoài bài này.
6. Bắt đầu từ đâu: Proposal Gate Sheet 15 phút
Dùng Google Sheets hoặc LibreOffice offline. Không cần model, API, account hoặc tiền.
- Tạo columns ID, schema, model, age, confidence, label, multiplier, abstain.
- Nhập P1–P5 đúng ledger.
- Gate schema/model trước; P4 dừng ở schema.
- Gate age
<=30s; P3 dừng ở stale. - Gate finite/bounds; P5 dừng ở non-finite.
- Gate confidence
>=.70; P2 dừng ở low confidence. - P1 chỉ ghi
ACCEPT_OBSERVATION. - Đếm accepted/rejected và xác nhận requests bằng
0.
a. Mẫu đối chiếu đã điền
| ID | Gate hit | Result |
|---|---|---|
| P1 | all pass | ACCEPT_OBSERVATION |
| P2 | .61 < .70 |
REJECT_LOW_CONFIDENCE |
| P3 | 47s > 30s |
REJECT_STALE |
| P4 | schema V2 |
REJECT_SCHEMA |
| P5 | multiplier NaN |
REJECT_NONFINITE |
Nếu sheet cho P5 pass vì confidence cao, finite gate bị thiếu. Nếu P4 đi tiếp tới confidence, schema gate đang sai thứ tự. Kết quả đúng là accepted 1/5, rejected 4/5, zero trade requests.
7. Tổng kết
a. Năm ý chính
- AI tạo typed proposal; deterministic EA giữ quyền quyết định và execution tách riêng.
- Embedded ONNX và external service dùng chung contract nhưng khác runtime/test boundary.
- WebRequest synchronous và không chạy trong Strategy Tester; replay không thay live-service evidence.
- Schema, model ID, snapshot, freshness, finite/bounds, confidence và risk đều là gate bắt buộc.
- AI28 chỉ accept P1 observation; P2–P5 bị reject có reason, requests bằng zero.
b. Câu hỏi tự kiểm tra
- Vì sao model output không được xem là order?
- Strategy Tester kiểm external WebRequest service bằng cách nào?
- Vì sao P5 reject dù confidence
.93? - Replay test chứng minh và không chứng minh điều gì?
c. Gợi ý đáp án
Xem gợi ý câu 1
Output chưa qua schema, freshness, finite, account/risk và idempotency gates; model cũng không sở hữu execution. Xem mục 1 và 5.
Xem gợi ý câu 2
WebRequest không chạy trong Tester; dùng recorded/replay fixture để test consumer logic. Xem mục 2.
Xem gợi ý câu 3
Multiplier là NaN, không phải số hữu hạn nên không thể đi vào risk calculation. Xem mục 3.
Xem gợi ý câu 4
Replay chứng minh parser/schema/gates deterministic; không chứng minh live network, service availability, latency hay current model. Xem mục 2 và 4.
d. Thuật ngữ cần nhớ
| Thuật ngữ | Giải thích ngắn |
|---|---|
| Feature snapshot | Bộ input có version và timestamp tại một thời điểm. |
| Inference | Chạy model đã khóa trên một feature snapshot. |
| Typed proposal | Đề xuất có schema; không tự thực thi. |
| Schema | Contract bắt buộc về field, type và version. |
| Embedded ONNX | Model ONNX chạy trong MetaTrader/MQL5 context. |
| External service | Model từ xa được gọi qua network request. |
| Confidence | Model score chỉ hiểu theo calibration contract. |
| Abstain | Model chủ động không đưa proposal dùng được. |
| Non-finite | NaN hoặc infinity, không hợp lệ cho numeric decision. |
| Replay | Response đã ghi được phát lại để test deterministic. |
e. Nguồn tham khảo
- MQL5 — ONNX Models
- MQL5 — OnnxCreate
- MQL5 — OnnxRun
- MQL5 — ONNX Type Conversion
- MQL5 — WebRequest
- MQL5 — Event Handling
f. Học tiếp
Bài trước, Multi-Account Management #27, khóa identity và account state. Bài tiếp theo, Building Institutional Trading Systems #29, sẽ ghép data, research, risk, execution và operations thành một hệ thống có ownership và evidence.
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