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:

  1. Data adapter tạo feature snapshot.
  2. Model adapter chạy inference.
  3. Proposal adapter đóng output vào schema.
  4. Policy engine kiểm identity, freshness, confidence và bounds.
  5. Risk engine kiểm account/portfolio state.
  6. Execution engine nằm sau cùng và tách quyền.
  7. 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

  1. Freeze feature spec, preprocessing, model ID/hash và proposal schema.
  2. Gắn feature snapshot ID, source timestamp và data-quality flags.
  3. Với ONNX, verify model handle, input/output count, shapes, types và finite ranges.
  4. Với service, khóa allowlist, TLS URL, timeout, request ID, expected HTTP status và max body.
  5. Không đặt synchronous network call trong critical tick/execution path.
  6. Parse exact schema; reject missing, wrong type/version và unknown critical fields.
  7. Verify model ID, feature snapshot identity và age.
  8. Reject abstain=true, unknown label, non-finite hoặc out-of-bound output.
  9. Áp confidence gate theo calibration contract, không gọi score là “độ chính xác”.
  10. Áp account identity, permissions, position, portfolio cap và margin gates.
  11. Dùng idempotency key; không retry khi result state chưa classified.
  12. Lưu request hash, snapshot ID, model/schema, output, latency và gate reason.
  13. Monitor reject mix, latency, missing/NaN rate và drift indicators.
  14. 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.

  1. Tạo columns ID, schema, model, age, confidence, label, multiplier, abstain.
  2. Nhập P1–P5 đúng ledger.
  3. Gate schema/model trước; P4 dừng ở schema.
  4. Gate age <=30s; P3 dừng ở stale.
  5. Gate finite/bounds; P5 dừng ở non-finite.
  6. Gate confidence >=.70; P2 dừng ở low confidence.
  7. P1 chỉ ghi ACCEPT_OBSERVATION.
  8. Đế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

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.