Bỏ qua

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:

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