Trả lời ngắn: Signal là điều kiện tạo một candidate để xem xét; filter kiểm tra bối cảnh hoặc chất lượng của candidate; risk engine đối chiếu giới hạn rồi cho pass hoặc dừng. Ba lớp này tổ chức quyết định, không dự đoán giá, không cam kết lợi nhuận và không tự biến candidate thành lệnh.

Đọc xong, bạn sẽ hiểu:

  • Vì sao signal, filter và risk engine là ba vai khác nhau.
  • Candidate cần đi qua những gì trước khi có một quyết định có thể đọc lại.
  • Cách lập bảng review bằng dữ liệu giả, không dùng tiền thật.

Lưu ý giáo dục: Đây là bài giải thích cấu trúc hệ thống, không phải tín hiệu giao dịch hay lời khuyên đầu tư. Sai dữ liệu, giới hạn thiếu rõ ràng và lỗi vận hành đều có thể làm một quyết định trở nên không an toàn. Không dùng bài tập dưới đây để giao dịch thật.

1. Signal, filter và risk engine không làm cùng việc

a. Signal chỉ tạo candidate

Signal là một rule ghi trước để nhận ra điều kiện đáng xem xét từ dữ liệu. Output của nó là candidate: một tình huống được đánh dấu để kiểm tra tiếp. Candidate không phải lời nhắc mua/bán và cũng không phải dự báo chắc chắn.

Ví dụ, một bảng dữ liệu giả có một hàng thiếu ngày nhưng vẫn khớp điều kiện do rule nhận ra. Signal có thể đánh dấu hàng đó là candidate. Điều đó chỉ nói “hãy nhìn vào đây”; nó không nói dữ liệu đã đủ, bối cảnh đã đúng hay bước tiếp theo được phép làm.

b. Filter hỏi candidate có đúng bối cảnh không

Filter là điều kiện bổ sung để kiểm tra context: nguồn, thời điểm, phiên bản rule, trạng thái dữ liệu hoặc điều kiện đã ghi trước. Filter có thể loại một candidate mà không kết luận rule vô ích hoặc thị trường sai. Nó chỉ ghi rằng candidate này chưa đi qua được tiêu chí bối cảnh.

Hãy nghĩ về thư mời vào tòa nhà. Lễ tân nhìn thấy một người đến cửa giống signal tạo candidate. Danh sách lịch hẹn là filter: tên có trong lịch, khung giờ còn hiệu lực hay không. Việc có tên trong danh sách vẫn chưa quyết định người đó được vào khu hạn chế.

c. Risk engine có quyền dừng

Risk engine là tập risk limit và gate kiểm tra một candidate có được phép đi tiếp hay phải dừng. Nó cần có lý do, owner và log để người khác review. Risk engine không dự báo giá và không phải chỉ là một ngưỡng dừng lỗ. Nó có thể chặn vì evidence thiếu, limit không rõ hoặc owner chưa duyệt.

Hình 1 — Signal tạo candidate, filter kiểm tra bối cảnh, còn risk engine giữ quyền pass hoặc dừng trước khi hệ thống đi tiếp.

Tương tự ví dụ tòa nhà: bảo vệ là risk gate. Họ không đoán khách có ý tốt; họ chỉ đối chiếu quyền vào và ghi lý do khi từ chối. Mỗi lớp một việc giúp bạn biết câu hỏi nào chưa được trả lời, thay vì đổ hết vào một từ “signal”.

2. Candidate đi qua ba lớp như thế nào?

a. Từ input tới lý do quyết định

Một flow dễ đọc là: input có nguồn → signal tạo candidate → filter kiểm tra bối cảnh → risk gate pass hoặc dừng → log. Candidate có thể kết thúc ở filter hoặc risk gate; dừng không có nghĩa hệ thống hỏng. Đó có thể là kết quả đúng của một hàng rào được thiết kế trước.

Quay lại hàng dữ liệu giả thiếu ngày. Signal nhận ra pattern và tạo candidate. Filter hỏi “nguồn và thời điểm đâu?” rồi fail. Risk engine nhận trạng thái evidence thiếu, ghi dừng, và log lưu decision reason: “không đủ nguồn/thời điểm để review”. Không có giá, không có lệnh, nhưng cả nhóm vẫn học được logic hệ thống.

b. Một check pass không thay thế phần còn lại

Trong MQL5, OrderCheck() kiểm tra request và trả kết quả qua cấu trúc kiểm tra. Tài liệu cũng nói true ở kiểm tra cơ bản không phải bảo đảm thao tác yêu cầu sẽ thực hiện thành công. MQL5 OrderCheck Bài này chỉ mượn ví dụ đó để nhớ rằng pre-trade check là một gate, không phải lời hứa về execution.

Điều này nối với bài trước: request, response và transaction/log là các bằng chứng khác nhau. Với candidate cũng vậy, signal pass, filter pass và risk pass là các trạng thái khác nhau. Nếu log chỉ ghi “OK” mà không nói OK ở cổng nào, người review không thể biết điều gì đã thực sự được kiểm tra.

Hình 2 — Candidate chỉ đi tiếp khi evidence, filter và risk gate đều cho kết quả có thể đối chiếu; thiếu evidence thì dừng.

3. Sai lầm, giới hạn và quyền dừng

a. Ba cách hiểu sai phổ biến

Sai lầm thứ nhất là gọi signal là lệnh. Signal chỉ đánh dấu candidate; nếu nó được dùng như hành động cuối cùng, filter, risk gate và ownership trở thành trang trí.

Sai lầm thứ hai là thêm rất nhiều filter để lịch sử trông “sạch” hơn. Overfitting xảy ra khi rule được chỉnh quá khớp dữ liệu cũ; nhiều filter không tự làm một ý tưởng đúng hơn. Bạn cần ghi rõ từng filter nhằm giảm loại lỗi nào và trường hợp nào nó không kiểm tra.

Sai lầm thứ ba là gọi risk engine là một stop-loss duy nhất. Risk engine có thể gồm source check, quyền, limit, owner, version và kill switch. Điều quan trọng là quyền dừng có lý do và có người chịu trách nhiệm, không phải tên của một công cụ.

b. Giới hạn của hàng rào

Filter và risk limit phản ánh assumption của người thiết kế. Chúng không tự sửa input xấu, không biết tương lai và không tự phát hiện mọi tình huống mới. Khi context thay đổi, một filter từng hữu ích có thể không còn phù hợp. Vì vậy cần ghi phiên bản rule, người sở hữu và khi nào phải xem lại.

ESMA Article 17 yêu cầu investment firm tham gia algorithmic trading trong phạm vi EU có hệ thống/risk controls, ngưỡng/limit, kiểm thử và monitoring phù hợp. Bài này chỉ dùng điều đó để minh họa tư duy control có quyền chặn; đây không phải checklist pháp lý cho cá nhân hay mọi broker. ESMA Article 17

c. Khi nào phải dừng?

Dừng khi input không có nguồn hoặc timestamp, rule version không rõ, filter/risk limit không có owner, retcode (mã phản hồi server) hoặc log chưa đối chiếu, hoặc bài test sắp chạm tiền thật. “Chưa đủ evidence” là quyết định hợp lệ; tự điền phần còn thiếu mới là rủi ro.

Hình 3 — Hệ thống cần ngăn ba hiểu sai: signal không phải lệnh, nhiều filter không phải bằng chứng, risk engine không dự báo tương lai.

4. Checklist review một candidate

Hãy review theo thứ tự sau, trên dữ liệu giả hoặc một record đọc được. Checklist này không hướng dẫn giao dịch.

  1. Ghi input: candidate đến từ data nào, nguồn ở đâu, timestamp nào? Không có dữ liệu này thì ghi thiếu.
  2. Ghi signal: rule nào đã tạo candidate? Signal thấy gì, và signal không chứng minh điều gì?
  3. Ghi filter: filter nào pass/fail, dựa vào context nào? Tránh viết “filter tốt” mà không có tiêu chí.
  4. Ghi risk gate: limit là gì, ai owner, pass/dừng có lý do nào? Đừng viết “risk ổn” nếu không nói gate đã kiểm tra gì.
  5. Ghi log và stop: lưu decision reason; nếu thiếu source, version, owner hay log thì dừng và quay về dữ liệu/documentation.

Checklist như hồ sơ phòng lab: một mẫu có nhãn không chứng minh phép đo đúng, nhưng thiếu nhãn thì bạn không thể kiểm tra lại. Mục tiêu là để người khác đọc lại cùng một quyết định, không phải khiến hệ thống trông phức tạp.

5. Practice Bridge 15 phút: bảng candidate không dùng tiền thật

Mở spreadsheet miễn phí, LibreOffice Calc hoặc giấy bút. Không bật MT5/EA live, không đăng nhập broker và không dùng tiền thật. Tạo sáu cột: Input có nguồn?, Signal thấy gì?, Filter hỏi gì?, Risk gate, Decision reason, Trạng thái.

a. Mẫu đối chiếu đã điền

Input có nguồn? Signal thấy gì? Filter hỏi gì? Risk gate Decision reason Trạng thái
Thiếu ngày Candidate quan sát Nguồn và thời điểm đủ chưa? Fail Dừng Thiếu evidence Chưa chạy
Có nguồn và ngày Candidate quan sát Phiên bản rule có ghi? Pass Chờ owner review Evidence đủ, chưa có approval Chưa chạy

Sau 15 phút, bạn cần chỉ được cột nào tạo candidate, cột nào loại bối cảnh và cột nào có quyền dừng. Kết quả không phải dự báo đúng/sai hay lợi nhuận; nó là một decision reason có thể đọc lại.

Hình 4 — Bảng dữ liệu giả buộc candidate đi qua signal, filter, risk gate và log thay vì nhảy thẳng thành hành động.

6. Tổng kết: giữ candidate ở đúng vị trí

a. Năm ý chính

  • Signal tạo candidate để xem xét, không phải lệnh hay dự báo chắc chắn.
  • Filter kiểm tra bối cảnh, nguồn và điều kiện bổ sung của candidate.
  • Risk engine có quyền pass hoặc dừng theo limit, owner và lý do đã ghi.
  • Một check pass không thay thế filter, risk gate hoặc log ở bước khác.
  • Thiếu evidence, phiên bản rule, owner hay log là lý do hợp lệ để dừng và kiểm tra.

b. Câu hỏi tự kiểm tra

  • Signal khác candidate ở điểm nào?
  • Filter có thể loại candidate mà không kết luận điều gì?
  • Vì sao risk engine không phải một dự báo giá?
  • Khi OrderCheck() pass, bạn còn cần phân biệt điều gì?

c. Gợi ý đáp án

Xem gợi ý câu 1

Signal là điều kiện tạo candidate; candidate là tình huống đã được đánh dấu để kiểm tra tiếp. Xem lại mục 1.

Xem gợi ý câu 2

Filter có thể cho thấy source, thời điểm hoặc context không đủ dù signal đã nhận ra một pattern. Xem lại mục 1.

Xem gợi ý câu 3

Risk engine đối chiếu limit và quyền dừng; nó không biết trước giá sẽ đi đâu. Xem lại mục 3.

Xem gợi ý câu 4

Check pass không bảo đảm execution; vẫn cần response, transaction/log và đối chiếu các gate khác. Xem lại mục 2.

d. Thuật ngữ cần nhớ

Thuật ngữ Giải thích ngắn
Signal Điều kiện tạo candidate để xem xét.
Candidate Tình huống được đánh dấu để kiểm tra tiếp.
Filter Điều kiện bối cảnh hoặc chất lượng để loại candidate.
Risk engine Gate/limit có quyền chặn bước tiếp theo.
Context Nguồn, thời điểm hoặc phiên bản rule liên quan.
Risk limit Giới hạn được định nghĩa trước để pass hoặc dừng.
Decision reason Lý do có thể đọc lại cho một quyết định.
Retcode Mã phản hồi server cho request.
Overfitting Chỉnh rule quá khớp dữ liệu cũ.
Kill switch Quyền dừng khi điều kiện an toàn không còn.

e. Nguồn tham khảo

Bài trước là CFD, MT5 và Execution Review #2, nơi request được tách khỏi response và log. Bài tiếp theo là Backtest, Walk-forward và Monte Carlo Review #4, để phân biệt kiểm tra lịch sử với bằng chứng đủ cho giai đoạn sau.

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. Khi dữ liệu, quyền dừng hoặc log chưa rõ, không dùng tiền thật và hãy dừng để kiểm tra nguồn chính thức.