Dùng dữ liệu FireAnt trong AFL¶
Đơn vị và mảng giá¶
| Mảng | Ý nghĩa với dữ liệu FireAnt |
|---|---|
O, H, L, C |
Giá mở, cao, thấp, đóng — nghìn đồng (25.3 = 25.300 đ) |
V |
Khối lượng khớp (cổ phiếu) |
OI (OpenInt) |
Cổ phiếu: số cổ phiếu niêm yết; phái sinh: khối lượng mở |
GiaTriGD = C * V * 1000; // giá trị giao dịch (đồng)
VonHoa = C * 1000 * OI; // vốn hoá (đồng)
ThanhKhoanTot = MA(GiaTriGD, 20) >= 5e9; // GTGD bình quân 20 phiên từ 5 tỷ
Dữ liệu dòng tiền¶
Mỗi mã có các mã phụ chứa dữ liệu dòng tiền, đọc bằng Foreign(Name() + "_XX", "trường"). Luôn bọc trong Nz(…, 0) vì
có phiên không có dữ liệu.
Bật loại mã trước khi dùng
Các loại dòng tiền mặc định không cập nhật. Bật Nước ngoài (_NN), Tự doanh (_TD), Mua bán chủ động
(_AC), Cung cầu (_CC) — và Thống kê thị trường cho mã tổng theo chỉ số — ở
Cài đặt › Dữ liệu › Loại mã cần cập nhật.
| Hậu tố | Dữ liệu | O |
C |
V |
OI |
|---|---|---|---|---|---|
_NN |
Khối ngoại | KL bán | KL mua | Giá trị bán (đồng) | Giá trị mua (đồng) |
_TD |
Tự doanh | KL bán | KL mua | Giá trị bán | Giá trị mua |
_AC |
Chủ động mua/bán | KL bán chủ động | KL mua chủ động | – | – |
_CC |
Cung cầu | KL đặt bán | KL đặt mua | Số lệnh đặt bán | Số lệnh đặt mua |
NN = Name() + "_NN";
NNMuaRongKL = Nz(Foreign(NN, "C"), 0) - Nz(Foreign(NN, "O"), 0); // mua ròng (cổ phiếu)
NNMuaRongGT = Nz(Foreign(NN, "I"), 0) - Nz(Foreign(NN, "V"), 0); // mua ròng (đồng)
Plot(NNMuaRongGT / 1e9, "Khoi ngoai mua rong (ty)", colorGreen, styleHistogram);
Tổng theo sàn/chỉ số dùng mã dạng VNINDEX_NN, VN30_TD, HNXINDEX_AC…
Chỉ tiêu cơ bản¶
Sau khi Cập nhật danh sách mã, đọc bằng GetFnData("tên") (mã đang xét) hoặc
GetFnDataForeign("tên", "MÃ"). FireAnt cung cấp:
| Nhóm | Trường |
|---|---|
| Trên mỗi cổ phiếu | EPS, BookValuePerShare, SalesPerShare, GrossProfitPerShare, EBITDAPerShare |
| Cổ tức | DividendPerShare — cổ tức mỗi cổ phiếu (ô Dividend trong Symbol › Information) |
| Số cổ phiếu | SharesOut, SharesFloat |
| Hiệu quả (%) | ProfitMargin, OperatingMargin, ReturnOnAssets, ReturnOnEquity |
| Tăng trưởng (%) | QtrlyRevenueGrowth, QtrlyEarningsGrowth |
| Rủi ro | Beta |
| Thông tin | FullName, Alias, Address, Country |
EPS, BookValuePerShare, SalesPerShare, GrossProfitPerShare và DividendPerShare tính bằng nghìn đồng mỗi cổ
phiếu, cùng đơn vị với giá (DividendPerShare = 1 là 1.000 đ). Mã không có dữ liệu cho trường nào thì trường đó bằng 0.
PE = C / GetFnData("EPS"); // P/E
PB = C / GetFnData("BookValuePerShare"); // P/B
TySuatCoTuc = GetFnData("DividendPerShare") / C * 100; // tỷ suất cổ tức (%)
Warning
Các trường khác của AmiBroker (ví dụ PEGRatio, ForwardEPS, ExDividendDate) hợp lệ về cú pháp nhưng FireAnt không
cung cấp nên trả về rỗng.
Phân loại mã¶
| Hàm | Trả về |
|---|---|
GroupID() / GroupID(1) |
Nhóm = loại mã (Cổ phiếu, Chỉ số, Khối ngoại…) |
MarketID() / MarketID(1) |
Sàn: HOSE, HNX, UPCOM… |
SectorID(), IndustryID() |
Ngành ICB cấp 1 và cấp 3 |
FullName() |
Tên đầy đủ (không dấu) |
Chỉ số và chỉ số tự tạo¶
VNI = Foreign("VNINDEX", "C");
ThiTruongTot = VNI > MA(VNI, 100); // chỉ mua khi VN-Index trên MA100
Nganh = Foreign("^NGANHANG", "C"); // chỉ số tự tạo trong MetaKit
Giả định thị trường Việt Nam khi backtest¶
Khi chạy Backtest/Tối ưu từ MetaKit, các giả định sau được áp dụng tự động (xem Chạy Explore, Backtest, Tối ưu): vốn, phí 2 chiều và thuế bán, lô 100 cổ phiếu, nắm giữ tối thiểu 3 phiên (T+2,5), khớp giá mở cửa phiên kế tiếp. Nếu bạn tự chạy công thức trong cửa sổ Analysis của AmiBroker, hãy tự đặt các giả định này:
SetOption("InitialEquity", 1000000); // 1 tỷ đồng = 1.000.000 (giá tính bằng nghìn đồng)
SetOption("CommissionMode", 1); // phí theo %
SetOption("CommissionAmount", 0.2); // phí 0,15%/chiều + thuế bán 0,1% chia đều 2 chiều
SetOption("MaxOpenPositions", 10);
SetOption("HoldMinBars", 3); // T+2,5
SetOption("MinShares", 100);
RoundLotSize = 100; // lô chẵn — là biến AFL, KHÔNG dùng SetOption
SetTradeDelays(1, 1, 1, 1);
BuyPrice = SellPrice = Open;
SetPositionSize(10, spsPercentOfEquity);
RoundLotSize, TickSize, PointValue, MarginDeposit là biến AFL
Gán trực tiếp (RoundLotSize = 100;). Viết SetOption("RoundLotSize", 100) làm AmiBroker dừng với lỗi
"Error 37. Unsupported field in SetOption". Trình soạn AFL của MetaKit báo lỗi này ngay khi bạn gõ.