Bỏ qua

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õ.