Đi tới nội dung chính
Chuyển tới nội dung chính

Dữ liệu và Panel

Hàm của chiến lược (signals, rank, weights, filter) và của bộ lọc (columns, filter) nhận dữ liệu d; phân tích lấy d từ await data.bars(…). Trang này liệt kê mọi trường của d — tên chính xác, ý nghĩa, đơn vị — cùng cách tính trên Panel. Dữ liệu có từ khi nào, cập nhật lúc nào, dùng theo ngày công bố ra sao: xem Dữ liệu và mô phỏng khớp lệnh.

Panel: bảng mã × phiên​

Mỗi trường của d là một Panel — bảng số mỗi hàng là một mã, mỗi cột là một phiên giao dịch (theo lịch phiên của VNINDEX):

d.close 04/01/2016 05/01/2016 … 14/10/2026
FPT 7.77 7.77 … 57.10
HPG 2.56 2.54 … 20.80
VNM 45.04 44.69 … 57.90

Giá là giá điều chỉnh: FPT năm 2016 hiện 7,77 vì đã trừ các đợt chia cổ tức, cổ phiếu thưởng sau đó; phiên gần nhất giá điều chỉnh bằng giá khớp thật.

  • Thiếu dữ liệu là NaN (trước khi niêm yết, sau khi ngừng giao dịch, kỳ chưa có số). Phiên tạm ngừng giao dịch giữ giá đóng cửa trước, KL 0.
  • Điều kiện là Panel 1 / 0 / NaN (đúng / sai / chưa biết): d.close.gt(ta.sma(d.close, 200)) cho 1 khi giá trên MA200. Logic and, or, not theo ba trạng thái: 0 and NaN = 0, 1 or NaN = 1, còn lại có NaN thì ra NaN. Khi mô phỏng, NaN được coi như sai.
  • Phép tính trên cả bảng cùng lúc, kết quả là Panel mới cùng hình: d.close.div(d.high.highest(250)).sub(1) là khoảng cách tới đỉnh 52 tuần của mọi mã, mọi phiên.
  • Panel một hàng (VNINDEX trong d.bench, chuỗi vĩ mô d.macro(…), kết quả sumAcross()) tự mở rộng khi tính với Panel nhiều mã: d.close.gt(0).and(d.bench.close.gt(ta.sma(d.bench.close, 200))) là Panel nhiều mã. Thứ Studio nhận lại (exit, score, cột và điều kiện của bộ lọc) phải là Panel nhiều mã — trả thẳng Panel một hàng thì chỉ mã đầu tiên của rổ nhận đúng giá trị, kết quả sai.
  • Số lưu dạng số thực 32 bit (khoảng 7 chữ số có nghĩa, sai số tương đối cỡ 10⁻⁷) — đủ cho giá, tỷ lệ, giá trị tiền.

Giá và khối lượng​

TrườngÝ nghĩaĐơn vị
d.open, d.high, d.low, d.closeGiá mở cửa, cao nhất, thấp nhất, đóng cửa đã điều chỉnh theo cổ tức, chia táchnghìn đồng (chỉ số: điểm)
d.volumeKL khớp lệnh, số gốc (chưa điều chỉnh theo chia tách)cổ phiếu
d.volumeAdjKL khớp đã điều chỉnh theo chia tách = volume × adjRatio — so sánh được qua các đợt chia táchcổ phiếu
d.tradable1 nếu phiên có khớp lệnh, 0 nếu tạm ngừng / không khớp—
d.valueGT khớp ước tính = close × volume × 1000đồng
d.retLợi nhuận phiên = close ÷ close phiên trước − 1tỷ lệ

d.value dùng giá điều chỉnh nên ở kỳ xa thấp hơn GT đã giao dịch thật của mã có chia cổ tức cổ phiếu sau đó; cần GT thật dùng d.valueExact (dưới đây).

Giá gốc và giao dịch chi tiết​

TrườngÝ nghĩaĐơn vị
d.closeRawGiá đóng cửa gốc, chưa điều chỉnh (nến tạm: giá đang khớp)nghìn đồng
d.basicGiá tham chiếu gốcnghìn đồng
d.avgPriceGiá bình quân phiên, gốcnghìn đồng
d.valueExactTổng GT giao dịch gồm thỏa thuậnđồng
d.dealVolumeKL khớp lệnh, gốccổ phiếu
d.putthroughVolume, d.putthroughValueKL / GT giao dịch thỏa thuậncổ phiếu / đồng
d.adjRatioHệ số điều chỉnh lũy kế: giá điều chỉnh = giá gốc ÷ adjRatio—

Các trường chi tiết, khối ngoại, số lệnh: phiên có giao dịch mà nguồn không có số thì ghi 0 (riêng propNet để NaN).

Khối ngoại, tự doanh, số lệnh​

TrườngÝ nghĩaĐơn vị
d.foreignBuyVolume, d.foreignSellVolumeKL nhà đầu tư nước ngoài mua / báncổ phiếu
d.foreignBuyValue, d.foreignSellValueGT nhà đầu tư nước ngoài mua / bánđồng
d.foreignNetGT khối ngoại mua ròng = mua − bánđồng
d.foreignNetVolumeKL khối ngoại mua ròngcổ phiếu
d.foreignRoomRoom khối ngoại còn lạicổ phiếu
d.propNetGT tự doanh công ty chứng khoán mua ròng (từ 12/2019)đồng
d.buyCount, d.sellCountSố lệnh đặt mua / đặt bánlệnh
d.buyVolume, d.sellVolumeKL đặt mua / đặt báncổ phiếu

Số liệu của phiên hôm nay có sau 19:00; trước đó các ô của phiên chưa chốt là NaN. Bộ lọc dùng khối ngoại, tự doanh nên đặt includeToday: false và fillna(0) trước khi cộng dồn:

// Khối ngoại mua ròng 20 phiên so với GT giao dịch của chính mã
const flow = d.foreignNet.fillna(0).rolling(20).sum().div(d.value.rolling(20).sum());

BCTC theo ngày công bố​

Giá trị của BCTC mới nhất đã dùng được trước phiên đó (quý hoặc năm, xem quy tắc ngày dùng được), giữ nguyên tới báo cáo kế tiếp.

TrườngÝ nghĩaĐơn vị
d.epsEPS cơ bản 4 quý gần nhấtđồng / cổ phiếu
d.bvpsGiá trị sổ sách mỗi cổ phiếuđồng
d.roe, d.roaROE, ROA 4 quý gần nhấttỷ lệ (0,15 = 15%)
d.grossMarginBiên lợi nhuận gộp 4 quýtỷ lệ
d.revenueGrowthDoanh thu thuần của quý so cùng kỳtỷ lệ
d.profitGrowthLNST cổ đông mẹ của quý so cùng kỳtỷ lệ
d.debtToEquityNợ phải trả (tổng nợ, gồm nợ không chịu lãi) / vốn chủ sở hữulần
d.fScorePiotroski F-Score 0–9, chỉ từ BCTC nămđiểm
d.reportNew1 ở phiên đầu tiên một BCTC mới (quý, năm) được dùng, 0 ở phiên khác—
d.peP/E = giá gốc × 1.000 ÷ EPS 4 quý; NaN khi EPS ≤ 0lần
d.pbP/B = giá gốc × 1.000 ÷ giá trị sổ sách; NaN khi ≤ 0lần
d.earningsYieldLợi suất lợi nhuận = EPS ÷ (giá gốc × 1.000) — nghịch đảo P/E, dùng được cả khi lỗtỷ lệ

P/E, P/B tính theo giá từng phiên (trong phiên: giá đang khớp) và EPS, giá trị sổ sách đã công bố — khác d.fin("PE") là P/E tại ngày kết thúc kỳ báo cáo. Ngân hàng, công ty chứng khoán, bảo hiểm thường để trống debtToEquity, fScore, biên lợi nhuận.

d.fin: 72 chỉ tiêu BCTC​

d.fin("Khóa", { ttm, period, ago }) trả Panel một chỉ tiêu theo ngày công bố (tên khoá của FireAnt, không phân biệt hoa thường). Mỗi phiên lấy kỳ mới nhất đã dùng được trước phiên của chỉ tiêu đó.

Tuỳ chọnÝ nghĩa
period"quarter" (mặc định): BCTC quý; "year": BCTC năm. Chỉ tiêu chỉ có ở BCTC năm (FCF, PiotroskiFScore) tự dùng "year"
ttm: trueCộng 4 quý liên tiếp gần nhất — chỉ với chỉ tiêu "Quý"; thiếu một quý thì NaN
ago: nLùi n kỳ so với kỳ mới nhất (0–20): quý ago: 4 = cùng kỳ năm trước; năm ago: 1 = năm trước

Cột Số cho biết số liệu ở BCTC quý là gì: Quý — phát sinh trong quý (kỳ năm là cả năm), cộng 4 quý bằng ttm; 4 quý — đã tính trên 4 quý gần nhất ngay trong báo cáo quý; Cuối kỳ — số dư, chỉ số tại ngày kết thúc kỳ; So cùng kỳ; Năm — chỉ có ở BCTC năm. Tiền tính theo đồng.

// LNST cổ đông mẹ của quý so cùng kỳ (bỏ kỳ trước ≤ 0 để tăng trưởng không đổi dấu)
const lnst = (ago) => d.fin("ParentCompanyShareholderProfitAfterTax", { ago });
const growth = lnst(0).div(lnst(4).where(lnst(4).gt(0))).sub(1);
// Dòng tiền kinh doanh 4 quý so với LNST 4 quý (chất lượng lợi nhuận)
const cashRatio = d.fin("CashflowFromOperatingActivity", { ttm: true }).div(d.fin("ProfitAfterTax", { ttm: true }));
// ROE thấp nhất của 3 BCTC năm gần nhất
const roeY = (k) => d.fin("ROE", { period: "year", ago: k });
const roeMin3 = roeY(0).min(roeY(1)).min(roeY(2));

Trong phân tích, khai báo trước các chỉ tiêu trong fields của data.bars, dạng fin:Khóa kèm hậu tố :ttm, :year, :agoN: data.bars(universe("HOSE"), { fields: ["fin:NetSale:ttm", "fin:NetSale:ttm:ago4", "fin:FCF"] }).

Kết quả kinh doanh (số của quý; kỳ năm là cả năm)
KhóaÝ nghĩaSố
NetSaleDoanh thu thuầnQuý
TotalRevenueDoanh thu bán hàng và dịch vụ (trước giảm trừ)Quý
CostOfGoodSoldGiá vốn hàng bán (số dương)Quý
GrossProfitLợi nhuận gộpQuý
SellingExpenseChi phí bán hàngQuý
ManagingExpenseChi phí quản lý doanh nghiệpQuý
FinancialExpenseChi phí tài chínhQuý
InterestExpenseChi phí lãi vayQuý
ProfitFromFinancialActivityLợi nhuận hoạt động tài chínhQuý
NetProfitFromOperatingActivityLợi nhuận thuần từ hoạt động kinh doanhQuý
EBITLợi nhuận trước lãi vay và thuếQuý
EBITDAEBITDAQuý
DepreciationAndAmortizationKhấu haoQuý
ProfitBeforeTaxLợi nhuận trước thuếQuý
ProfitAfterTaxLợi nhuận sau thuếQuý
ParentCompanyShareholderProfitAfterTaxLNST của cổ đông công ty mẹQuý
Bảng cân đối (số dư cuối kỳ)
KhóaÝ nghĩaSố
TotalAssetTổng tài sảnCuối kỳ
TotalCurrentAssetTài sản ngắn hạnCuối kỳ
CashTiền (không gồm tương đương tiền)Cuối kỳ
CashEquivalentCác khoản tương đương tiềnCuối kỳ
ShortTermFinancialInvestmentĐầu tư tài chính ngắn hạn (gồm tiền gửi có kỳ hạn)Cuối kỳ
TotalShortTermReceivablePhải thu ngắn hạnCuối kỳ
TotalInventoryHàng tồn khoCuối kỳ
FixedAssetTài sản cố địnhCuối kỳ
TotalDebtNợ phải trả (tổng nợ, gồm nợ không chịu lãi)Cuối kỳ
TotalShortTermDebtNợ ngắn hạnCuối kỳ
TotalLongTermDebtNợ dài hạnCuối kỳ
ShortTermInterestBearingDebtVay ngắn hạn (chịu lãi)Cuối kỳ
LongTermInterestBearingDebtVay dài hạn (chịu lãi)Cuối kỳ
StockHolderEquityVốn chủ sở hữuCuối kỳ
RetainedProfitLợi nhuận chưa phân phốiCuối kỳ
WorkingCapitalVốn lưu động = tài sản ngắn hạn − nợ ngắn hạnCuối kỳ
Lưu chuyển tiền
KhóaÝ nghĩaSố
CashflowFromOperatingActivityLưu chuyển tiền thuần từ hoạt động kinh doanhQuý
CashflowFromInvestingActivityLưu chuyển tiền thuần từ hoạt động đầu tưQuý
CashflowFromFinancingActivityLưu chuyển tiền thuần từ hoạt động tài chínhQuý
CAPEXChi mua sắm tài sản cố định 4 quý (số dương)4 quý
FCFDòng tiền tự doNăm
Mỗi cổ phiếu, định giá tại ngày kết thúc kỳ
KhóaÝ nghĩaSố
ShareAtPeriodEndSố cổ phiếu lưu hành cuối kỳ (cổ phiếu)Cuối kỳ
MarketCapAtPeriodEndVốn hóa tại ngày kết thúc kỳCuối kỳ
BasicEPSEPS cơ bản 4 quý (đồng / cổ phiếu)4 quý
DilutedEPSEPS pha loãng 4 quý4 quý
BookValuePerShareGiá trị sổ sách mỗi cổ phiếuCuối kỳ
SalePerShareDoanh thu 4 quý mỗi cổ phiếu4 quý
CashDividendCổ tức tiền mỗi cổ phiếu của năm gần nhất4 quý
DividendYieldTỷ suất cổ tức tiền theo giá cuối kỳ (tỷ lệ)4 quý
PayoutRatioTỷ lệ chi trả cổ tức (tỷ lệ)4 quý
PEP/E theo giá cuối kỳ (giá từng phiên: d.pe)4 quý
PBP/B theo giá cuối kỳ (giá từng phiên: d.pb)Cuối kỳ
PSP/S theo giá cuối kỳ4 quý
EVOverEBITDAEV/EBITDA theo giá cuối kỳ4 quý
Hiệu quả, biên lợi nhuận (4 quý)
KhóaÝ nghĩaSố
ROEROE (tỷ lệ)4 quý
ROAROA4 quý
ROICROIC4 quý
ROCEROCE4 quý
GrossMarginBiên lợi nhuận gộp4 quý
EBITMarginBiên EBIT4 quý
OperatingMarginBiên lợi nhuận hoạt động4 quý
PreTaxMarginBiên lợi nhuận trước thuế4 quý
TotalAssetTurnoverVòng quay tổng tài sản (lần)4 quý
InventoryTurnoverVòng quay hàng tồn kho4 quý
ReceivableTurnoverVòng quay khoản phải thu4 quý
InterestCoverageRatioKhả năng trả lãi = EBIT ÷ chi phí lãi vay4 quý
Thanh khoản, đòn bẩy (cuối kỳ)
KhóaÝ nghĩaSố
CurrentRatioThanh toán hiện hành (lần)Cuối kỳ
QuickRatioThanh toán nhanhCuối kỳ
TotalDebtOverEquityNợ phải trả ÷ vốn chủ sở hữuCuối kỳ
TotalDebtOverAssetNợ phải trả ÷ tổng tài sản (tỷ lệ)Cuối kỳ
Tăng trưởng so cùng kỳ năm trước, điểm
KhóaÝ nghĩaSố
SaleGrowthDoanh thu thuần của quý so cùng kỳSo cùng kỳ
ProfitGrowthLNST cổ đông mẹ của quý so cùng kỳSo cùng kỳ
BasicEPSGrowthEPS 4 quý so cùng kỳSo cùng kỳ
PiotroskiFScorePiotroski F-Score 0–9Năm
ManufacturingZScoreAltman Z-Score doanh nghiệp sản xuấtCuối kỳ
NonManufacturingZScoreAltman Z-Score doanh nghiệp phi sản xuấtCuối kỳ
Lưu ý khi dùng BCTC
  • TotalDebt là tổng nợ phải trả, gồm cả nợ không chịu lãi; nợ vay = ShortTermInterestBearingDebt + LongTermInterestBearingDebt. Cash không gồm CashEquivalent.
  • Ngân hàng, công ty chứng khoán, bảo hiểm dùng mẫu BCTC riêng: nhiều chỉ tiêu để trống (giá vốn, tồn kho, EBIT, nợ vay…) hoặc mang nghĩa khác. Cộng các chỉ tiêu có thể trống thì fillna(0) từng phần, và chỉ so trong cùng nhóm ngành.
  • Thiếu một quý trong 4 quý liên tiếp (doanh nghiệp chỉ công bố bán niên, năm) thì ttm ra NaN — dùng period: "year".
  • period: "year" là số kiểm toán, dùng được từ ngày có số đó (thường cuối tháng 3, có khi tới tháng 7); trước ngày đó vẫn là năm trước.
  • Máy chủ chưa có một chỉ tiêu thì kết quả có ghi chú Máy chủ dữ liệu chưa có chỉ tiêu BCTC … — để trống.

Cổ tức, sự kiện quyền, trần / sàn​

TrườngÝ nghĩaĐơn vị
d.cashDividendCổ tức tiền ở phiên GDKHQ (phiên kế tiếp nếu ngày đó nghỉ); 0 ở phiên khácđồng / cổ phiếu
d.dividendYieldTỷ suất cổ tức tiền 12 tháng = tổng cashDividend 250 phiên ÷ (giá gốc × 1.000); cần 250 phiên dữ liệu trước đótỷ lệ
d.exRights1 ở phiên GDKHQ có điều chỉnh giá (cổ tức, chia tách, phát hành quyền)—
d.ceiling, d.floorGiá trần, sàn của phiên (đã điều chỉnh như giá)nghìn đồng
d.atCeiling, d.atFloor1 nếu đóng cửa ở giá trần / sàn—

Cộng đồng và tin tức​

TrườngÝ nghĩa
d.newsCountSố tin tức gắn mã trong ngày
d.postCountSố bài viết cộng đồng FireAnt nhắc mã trong ngày
d.postAuthorsSố người viết khác nhau nhắc mã trong ngày
d.postLikes, d.postRepliesTổng lượt thích, trả lời của các bài viết đó
d.bullishPosts, d.bearishPostsSố bài người đăng chọn cảm xúc tích cực / tiêu cực

Có từ 28/01/2021; ngày không có bài là 0, trước 2021 là NaN. Số của phiên hôm nay có sau lượt cập nhật khoảng 19:10 (lịch cập nhật); trước đó ô của phiên hôm nay là NaN, nên dùng fillna(0) trước khi tính cửa sổ trượt. Mức bàn tán có ý nghĩa khi so với chính mã đó: ví dụ d.postCount.fillna(0).rolling(5).mean().div(d.postCount.fillna(0).rolling(60).mean()) là số bài 5 phiên gấp bao nhiêu lần bình thường.

Giao dịch nội bộ và cổ đông lớn​

TrườngÝ nghĩaĐơn vị
d.insiderBuy, d.insiderSellKL cá nhân nội bộ, người liên quan, cổ đông lớn đã mua / bán, ghi ở phiên thứ 3 sau ngày thực hiện; 0 ở phiên kháccổ phiếu
d.insiderBuyPlan, d.insiderSellPlanKL cá nhân đăng ký mua / bán, ghi ở phiên đầu được giao dịchcổ phiếu
d.holderBuy, d.holderSellKL tổ chức (cổ đông lớn, công ty mẹ, quỹ) đã mua / bán, như insiderBuycổ phiếu
d.insiderNetinsiderBuy − insiderSellcổ phiếu
d.insiderNetValueinsiderNet × giá gốc của phiênđồng
d.stateOwnershipTỷ lệ sở hữu nhà nước (0–1) — ảnh chụp hiện tạitỷ lệ
d.foreignMajorOwnershipTổng tỷ lệ của cổ đông lớn nước ngoài — ảnh chụp hiện tạitỷ lệ
d.founderOwnershipTổng tỷ lệ của cổ đông sáng lập — ảnh chụp hiện tạitỷ lệ
d.majorOwnershipTổng tỷ lệ của các cổ đông được công bố; 1 − majorOwnership ≈ tự do chuyển nhượng — ảnh chụp hiện tạitỷ lệ
d.majorHoldersSố cổ đông được công bố — ảnh chụp hiện tạicổ đông

Năm có dữ liệu giao dịch nội bộ, phiên không có giao dịch là 0. Năm trường ảnh chụp chỉ có từ ngày danh sách cổ đông được cập nhật, trước đó NaN — dùng cho bộ lọc hôm nay, không dùng cho backtest (xem Giao dịch nội bộ và cổ đông lớn).

// GT cá nhân nội bộ mua ròng 60 phiên, tỷ đồng
const insider60 = d.insiderNetValue.fillna(0).rolling(60).sum().div(1e9);

d.macro: 108 chuỗi vĩ mô​

d.macro("mã") trả Panel một hàng (như d.bench, tự mở rộng khi tính với Panel nhiều mã): số đã biết ở từng phiên — kỳ mới nhất đã công bố trước phiên, số sửa dùng từ ngày có bản sửa (quy tắc).

// Chỉ nắm cổ phiếu khi lãi suất liên ngân hàng qua đêm dưới 4% và lạm phát dưới 4,5%
signals: (d) => {
const ok = d.macro("ib_on").lt(4).and(d.macro("cpi_yoy").lt(4.5));
const up = d.close.gt(ta.sma(d.close, 50));
return { entry: up.and(ok), exit: up.not().or(ok.not()) };
},
  • Điều kiện vĩ mô chỉ đặt trong entry thì chỉ chặn lúc mua; muốn bán khi vĩ mô xấu đi, đưa điều kiện ngược vào exit như trên. Với chiến lược xoay vòng, đặt điều kiện vào filter: kỳ tái cân bằng không mã nào đạt thì danh mục về tiền mặt.
  • Chuỗi tính bằng % là số phần trăm (gdp_yoy 7.1 nghĩa là 7,1%): định dạng "percent" nhân 100, nên chia 100 trước khi vẽ hay so với lợi nhuận — d.macro("gdp_yoy").div(100).
  • Trong phân tích, khai báo trong fields dạng macro:mã: data.bars("VNINDEX", { fields: ["macro:cpi_yoy", "macro:ib_on"] }).
  • Kỳ phân tích có khoảng trống, chuỗi bắt đầu muộn hoặc ngừng có số thì kết quả có ghi chú Chuỗi vĩ mô "…"…; trong khoảng thiếu, giá trị giữ nguyên số cũ. Mã không có trong danh mục: ghi chú Không có chuỗi vĩ mô "…" và chuỗi để trống.

Cột Dùng được từ là lúc số đầu tiên được công bố, tức có trong backtest (chuỗi tháng, quý, năm: tháng công bố; chuỗi ngày: ngày công bố); đủ từ — lúc có số trở lại sau khoảng trống dài cuối cùng (đo ngày 19/10/2026). Mốc này có thể muộn hơn kỳ của số: tín dụng, M2 kỳ 01/2025 công bố 24/03/2025 nên ghi 03/2025.

Tăng trưởng

MãChuỗiĐơn vịKỳDùng được từ
gdp_yoyTăng trưởng GDP quý (so cùng kỳ)%quý03/2018
gdp_ytd_yoyTăng trưởng GDP lũy kế từ đầu năm (so cùng kỳ)%quý12/2000 · đủ từ 12/2010
gdp_agri_yoyGDP nông, lâm nghiệp và thủy sản (so cùng kỳ)%quý03/2018
gdp_industry_yoyGDP công nghiệp và xây dựng (so cùng kỳ)%quý03/2018
gdp_mfg_yoyGDP công nghiệp chế biến, chế tạo (so cùng kỳ)%quý03/2018
gdp_services_yoyGDP dịch vụ (so cùng kỳ)%quý03/2018
gdp_nominal_qGDP quý theo giá hiện hànhnghìn tỷ đồngquý03/2018
gdp_real_qGDP quý theo giá so sánhnghìn tỷ đồngquý03/2018
gdp_real_ytdGDP lũy kế theo giá so sánhnghìn tỷ đồngquý03/2018
gdp_agri_qGDP nông, lâm nghiệp và thủy sản (giá so sánh)nghìn tỷ đồngquý03/2018
gdp_agri_ytdGDP nông, lâm nghiệp và thủy sản lũy kếnghìn tỷ đồngquý03/2018
gdp_construction_qGDP xây dựng (giá so sánh)nghìn tỷ đồngquý03/2018
gdp_construction_ytdGDP xây dựng lũy kếnghìn tỷ đồngquý03/2018
gdp_mfg_qGDP công nghiệp chế biến, chế tạo (giá so sánh)nghìn tỷ đồngquý03/2018
gdp_mfg_ytdGDP công nghiệp chế biến, chế tạo lũy kếnghìn tỷ đồngquý03/2018
gdp_mining_qGDP khai khoáng (giá so sánh)nghìn tỷ đồngquý03/2018
gdp_mining_ytdGDP khai khoáng lũy kếnghìn tỷ đồngquý03/2018
gdp_public_admin_qGDP quản lý nhà nước, an ninh quốc phòng (giá so sánh)nghìn tỷ đồngquý03/2018
gdp_public_admin_ytdGDP quản lý nhà nước, an ninh quốc phòng lũy kếnghìn tỷ đồngquý03/2018
gdp_services_qGDP dịch vụ (giá so sánh)nghìn tỷ đồngquý03/2018
gdp_services_ytdGDP dịch vụ lũy kếnghìn tỷ đồngquý03/2018
gdp_transport_qGDP vận tải, kho bãi (giá so sánh)nghìn tỷ đồngquý03/2018
gdp_transport_ytdGDP vận tải, kho bãi lũy kếnghìn tỷ đồngquý03/2018
gdp_utility_qGDP sản xuất, phân phối điện, khí đốt (giá so sánh)nghìn tỷ đồngquý03/2018
gdp_utility_ytdGDP sản xuất, phân phối điện, khí đốt lũy kếnghìn tỷ đồngquý03/2018
invest_qVốn đầu tư thực hiện toàn xã hội quýnghìn tỷ đồngquý03/2014 · đủ từ 03/2018
invest_yoyVốn đầu tư toàn xã hội quý (so cùng kỳ)%quý03/2014 · đủ từ 03/2018
public_investVốn đầu tư thực hiện từ ngân sách nhà nước thángnghìn tỷ đồngtháng01/2000
public_invest_ytd_yoyVốn ngân sách nhà nước lũy kế (so cùng kỳ)%tháng03/2000 · đủ từ 02/2011
weo_gdp_growthTăng trưởng GDP thực (IMF WEO)%năm04/1990
weo_gdp_usdGDP danh nghĩa (IMF WEO)tỷ USDnăm09/2003
weo_gdp_pcGDP bình quân đầu người (IMF WEO)USDnăm09/2003
weo_gdp_pc_pppGDP bình quân đầu người theo sức mua (IMF WEO)USD PPPnăm09/2003
weo_gov_debtNợ chính phủ / GDP (IMF WEO)%năm10/2010
wb_gfcfTích lũy tài sản cố địnhnghìn tỷ đồngnăm07/1996

Sản xuất và doanh nghiệp

MãChuỗiĐơn vịKỳDùng được từ
wb_inventoryBiến động tồn khonghìn tỷ đồngnăm07/1996
iip_yoyChỉ số sản xuất công nghiệp (so cùng kỳ)%tháng06/2011
iip_mfg_yoyIIP chế biến, chế tạo (so cùng kỳ)%tháng07/2012
iip_mining_yoyIIP khai khoáng (so cùng kỳ)%tháng07/2012
iip_power_yoyIIP sản xuất và phân phối điện (so cùng kỳ)%tháng07/2012
electricityĐiện sản xuấttỷ kWhtháng04/2007 · đủ từ 07/2007
crude_oilDầu thô khai thácnghìn tấntháng04/2007 · đủ từ 07/2007
steelThép cánnghìn tấntháng01/2000 · đủ từ 01/2013
cementXi măngtriệu tấntháng01/2000
firms_new_ytdDoanh nghiệp thành lập mới (lũy kế)doanh nghiệptháng11/2017
firms_return_ytdDoanh nghiệp quay lại hoạt động (lũy kế)doanh nghiệptháng09/2016
firms_suspended_ytdDoanh nghiệp tạm ngừng kinh doanh (lũy kế)doanh nghiệptháng09/2016
firms_dissolved_ytdDoanh nghiệp giải thể (lũy kế)doanh nghiệptháng09/2018

Lạm phát và giá

MãChuỗiĐơn vịKỳDùng được từ
weo_inflationLạm phát bình quân năm (IMF WEO)%năm04/1990
cpi_yoyCPI (so cùng kỳ)%tháng01/2000
cpi_momCPI (so tháng trước)%tháng01/2000
cpi_ytd_avgCPI bình quân từ đầu năm (so cùng kỳ)%tháng09/2007
cpi_vs_decCPI so tháng 12 năm trước%tháng01/2000
cpi_core_yoyLạm phát cơ bản (so cùng kỳ)%tháng01/2015
cpi_food_yoyCPI hàng ăn và dịch vụ ăn uống (so cùng kỳ)%tháng05/2006
cpi_transport_yoyCPI giao thông (so cùng kỳ)%tháng11/2009
gold_index_yoyChỉ số giá vàng (so cùng kỳ)%tháng01/2000
usd_index_yoyChỉ số giá đô la Mỹ (so cùng kỳ)%tháng01/2000
cpi_indexCPI (chỉ số, nối qua các kỳ gốc)điểmtháng01/2000
ppi_yoyGiá sản xuất công nghiệp (so cùng kỳ)%quý03/2011 · đủ từ 12/2012
export_price_yoyGiá xuất khẩu hàng hóa (so cùng kỳ)%quý03/2018
import_price_yoyGiá nhập khẩu hàng hóa (so cùng kỳ)%quý03/2018
petrol_ron95Giá xăng RON 95 (vùng 1)đồng/lítngày09/10/2008
dieselGiá dầu điêzen 0,05S (vùng 1)đồng/lítngày03/12/2008

Tiền tệ và lãi suất

MãChuỗiĐơn vịKỳDùng được từ
ib_onLãi suất liên ngân hàng qua đêm%ngày06/01/2014
ib_1wLãi suất liên ngân hàng 1 tuần%ngày06/01/2014
ib_2wLãi suất liên ngân hàng 2 tuần%ngày06/01/2014
ib_1mLãi suất liên ngân hàng 1 tháng%ngày06/01/2014
ib_3mLãi suất liên ngân hàng 3 tháng%ngày06/01/2014
ib_6mLãi suất liên ngân hàng 6 tháng%ngày06/01/2014 · đủ từ 30/06/2014
ib_9mLãi suất liên ngân hàng 9 tháng%ngày06/01/2014
ib_vol_onDoanh số liên ngân hàng qua đêmnghìn tỷ đồngngày06/01/2014
ib_vol_1wDoanh số liên ngân hàng 1 tuầnnghìn tỷ đồngngày06/01/2014
ib_vol_2wDoanh số liên ngân hàng 2 tuầnnghìn tỷ đồngngày06/01/2014
ib_vol_1mDoanh số liên ngân hàng 1 thángnghìn tỷ đồngngày06/01/2014
ib_vol_3mDoanh số liên ngân hàng 3 thángnghìn tỷ đồngngày06/01/2014
ib_vol_6mDoanh số liên ngân hàng 6 thángnghìn tỷ đồngngày06/01/2014 · đủ từ 30/06/2014
ib_vol_9mDoanh số liên ngân hàng 9 thángnghìn tỷ đồngngày06/01/2014
omo_injectionBơm tiền qua thị trường mở (trúng thầu trong ngày)nghìn tỷ đồngngày22/04/2025 · đủ từ 05/11/2025
omo_outstandingDư nợ thị trường mở cuối ngàynghìn tỷ đồngngày18/02/2026
credit_ytdTăng trưởng tín dụng từ đầu năm%tháng02/2015 · đủ từ 03/2025
creditDư nợ tín dụng đối với nền kinh tếnghìn tỷ đồngtháng02/2015 · đủ từ 03/2025
m2_ytdTổng phương tiện thanh toán tăng từ đầu năm%tháng03/2025 · đủ từ 05/2026
m2Tổng phương tiện thanh toánnghìn tỷ đồngtháng03/2025
usd_vcb_sellUSD/VND bán ra (Vietcombank)đồngngày01/02/2020
usd_vcb_buyUSD/VND mua chuyển khoản (Vietcombank)đồngngày01/02/2020
usd_imfUSD/VND cuối tháng (IMF)đồngtháng02/1995
fx_reservesDự trữ quốc tế không kể vàngtỷ USDtháng04/1995 · đủ từ 03/2001
wb_deposit_rateLãi suất tiền gửi bình quân năm%năm07/1994 · đủ từ 07/1998
wb_lending_rateLãi suất cho vay bình quân năm%năm07/1994 · đủ từ 07/1997

Thương mại và vốn ngoại

MãChuỗiĐơn vịKỳDùng được từ
terms_of_trade_yoyTỷ giá thương mại hàng hóa (so cùng kỳ)%quý06/2015
exportXuất khẩu hàng hóa thángtỷ USDtháng03/2009 · đủ từ 05/2014
importNhập khẩu hàng hóa thángtỷ USDtháng03/2009
trade_balanceCán cân thương mại hàng hóa thángtỷ USDtháng03/2009 · đủ từ 05/2014
fdi_new_ytdFDI đăng ký cấp mới (lũy kế)tỷ USDtháng03/2001 · đủ từ 05/2019
fdi_adjusted_ytdFDI đăng ký điều chỉnh (lũy kế)tỷ USDtháng05/2019
touristsKhách quốc tế đến Việt Namnghìn lượttháng03/2001
current_accountCán cân vãng lai quýtỷ USDquý06/2025
weo_ca_gdpCán cân vãng lai / GDP (IMF WEO)%năm04/1990
wb_external_debtNợ nước ngoàitỷ USDnăm07/1982

Tiêu dùng

MãChuỗiĐơn vịKỳDùng được từ
wb_consumptionTiêu dùng cuối cùng của hộ gia đìnhnghìn tỷ đồngnăm07/1996
retail_yoyTổng mức bán lẻ hàng hóa, dịch vụ (so cùng kỳ)%tháng01/2004 · đủ từ 09/2018
retailTổng mức bán lẻ hàng hóa, dịch vụ thángnghìn tỷ đồngtháng01/2004 · đủ từ 01/2013

Lao động và dân số

MãChuỗiĐơn vịKỳDùng được từ
weo_populationDân số (IMF WEO)triệu ngườinăm09/2006
unemploymentTỷ lệ thất nghiệp trong độ tuổi lao động%quý04/2013
youth_unemploymentTỷ lệ thất nghiệp thanh niên 15–24 tuổi%quý04/2013
underemploymentTỷ lệ thiếu việc làm trong độ tuổi lao động%quý04/2013
labour_forceLực lượng lao động từ 15 tuổinghìn ngườiquý04/2013
Chuỗi thiếu kỳ định kỳ

Một số chuỗi thiếu cùng một tháng mỗi năm (nguồn không công bố riêng kỳ đó); trong tháng thiếu, d.macro giữ số của kỳ trước: cpi_mom không có tháng 1 (báo cáo tháng 1 chỉ có số so tháng 12, tức cpi_vs_dec); cpi_vs_dec không có tháng 12; cpi_ytd_avg không có tháng 1, 3, 12; public_invest_ytd_yoy không có tháng 12 và tháng 1; fdi_new_ytd, fdi_adjusted_ytd và firms_*_ytd không có tháng 12. GDP theo giá so sánh đổi năm gốc từ quý 1/2026: không so mức GDP qua mốc này.

Hai nhóm chuỗi ngày có số thưa theo bản chất: petrol_ron95, diesel chỉ có số ở ngày điều chỉnh giá (khoảng 25 lần mỗi năm), giữa hai lần điều chỉnh d.macro giữ giá cũ — đúng giá bán lẻ lúc đó; ib_9m, ib_vol_9m chỉ có số ở phiên có giao dịch kỳ hạn 9 tháng (khoảng một phần năm số phiên, năm 2026 có những đoạn trống hơn một tháng) — nên dùng kỳ hạn ngắn hơn.

d.bench, d.meta và thông tin khác​

Thành phầnÝ nghĩa
d.bench.open … d.bench.volumeChỉ số so sánh (mặc định VNINDEX; chiến lược đổi bằng benchmark), Panel một hàng cùng lịch phiên. Có trong chiến lược và phân tích, không có trong bộ lọc
d.symbolsDanh sách mã theo thứ tự hàng
d.daysNgày của từng phiên: số ngày kể từ 01/01/1970 (dùng với dates.*)
d.meta[i]Thông tin mã thứ i — bảng dưới
d.partialLasttrue khi phiên cuối là nến tạm của phiên đang giao dịch
d.asOfPhiên cuối đã chốt dữ liệu
d.field("tên")Lấy trường theo tên dạng chữ, ví dụ d.field("foreignNet")
Thuộc tính của d.meta[i]Ý nghĩa
symbol, nameMã, tên doanh nghiệp
exchangeSàn: "HSX" (HOSE), "HNX", "UPCOM"; mã đã hủy niêm yết không rõ sàn cũ thì ""
typeLoại mã: "stock" (cổ phiếu, ETF), "index", "futures", "warrant"
icb, industry, industryShort, sectorMã ngành ICB, tên ngành, tên ngành ngắn ("Chứng khoán", "Bất động sản"…), nhóm ngành cấp trên
sharesSố cổ phiếu lưu hành
adv20GTGD bình quân 20 phiên hiện tại (đồng)
price, marketCapGiá (nghìn đồng), vốn hóa (đồng) hiện tại
listFrom, listTo, delistedAtChỉ có ở rổ theo thời điểm: khoảng ngày mã thuộc rổ, phiên giao dịch cuối của mã đã hủy niêm yết

Phép tính trên Panel​

Phép tính trả về Panel mới; tham số là số hoặc Panel khác. Đủ chữ ký, cách xử lý NaN: Tham chiếu hàm.

NhómHàm
Số họcadd sub mul div (chia 0 → NaN) pow min max neg abs log exp sqrt sign round clip(lo, hi)
So sánh (1 / 0 / NaN)gt gte lt lte eq neq between(a, b)
Logicand or not · where(điềuKiện, giáTrịKhác) · fillna(v) · ffill(giớiHạn?) · isNaN notNaN
Theo thời gian (từng mã)shift(n ≥ 0) · diff(n) · pct(n) · cumsum cumprod cummax cummin · ewm(span) · highest(n) lowest(n)
Cửa sổ trượtrolling(n).mean() .sum() .std() .var() .min() .max() .count() .rank() .zscore()
Sự kiệncrossAbove(x) crossBelow(x) · barsSince() · hold(n)
Cắt ngang (giữa các mã, từng phiên)rank() zscore() demean() bucket(q) topN(n) bottomN(n) · sumAcross() meanAcross() countAcross()
Lấy giá trịlast() · at(ngày) · values("FPT") · row(i) · get(i, t) · pick([mã]) · range(từ, đến)
Đổi tần suấtresample("week" | "month" | "quarter" | "year") rồi .last() .first() .sum() .mean() .max() .min()

Công thức hay dùng:

Muốn tínhViết
KL so với bình quân 20 phiênd.volume.div(d.volume.rolling(20).mean())
Khoảng cách tới đỉnh 52 tuầnd.close.div(d.high.highest(250)).sub(1)
Đà tăng 6 tháng, bỏ tháng gần nhấtd.close.shift(21).pct(105)
Hạng đà tăng trong rổ (0 → 1)d.close.pct(126).rank()
Biến động 60 phiên, nhóm thấp nhất 60% rổd.ret.rolling(60).std().rank().lte(0.6)
Giá vượt đỉnh 20 phiên trước đód.close.gt(d.high.highest(20).shift(1))
MA50 vừa cắt lên MA200 trong 10 phiên gần nhấtta.sma(d.close, 50).crossAbove(ta.sma(d.close, 200)).hold(9)
Số phiên từ khi có BCTC mớid.reportNew.eq(1).barsSince()
P/E so với 5 năm của chính mã (0 = rẻ nhất)d.pe.rolling(1250).rank()
Tiền mặt ròng (tiền + đầu tư ngắn hạn − nợ vay)d.fin("Cash").fillna(0).add(d.fin("CashEquivalent").fillna(0)).add(d.fin("ShortTermFinancialInvestment").fillna(0)).sub(d.fin("ShortTermInterestBearingDebt").fillna(0)).sub(d.fin("LongTermInterestBearingDebt").fillna(0))
VNINDEX trên MA200 (áp cho mọi mã)d.close.gt(0).and(d.bench.close.gt(ta.sma(d.bench.close, 200)))
Tỷ lệ mã trong rổ trên MA50d.close.gt(ta.sma(d.close, 50)).meanAcross()
Lợi nhuận theo thángd.close.resample("month").last().pct(1)

rolling(n) là cửa sổ nghiêm ngặt: cần đủ n giá trị liên tiếp không NaN mới có kết quả (mã mới niêm yết chưa có MA200 trong 200 phiên đầu). std() của cửa sổ trượt là độ lệch chuẩn tổng thể (chia n, như Bollinger); ewm(span) khởi đầu bằng trung bình của span giá trị đầu.

Tránh nhìn trước tương lai​

Tín hiệu ở phiên t chỉ được dùng dữ liệu tới hết phiên t. SDK chặn từ gốc và Studio kiểm tra lại mỗi lần backtest (cách kiểm tra).

SaiĐúng
d.close.shift(-1) — giá phiên sau (báo lỗi ngay)Tín hiệu cuối phiên t, Studio tự khớp ở phiên t + 1
d.close.gt(d.close.mean()) — trung bình của cả bảng, cả lịch sửd.close.gt(d.close.rolling(250).mean()) hoặc cummax()
Chuẩn hoá bằng giá trị lớn nhất của cả chuỗirolling(n).zscore(), rolling(n).rank()
Chọn mã theo thông tin hôm nay (.where((m) => m.marketCap > 1e13)) cho backtest dài.liquid(…), .top(n) — xét theo từng thời điểm
stats.forward(giá, 20) làm tín hiệuChỉ dùng forward trong phân tích để đo kết quả sau sự kiện

Tự dựng Panel​

Cần tính theo vòng lặp (gom nhóm ngành, logic phức tạp) thì tính trên mảng rồi dựng lại Panel cùng lịch phiên:

// Điểm = đà tăng của mã, chỉ cho mã thuộc 3 ngành có đà tăng trung bình cao nhất ở từng phiên
const mom = d.close.pct(126);
const groups = new Map();
d.meta.forEach((m, i) => groups.set(m.industry, [...(groups.get(m.industry) ?? []), i]));
const rows = d.symbols.map(() => new Float32Array(d.days.length).fill(NaN));
for (let t = 0; t < d.days.length; t++) {
const ranked = [...groups.values()]
.map((idx) => ({ idx, avg: stats.mean(idx.map((i) => mom.get(i, t))) }))
.filter((g) => Number.isFinite(g.avg))
.sort((a, b) => b.avg - a.avg);
for (const g of ranked.slice(0, 3)) for (const i of g.idx) rows[i][t] = mom.get(i, t);
}
const score = Panel.fromRows(d.symbols, d.days, rows);

Panel.fromRows(tênHàng, ngày, mảngCácHàng) dựng Panel từ mảng (mỗi hàng dài bằng d.days); Panel.full(tênHàng, ngày, giáTrị) dựng Panel một giá trị. Trong phân tích, Panel.fromRows(["Tên"], d.days, [mảng]) giúp vẽ một chuỗi tự tính theo trục ngày.