Chạy Explore, Backtest, Tối ưu¶
Mã AFL trong editor được chạy thật trên AmiBroker của bạn. Quant AI tự chạy khi cần (sau khi bạn cho phép), hoặc bạn tự chạy bằng các nút trên thanh công cụ.
| Kiểu chạy | Để làm gì | Kết quả |
|---|---|---|
| Explore | Lọc cổ phiếu theo điều kiện (Filter) |
Bảng các mã thoả điều kiện, kèm các cột AddColumn |
| Scan | Tìm tín hiệu Buy/Sell |
Bảng tín hiệu |
| Backtest | Mô phỏng giao dịch theo Buy/Sell trên dữ liệu lịch sử |
Chỉ số hiệu quả, đường vốn, danh sách lệnh, kiểm định độ bền |
| Tối ưu | Thử các tổ hợp tham số khai báo bằng Optimize() |
Bảng xếp hạng tổ hợp, bản đồ nhiệt |
Trước khi chạy
- AmiBroker đã cài plugin MetaKit và đã đăng ký OLE. MetaKit tự mở AmiBroker nếu chưa chạy.
- AmiBroker đang mở database dùng dữ liệu MetaKit (xem Tạo database).
- Mã không còn lỗi cú pháp (nếu còn, MetaKit cảnh báo "Mã còn lỗi cú pháp" nhưng vẫn cho chạy; AmiBroker sẽ báo lỗi).
Cấu hình lần chạy¶
Bấm Explore, Backtest hoặc Tối ưu trên thanh công cụ để mở Cấu hình lần chạy:
1 Kiểu chạy: Explore, Scan, Backtest, Tối ưu.
2 Phạm vi mã:
- Theo nhóm (mặc định: Giá cổ phiếu) — tích một hoặc nhiều nhóm: Giá cổ phiếu, Chỉ số chứng khoán, Hợp đồng tương lai, Chứng quyền có bảo đảm, Ngành ICB, Index tự tạo… Nhóm chính là Group trong AmiBroker (plugin MetaKit đặt tên Group theo loại mã); danh sách gồm các loại mã có trong gói của bạn. Dòng bên dưới cho biết tổng số mã sẽ chạy.
- Theo sàn — cổ phiếu trên HOSE, HNX, UPCOM.
- VN30 — 30 mã thuộc rổ VN30.
- Danh sách mã — gõ các mã, cách nhau bởi dấu phẩy, chấm phẩy hoặc khoảng trắng (ví dụ
FPT, HPG, VNM).
Watchlist FireAnt AI - Pham vi chay trong AmiBroker
Trước mỗi lượt chạy, MetaKit đưa các mã trong phạm vi vào watchlist FireAnt AI - Pham vi chay và đặt Apply to › Filter của AmiBroker theo watchlist đó: AmiBroker chỉ duyệt các mã này thay vì mọi mã trong database (khối ngoại, cung cầu, mua bán chủ động…), nên chạy nhanh hơn nhiều. Watchlist được ghi lại mỗi lần chạy — đừng dùng nó để lưu danh sách mã của riêng bạn.
MetaKit nhớ cấu hình cho lần sau
Khi bạn bấm Chạy … hoặc Mở trong AmiBroker, MetaKit lưu phạm vi mã, khoảng thời gian và chu kỳ của kiểu chạy đó (Explore, Scan, Backtest, Tối ưu riêng từng kiểu). Lần sau — kể cả sau khi mở lại MetaKit — hộp Cấu hình lần chạy mở sẵn đúng cấu hình ấy. Chọn Từ – đến với ngày kết thúc là hôm nay thì lần sau ngày kết thúc tự là ngày hôm đó.
3 Khoảng thời gian:
| Lựa chọn | Ý nghĩa |
|---|---|
| N phiên cuối | N phiên gần nhất (Explore/Scan mặc định 1 phiên — tức phiên cuối) |
| Từ – đến | Chọn ngày bắt đầu và kết thúc |
| Toàn bộ (2018–nay) | (Backtest/Tối ưu, mặc định) toàn bộ lịch sử có trong database |
Lọc ở phiên cuối
Muốn lọc cổ phiếu theo phiên gần nhất, chọn N phiên cuối với N = 1 (mặc định của Explore).
4 Chu kỳ: hiện MetaKit chạy theo chu kỳ Ngày. Chu kỳ khác (tuần, tháng, phút…) dùng thiết lập Periodicity hiện tại của AmiBroker — hãy đặt trong AmiBroker nếu cần.
5 Thiết lập backtest · giả định thị trường VN (Backtest/Tối ưu) — bấm để mở rộng; khi thu gọn, các nhãn tóm tắt thiết lập đang dùng:
| Thiết lập | Mặc định | Ý nghĩa |
|---|---|---|
| Vốn ban đầu | 1.000.000.000 ₫ | Tổng vốn mô phỏng |
| Phí giao dịch mỗi chiều | 0,15% | Phí môi giới mỗi lệnh mua/bán |
| Thuế bán | 0,1% | Thuế thu nhập cá nhân trên giá trị bán |
| Lô chẵn | 100 CP | Khối lượng mỗi lệnh là bội số của lô |
| Nắm giữ tối thiểu | 3 phiên | Mô phỏng T+2,5: cổ phiếu về tài khoản chiều T+2 |
| Số vị thế tối đa | 10 | Số mã nắm giữ cùng lúc |
| Tỷ trọng mỗi vị thế | 10% | % tài sản cho mỗi lệnh mua mới |
| Thanh khoản tối thiểu | theo Cài đặt (0 = tắt) | Chỉ xét mã có GTGD bình quân 20 phiên từ mức này (tỷ đồng) |
| Khớp lệnh ở giá mở cửa phiên kế tiếp | Bật | Tín hiệu ở phiên T khớp giá mở cửa phiên T+1 — tránh nhìn trước tương lai |
Thay đổi ở đây chỉ áp dụng cho lần chạy này. Giá trị mặc định lấy từ Cài đặt › Backtest mặc định.
6 Mở trong AmiBroker — mở cửa sổ Analysis trong AmiBroker và chạy ngay tại đó để bạn xem kết quả gốc của AmiBroker (xem Đưa sang AmiBroker).
7 Chạy Backtest (hoặc Chạy Explore, Chạy Scan, Chạy tối ưu) — chạy và chuyển sang thẻ Kết quả.
MetaKit tự thêm gì khi chạy¶
Để kết quả sát thực tế Việt Nam, trước mã của bạn MetaKit tự thêm phần thiết lập theo Cấu hình lần chạy: vốn (giá dữ liệu tính bằng nghìn đồng), phí mỗi chiều cộng một nửa thuế bán, số vị thế và tỷ trọng, lô chẵn (cũng là khối lượng tối thiểu), nắm giữ tối thiểu, khớp giá mở cửa phiên sau, phạm vi mã và lọc thanh khoản. Sau mã của bạn, MetaKit thêm phần xuất kết quả về MetaKit.
Thiết lập trong mã của bạn được ưu tiên
Mã của bạn chạy sau phần thiết lập của MetaKit, nên các dòng SetOption(...), SetTradeDelays(...),
SetPositionSize(...) trong mã sẽ ghi đè giả định mặc định. Mẫu mã backtest của trình soạn có sẵn các dòng này —
xoá đi nếu muốn dùng thiết lập của MetaKit.
Trong lúc chạy¶
- Thẻ Kết quả hiện "… đang chạy trên AmiBroker" với thanh tiến độ: Đang kết nối AmiBroker… → Đang backtest trên AmiBroker… → Đang đọc kết quả…. Bấm Huỷ lần chạy để dừng.
- Mỗi lúc chỉ chạy một lần trên AmiBroker; lần chạy khác chờ với trạng thái Đang chờ AmiBroker….
- Bạn có thể chuyển sang trang khác; khi xong, MetaKit báo Backtest hoàn tất kèm nút Xem kết quả.
Khi AmiBroker báo lỗi¶
Nếu công thức lỗi khi chạy (ví dụ "Error 37. Unsupported field in SetOption"), AmiBroker bật hộp thoại AFL Error. MetaKit tự đọc nội dung lỗi, tự đóng hộp thoại và dừng lượt chạy — bạn không cần đóng thủ công. Lỗi hiện ở thẻ Kết quả và Nhật ký, kèm dòng, cột trong mã của bạn:
- Bấm vào lỗi ("Dòng n, cột c — bấm để sửa") để nhảy tới đúng chỗ trong editor.
- Nếu Quant AI đang chạy, nó nhận được thông báo lỗi và tự sửa rồi chạy lại (tối đa 2 lần).
- Nếu lỗi nằm ở phần MetaKit tự thêm (thông báo ghi rõ "không phải do code chiến lược"), không cần sửa mã — hãy cập nhật MetaKit hoặc báo FireAnt.
- Nếu AmiBroker đang hỏi bạn điều gì (hộp thoại có nút Yes/No), MetaKit không tự trả lời mà nhắc "AmiBroker đang chờ bạn trả lời hộp thoại…" — hãy chuyển sang AmiBroker để trả lời.
Các lỗi khác thường gặp:
| Thông báo | Cách xử lý |
|---|---|
| AmiBroker chưa đăng ký máy chủ OLE… | Đăng ký OLE |
| AmiBroker chưa mở database… | Mở database dùng dữ liệu MetaKit trong AmiBroker rồi chạy lại |
| AmiBroker đang bận (có hộp thoại đang mở?) | Đóng các hộp thoại đang mở trong AmiBroker |
| AmiBroker không xuất kết quả… | Công thức không tạo kết quả (ví dụ Explore không có Filter) — xem thẻ Nhật ký |
| Không có mã nào thoả điều kiện | Nới điều kiện lọc hoặc mở rộng phạm vi/thời gian |
