33 hàm bảng tính cho dữ liệu chứng khoán Việt Nam. Gõ =FINLENS. trong ô bất kỳ để Excel gợi ý toàn bộ danh sách.
Dấu ngăn tham số tuỳ máy bạn. Ví dụ dưới đây viết bằng dấu phẩy
(,). Nếu Excel của bạn dùng dấu chấm phẩy thì gõ
=FINLENS.PRICE("HPG";"close") — Excel đổi theo cấu hình vùng của Windows,
không phải theo add-in.
Hàm trả về BẢNG thì tự tràn ra các ô bên cạnh. Gõ vào một ô, đừng chọn
sẵn một vùng. Ô bên dưới hoặc bên phải có dữ liệu sẽ cho #SPILL!.
Cần đăng nhập. Mở ngăn FinLens trên dải băng (ribbon) và đăng nhập một lần; các ô sẽ tự có số.
Không có hàm nào khớp.
FINLENS.PRICE=FINLENS.PRICE(symbol, [field], [date])
Giá cuối ngày của một mã. Bỏ trống ngày = phiên gần nhất có dữ liệu.
Ví dụ=FINLENS.PRICE("HPG")
Lưu ý. Cổ phiếu trả NGHÌN ĐỒNG (22.1 = 22.100đ), chứng quyền trả ĐỒNG thô, chỉ số và phái sinh trả ĐIỂM. Dùng FINLENS.UNIT để biết chắc trước khi nhân chia.
FINLENS.QUOTE=FINLENS.QUOTE(symbols, [fields])
Bảng giá nhiều mã trong một công thức. Nhận cả một vùng ô lẫn chuỗi ngăn phẩy.
Ví dụ=FINLENS.QUOTE(A2:A21,"close,change,pct_change,volume")
Lưu ý. Mã hỏng chỉ làm hỏng DÒNG của nó, các dòng khác vẫn có số. Cột change/pct_change cần phiên liền trước; không có thì để trống chứ không trả 0.
FINLENS.HISTORY=FINLENS.HISTORY(symbol, [from], [to], [interval], [fields], [adjusted])
Lịch sử giá OHLCV, bảng tràn có cột ticker đứng đầu. Mặc định là GIÁ ĐÃ ĐIỀU CHỈNH quyền.
Ví dụ=FINLENS.HISTORY("HPG","2025-01-01","2025-12-31","1d")
Lưu ý. Giá mặc định ĐÃ ĐIỀU CHỈNH quyền. Chuỗi liên tục, so sánh được qua các lần chia tách và cổ tức. Cần giá THÔ của đúng ngày đó thì truyền tham số cuối = FALSE; khi đó tiêu đề cột ghi thêm [giá thô]. Tiêu đề cột KHÔNG ghi đơn vị. Để chép tiêu đề dán ngược vào công thức là chạy được. Cần biết đơn vị thì hỏi thẳng FINLENS.UNIT: cổ phiếu nghìn đồng, chỉ số và phái sinh điểm, chứng quyền đồng thô. OHLC làm tròn 2 chữ số thập phân. interval: 1d · 1w · 1mo · 3mo · 6mo · 1y. "1M" và "1m" BỊ TỪ CHỐI vì nhập nhằng tháng/phút. Với kỳ gộp, cột ngày là PHIÊN CUỐI THỰC CÓ, không phải ngày cuối theo lịch. Cột ngày là chuỗi yyyy-mm-dd; cần ngày thật thì bọc DATEVALUE. Cột ticker luôn đứng đầu: xếp nhiều khối HISTORY chồng nhau thành một bảng dài rồi lọc theo mã.
FINLENS.SEARCH=FINLENS.SEARCH(query, [limit])
Tìm mã theo tên hoặc theo mã. Gõ KHÔNG DẤU cũng ra.
Ví dụ=FINLENS.SEARCH("hoa phat")
Lưu ý. Gõ không dấu được: "hoa phat" và "Hòa Phát" cho cùng kết quả. Mặc định 10 dòng, trần 50. Đây là bảng tràn nên đừng để nó đè lên dữ liệu bên dưới. CHỈ CÓ CỔ PHIẾU: chứng quyền, chỉ số và phái sinh nằm ở nguồn khác nên SEARCH("VNINDEX") trả rỗng, trong khi FINLENS.PRICE("VNINDEX") vẫn chạy. Kết quả xếp theo mức khớp: trùng đúng mã lên đầu, rồi tiền tố mã, rồi tiền tố tên.
FINLENS.INFO=FINLENS.INFO(symbol, [field])
Một thuộc tính hồ sơ của mã: tên, sàn, ngành ICB, loại hình.
Ví dụ=FINLENS.INFO("HPG","exchange")
Lưu ý. Mặc định trả tên đầy đủ; dùng "short_name" cho tên vừa một ô. Xem đủ thuộc tính bằng =FINLENS.FIELDS("INFO"). Trường exchange là SÀN NIÊM YẾT (HOSE/HNX/UPCOM) đã suy ra từ rổ chỉ số: khác index_group vốn giữ mã rổ thô như VNINDEX. icb_code là CHUỖI, đừng ép sang số kẻo mất số 0 đứng đầu. Nguồn chỉ có cổ phiếu.
FINLENS.INDEX=FINLENS.INDEX(index, [field], [date])
Chỉ số thị trường: VNINDEX, VN30, HNX30, HNXINDEX, UPINDEX, VNXALL.
Ví dụ=FINLENS.INDEX("VNINDEX","pct_change")
Lưu ý. ĐƠN VỊ LÀ ĐIỂM, không phải tiền: VNINDEX 1732.02 là 1.732 điểm, nhân với số lượng là phép tính vô nghĩa. Gõ "HNX" hay "UPCOM" cũng nhận. Chỉ 6 chỉ số có dữ liệu; danh sách 37 mã trong bảng chỉ số của web app có 31 mã chưa dựng chuỗi giá.
FINLENS.SECTOR=FINLENS.SECTOR(icb, [field], [date])
Chỉ số ngành ICB. Tham số là MÃ ngành dạng số, ví dụ 8355 (Ngân hàng).
Ví dụ=FINLENS.SECTOR("8355","pct_change")
Lưu ý. THANG ĐO KHÁC HẲN chỉ số thị trường: đây là chỉ số total-return base 100 tại ngày khởi tạo RIÊNG của từng ngành. So SECTOR("8355") với INDEX("VNINDEX") là so hai thang khác nhau; hai ngành khởi tạo khác ngày cũng không so trực tiếp được. Dùng pct_change khi cần so sánh. Chỉ ICB cấp 2 và cấp 4 có chỉ số. Giữ nguyên số 0 đứng đầu: "0500" khác 500.
FINLENS.CALENDAR=FINLENS.CALENDAR(from, to, [field])
Danh sách phiên giao dịch trong một khoảng, kèm cờ phiên cuối tuần/tháng/quý/năm.
Ví dụ=FINLENS.CALENDAR("2026-01-01","2026-03-31")
Lưu ý. NETWORKDAYS của Excel SAI ở đây. Nó chỉ biết thứ Bảy và Chủ nhật nên sai ở mọi kỳ nghỉ Tết. Cờ cuối kỳ tính trên phiên THỰC CÓ: phiên cuối tháng 1/2025 là 24/01, không phải 31/01. Dùng cột session_index để đếm phiên, is_month_end để lấy phiên chốt kỳ.
FINLENS.LASTUPDATE=FINLENS.LASTUPDATE([dataset])
Ngày dữ liệu mới nhất mà TÀI KHOẢN NÀY truy được.
Ví dụ=FINLENS.LASTUPDATE("eod.ohlcv")
Lưu ý. Trả ngày BẠN thực sự truy được, đã trừ độ trễ của gói, không phải mốc trên server. Gói Standard chậm 1 phiên ở dữ liệu giá, nên hàm này và FINLENS.PRICE luôn nói cùng một ngày. Đặt một ô cạnh bảng để biết số đang tính là của lúc nào, rẻ hơn nhiều so với một ticket hỗ trợ.
FINLENS.PERIODS=FINLENS.PERIODS(symbol, [periodType])
Các kỳ báo cáo tài chính thực có của một mã: bảng tràn, mới nhất trước.
Ví dụ=FINLENS.PERIODS("FPT","annual")
Lưu ý. Hàm nên chạy TRƯỚC khi dựng mô hình. Nó trả lời câu "tôi xin từ 2010 mà chỉ nhận từ 2015: mất dữ liệu à?", và cột company_type nói cho biết mã này là Ngân hàng hay Chứng khoán: hai loại đó có cây khoản mục khác hẳn doanh nghiệp thường, nên cùng một tên khoản mục là hai đại lượng khác nhau. period_type nhận annual · quarterly · ttm; ttm trả về đúng danh sách kỳ quý vì TTM là phép tính trên kỳ quý, không phải một kỳ riêng.
FINLENS.STATEMENT=FINLENS.STATEMENT(symbol, statement, [period], [nPeriods], [reportType], [scale])
Báo cáo tài chính đầy đủ: bảng tràn, một dòng một chỉ tiêu, cột là kỳ.
Ví dụ=FINLENS.STATEMENT("FPT","income","annual",8,,"billion")
Lưu ý. Năm điều phải biết trước khi dùng. (1) Bảng này CHUYỂN VỊ so với mọi hàm tràn khác: cột là KỲ (2024, Q3 2025…) chứ không phải tên trường, và nó nở theo số kỳ nên dễ đụng công thức bên phải. (2) ĐƠN VỊ NẰM THEO DÒNG, không theo cột. EPS là VND/cổ phiếu còn tổng tài sản là VND, cùng một cột, lệch nhau chín chữ số; đừng áp một định dạng số cho cả cột và đừng cộng dồn các dòng khác đơn vị. (3) Ô TRỐNG KHÁC 0. Trống là doanh nghiệp không công bố, 0 là họ công bố bằng 0; tính tăng trưởng trên ô trống cho ra ±100% giả. (4) Ngân hàng, chứng khoán, bảo hiểm có cây khoản mục khác hẳn doanh nghiệp thường, nên cùng một tên khoản mục ở hai nhóm là hai đại lượng khác nhau. Chạy FINLENS.PERIODS trước để biết mã thuộc nhóm nào. (5) HỢP NHẤT VÀ RIÊNG LẺ là hai bảng khác nhau và ô không nói bạn đang xem bản nào; bỏ trống reportType là lấy hợp nhất. statement nhận balance · income · cashflow; period nhận annual · quarterly (KHÔNG có ttm. Muốn trượt 4 quý thì lấy quarterly rồi tự cộng, và chỉ cộng được income với cashflow); nPeriods tối đa 40; reportType nhận consolidated · separate. (6) scale chỉ đổi CÁCH HIỂN THỊ cột tiền. Unit (đồng, mặc định) · million (triệu) · billion (tỷ); ô vẫn giữ số đồng thô nên SUM vẫn đúng, và dòng EPS không đổi theo thang này vì nó là đồng/cổ phiếu. scale cần bật Tự động định dạng ở màn Cài đặt: hàm tuỳ biến không đặt được định dạng ô, nó chỉ gửi yêu cầu sang panel. Tắt công tắc đó thì dữ liệu vẫn đúng nhưng hiện ở đồng.
FINLENS.INDICATOR=FINLENS.INDICATOR(symbol, [ratios], [period], [nPeriods], [frame])
Chỉ tiêu tài chính: sinh lời, đòn bẩy, dòng tiền, định giá. Bảng tràn, một dòng một chỉ tiêu, cột là kỳ.
Ví dụ=FINLENS.INDICATOR("HPG","roe,roa,pe","annual",4)
Lưu ý. Sáu điều phải biết trước khi dùng. (1) ĐƠN VỊ NẰM THEO DÒNG VÀ ĐỔI THEO KHUNG. Đây là chỗ dễ đọc sai nhất, nên bảng có hẳn một cột Đơn vị. Cùng chỉ tiêu ROE: khung level trả 0,1106 nghĩa là 11,06%, còn khung yoy trả 0,0418 nghĩa là +4,18 ĐIỂM phần trăm, không phải 4,18%. Số ngày tồn kho ở khung level là 122,21 ngày nhưng ở khung yoy là 0,0289 = +2,89% (tương đối), không phải 0,03 ngày. (2) Ô TRỐNG KHÁC 0. Trống nghĩa là chỉ tiêu chưa tính được cho kỳ đó hoặc bị luật mẫu số chặn; vốn chủ sở hữu ≤ 0 thì ROE để trống chứ không phải một số âm vô nghĩa, đo FY2024 có 66/1.416 doanh nghiệp rơi vào ca này. (3) NGÂN HÀNG, CHỨNG KHOÁN, BẢO HIỂM có BỘ chỉ tiêu khác hẳn. Cir chỉ có ở ngân hàng, số ngày tồn kho không có ở đó; P/S và EV/EBITDA không phát cho ngân hàng vì nợ vay của họ là nguyên liệu kinh doanh chứ không phải cấu trúc vốn. Xin một mã không thuộc nhóm sẽ báo lỗi kèm tên mã, không im lặng trả cột rỗng. (4) ratios nhận HAI dạng: danh sách mã ngăn phẩy (roe,roa,pe) hoặc MỘT tên nhóm (valuation, profitability, leverage, liquidity, efficiency, growth, cashflow, capital, asset_quality, revenue_mix, underwriting, balance_sheet). Bỏ trống là lấy toàn bộ danh mục của nhóm doanh nghiệp đó. (5) frame nhận level (giá trị kỳ) · ttm (12 tháng gần nhất, CHỈ ở kỳ quý) · yoy (so cùng kỳ năm trước). KHÔNG có qoq: yoy ở kỳ quý đã là so cùng quý năm trước nên tự khử mùa vụ. Và TTM ở đây là một KHUNG, không phải một loại kỳ. Period chỉ nhận annual · quarterly. Chỉ tiêu không có khung đang hỏi sẽ bị BỎ khỏi bảng, không trả dòng toàn ô rỗng. (6) Nhóm ĐỊNH GIÁ (pe, pb, ps, pcf, ev_ebitda) do FinLens tính tại chỗ từ giá CUỐI KỲ của chính cột đó, không phải giá hôm nay, nếu không thì mọi cột chung một tử số. Đó là P/E hồi tố: ngày 31/12/2024 thị trường chưa biết lợi nhuận cả năm 2024.
FINLENS.FLOW=FINLENS.FLOW(symbol, [from], [to], [group])
Dòng tiền theo nhóm nhà đầu tư: bảng tràn, mỗi phiên một dòng.
Ví dụ=FINLENS.FLOW("HPG","2026-01-01","2026-08-18")
Lưu ý. Ba điều phải biết trước khi dùng. (1) Chỉ có cho một phần cổ phiếu HOSE: 294/431 mã; mã HNX, UPCOM và cả một số mã HOSE như BSR, BCM sẽ báo rõ lý do chứ không trả bảng rỗng. (2) CHỈ TÍNH KHỚP LỆNH, không gồm thoả thuận, nên số của hàm này lệch với FINLENS.FOREIGN: đo được 15,96% cộng dồn, lớn nhất 2.334 tỷ một phiên; cả hai đều đúng vì chúng trả lời hai câu hỏi khác nhau. (3) proprietary (tự doanh) NẰM TRONG local_institution: cộng cả bốn nhóm là đếm hai lần; ba nhóm phân hoạch trọn vẹn là local_individual, local_institution, foreign, và tổng ba nhóm đó bằng đúng 0 ở mọi phiên.
FINLENS.FOREIGN=FINLENS.FOREIGN(symbol, [from], [to], [field])
Giao dịch khối ngoại theo phiên: bảng tràn, đủ ba sàn.
Ví dụ=FINLENS.FOREIGN("HPG","2026-01-01","2026-08-18")
Lưu ý. TÍNH CẢ THOẢ THUẬN. Đó là khác biệt với nhóm foreign của FINLENS.FLOW, vốn chỉ tính khớp lệnh. Đo trên 60 phiên: chỉ 53,1% số dòng trùng khít. Dùng hàm này khi muốn biết khối ngoại đã mua bán bao nhiêu; dùng FLOW khi muốn so khối ngoại với các nhóm nhà đầu tư khác trên cùng một cơ sở. Bù lại, hàm này có đủ HOSE, HNX và UPCOM.
FINLENS.TA=FINLENS.TA(symbol, indicator, [period], [date])
MỘT chỉ báo kỹ thuật tại một phiên: trả về một số.
Ví dụ=FINLENS.TA("FPT","rsi",21)
Lưu ý. Chu kỳ TUỲ Ý. Bản trước khoá cứng 14, giờ gõ 21 hay 200 đều được. Ba điều cần biết. (1) Chỉ báo NHIỀU ĐƯỜNG phải chọn đường: FINLENS.TA("HPG","macd.hist") chứ không phải "macd" trần, nếu lặng lẽ lấy đường đầu thì con số đúng dải nhưng sai câu hỏi. (2) Vừa gõ ngoặc vừa truyền period ("rsi(14)" kèm 21) là LỖI, vì không biết số nào thắng; và period cho chỉ báo nhiều tham số cũng là lỗi (12 của macd là fast hay slow?). (3) beta, fibo_*, high_1y, low_1y là trường TÍNH SẴN nên CHỈ có phiên mới nhất: truyền date là lỗi; còn rsi, ma, macd, atr… tính tại chỗ nên có lịch sử đầy đủ. Muốn cả chuỗi thời gian thì dùng FINLENS.TASERIES.
FINLENS.TASERIES=FINLENS.TASERIES(symbol, [from], [to], [interval], [indicators])
Chuỗi thời gian NHIỀU chỉ báo: bảng tràn, mỗi phiên một dòng.
Ví dụ=FINLENS.TASERIES("HPG","2026-01-01",,,"close,rsi(14),ma(20),macd(12,26,9).hist")
Lưu ý. TIÊU ĐỀ CỘT LÀ CÔNG THỨC CHẠY ĐƯỢC: cột hiện ra rsi(14) hay macd(12,26,9).hist, chép đúng chuỗi đó dán vào tham số indicators là chạy. Đó là lý do chuỗi được chuẩn hoá thay vì hiện nguyên thứ bạn gõ. Tham số tuỳ ý: rsi(21), ema(200), bb(timeperiod=20,ndev=2.5).upper. Dấu thập phân trong chuỗi LUÔN là dấu chấm, vì dấu phẩy đã dùng để ngăn tham số. ĐỔI NGUỒN TÍNH bằng hậu tố @: ma(20)@volume là trung bình động 20 phiên CỦA KHỐI LƯỢNG, không phải của giá. Dùng được với 19 chỉ báo ăn đúng một chuỗi (ma, ema, wma, tema, dema, trima, kama, t3, trix, ppo, apo, midpoint, rsi, macd, stochrsi, roc, mom, cmo, bb); các chỉ báo cần đủ high/low/close như atr, adx hay ultosc thì không. Lưu ý khối lượng KHÔNG điều chỉnh quyền trong khi giá thì có, nên chuỗi @volume có bậc thang tại mỗi lần chia tách. HAI CHỈ BÁO SO VỚI RỔ THAM CHIẾU: beta và correl nhận thêm một tham số MÃ. Beta(60,vnindex) là beta 60 phiên so với VNINDEX, beta(250,vn30) đổi cả cửa sổ lẫn rổ, và rổ cũng có thể là một mã cổ phiếu như beta(60,vcb). Chỉ số dùng được: VNINDEX, VN30, HNX30, HNXINDEX, UPINDEX, VNXALL. Ô TRỐNG ở đầu bảng nghĩa là chưa đủ warm-up, KHÔNG phải chỉ báo bằng 0. Mã mới niêm yết sẽ có vài dòng đầu trống. Thứ tự tham số chép đúng FINLENS.HISTORY nên hai hàm đặt cạnh nhau không lẫn.
FINLENS.TATABLE=FINLENS.TATABLE(symbols, [date], [indicators])
Nhiều mã × nhiều chỉ báo tại MỘT phiên: bảng tràn.
Ví dụ=FINLENS.TATABLE("HPG,VCB,FPT",,"rsi(14),adx(14)")
Lưu ý. Tham số symbols nhận VÙNG Ô, nên dùng thẳng được toán tử tràn: =FINLENS.TATABLE(A9#,,"rsi(14)") ghép ngay với bảng FINLENS.PEERS ở trên. Thay được cả một khối công thức lẻ. Mẫu Mô hình so sánh ngành trước đây cần ~30 ô riêng, giờ là một ô. Chỉ báo nhiều đường phải chọn đường (macd.hist), vì mỗi ô ở đây là một con số. Bảng KHÔNG có cột date: cả bảng cùng một phiên, và phiên đó nằm ở FINLENS.LASTUPDATE.
FINLENS.CANDLE=FINLENS.CANDLE(symbol, [from], [to], [patterns])
Mẫu nến Nhật: bảng tràn danh sách SỰ KIỆN, mỗi lần xuất hiện một dòng.
Ví dụ=FINLENS.CANDLE("HPG","2026-01-01",,"cdl_engulfing,cdl_morningstar")
Lưu ý. Hàm trả SỰ KIỆN chứ không trả cả chuỗi: 61 mẫu × 250 phiên là hơn 15.000 ô mà 99% là số 0, nên chỉ những phiên thực sự có tín hiệu mới thành dòng. Cột value: DẤU là hướng (dương = tăng giá), ĐỘ LỚN là độ mạnh. Miền đo được trên dữ liệu thật là -200, -100, -80, 80, 100, 200. KHÁC với tài liệu TA-Lib vốn chỉ nói ±100 và ±200: giá trị ±80 xuất hiện ở engulfing, harami, haramicross, nên lọc =100 sẽ bỏ sót tín hiệu của đúng ba mẫu hay gặp nhất. Lọc theo hướng thì dùng >0 hoặc <0. Có đủ 61 mẫu, tra tên bằng =FINLENS.FIELDS("TA").
FINLENS.RS=FINLENS.RS(symbol, [field])
RS Rating: sức mạnh giá tương đối so với thị trường và so với ngành.
Ví dụ=FINLENS.RS("FPT","rs_rating")
Lưu ý. BA THANG ĐO khác nhau trong cùng một hàm: rs_rating là 0-100, industry_rs và rs_vs_industry là 1-100, rs_score là 0-1, đừng so trực tiếp rs_score với rs_rating. Và RS chỉ tính cho rổ thanh khoản, khoảng 328 trên 1.600 mã mỗi phiên; mã rớt rổ sẽ báo lỗi chứ KHÔNG nhận số cũ, vì một RS của 400 ngày trước trông y hệt RS hôm nay.
FINLENS.PEERS=FINLENS.PEERS(symbol, [n], [sortBy])
Các mã cùng ngành: bảng tràn, kèm giá, thay đổi, vốn hoá và thanh khoản.
Ví dụ=FINLENS.PEERS("HPG",10,"market_cap")
Lưu ý. Hàm TỰ NỚI RỘNG NGÀNH khi cần: mặc định là ICB cấp 4, nhưng nếu cấp đó có dưới 5 mã đang giao dịch thì nới lên cấp 3 rồi cấp 2. BVH là ví dụ, nhóm so sánh thực tế của nó là Bảo hiểm cấp 2. Mã đã huỷ niêm yết không lọt vào (danh mục mã không có cột trạng thái, nên bộ lọc là phép nối với bảng giá phiên gần nhất). Ô vốn hoá TRỐNG nghĩa là thiếu số cổ phiếu lưu hành, không phải vốn hoá bằng 0.
FINLENS.MACRO=FINLENS.MACRO(code, [from], [to])
Chuỗi thời gian một chỉ tiêu vĩ mô: bảng tràn, mỗi kỳ một dòng. Lạm phát, lãi suất, tỷ giá, tăng trưởng.
Ví dụ=FINLENS.MACRO("cpi_headline_yoy","2020-01-01")
Lưu ý. KHÔNG CÓ THAM SỐ NGÀY: vĩ mô khoá theo KỲ, không theo phiên giao dịch. Không tồn tại "CPI ngày 20/08": chỉ có giá trị của kỳ 2026-07, công bố muộn hơn kỳ đó. [from]/[to] là bộ LỌC KỲ, nên với chỉ tiêu quý thì to="2026-08-24" vẫn trả kỳ 2026-Q2. ĐỘ TRỄ CÔNG BỐ LỆCH NHAU RẤT XA: lợi suất TPCP trễ 4 ngày, cán cân thanh toán trễ 146 ngày, thu nội địa dừng ở 31/12/2025. Cột period đứng đầu bảng chính là chỗ nói ra điều đó, đừng bỏ nó đi. ĐƠN VỊ ĐỔI THEO TỪNG MÃ và không suy được từ tên: % · Lần · VND/lượng · USD/thùng · Triệu USD · Tỷ VND · VND; tra bằng FINLENS.MACROLIST, cột unit. Vài chuỗi là LUỸ KẾ từ đầu năm (exports_cum, imports_cum, fdi_registered_cum, fdi_realized_cum, retail_growth_cum) và reset về gần 0 mỗi tháng 1. Vẽ thẳng cả cột sẽ ra một vách đứng mỗi năm, đó là mốc năm mới chứ không phải sụt giảm. Ô trống ở cột obs_value nghĩa là không có số cho kỳ đó, không phải 0.
FINLENS.MACROLIST=FINLENS.MACROLIST([keyword], [n])
Danh mục mã vĩ mô gõ được, kèm đơn vị, tần suất, kỳ mới nhất và số ngày trễ: bảng tràn.
Ví dụ=FINLENS.MACROLIST("lai suat")
Lưu ý. CHẠY HÀM NÀY TRƯỚC FINLENS.MACRO. Excel không có danh sách xổ xuống cho tham số hàm tuỳ biến, mà mã vĩ mô là những chuỗi snake_case không đoán ra được (mfg_consumption_yoy, deposit_rate_6_12m). Gõ không dấu được: "lai suat" ra đủ nhóm lãi suất. BẢNG NÀY TRỘN ĐƠN VỊ CÓ CHỦ Ý. Nó là danh mục, không phải bảng số để tính; đơn vị nằm ở cột unit, từng dòng một. ĐỪNG dùng cột latest_value thay FINLENS.MACRO: nó là số của latest_period, mà kỳ đó KHÁC NHAU ở từng dòng (có dòng 20/08/2026, có dòng 31/03/2026) nên cộng hay so sánh cả cột là so các kỳ khác nhau với nhau. days_late chỉ so được giữa các dòng CÙNG tần suất. Một chỉ tiêu năm trễ 200 ngày là bình thường, một chỉ tiêu ngày trễ 20 ngày là hỏng; lọc bằng cột is_stale, nó đã so với ngưỡng của chính tần suất đó.
FINLENS.TRADE=FINLENS.TRADE(product, [country], [from], [to])
Kim ngạch xuất và nhập khẩu theo tháng của một mặt hàng: bảng tràn, hai chiều cùng dòng.
Ví dụ=FINLENS.TRADE("Hàng Thủy sản","","2024-01-01")
Lưu ý. TÊN MẶT HÀNG KHỚP TUYỆT ĐỐI, và nó chứa dấu phẩy: danh mục Hải quan có những tên như "Máy vi tính, sản phẩm điện tử và linh kiện". Không dùng khớp mờ được vì danh mục còn có biến thể "Hàng Thủy sản_DN FDI". Chỉ phần doanh nghiệp FDI. Là một chuỗi KHÁC, khớp mờ sẽ lặng lẽ lấy nhầm tập con rồi trả con số nhỏ hơn thật mà vẫn hợp lý. Gõ tay gần như chắc chắn trượt: dùng bộ chọn ở màn Vĩ mô trên taskpane để chèn đúng tên. ĐƠN VỊ LÀ USD THÔ, không phải triệu hay tỷ USD. Số rất lớn là đúng, đừng nhân chia thêm. Ô trống ở một chiều nghĩa là danh mục KHÔNG CÓ mặt hàng đó ở chiều ấy, không phải kim ngạch bằng 0. Tham số country CHƯA HỖ TRỢ, nó giữ chỗ để chữ ký khỏi phải đổi về sau: chuỗi theo từng nước cần một quy tắc điền kỳ khuyết chưa chốt, vì các nước rơi khỏi top-N ở một số kỳ nên kỳ vắng mặt không có nghĩa kim ngạch bằng 0.
FINLENS.OMO=FINLENS.OMO([from], [to], [field])
Nghiệp vụ thị trường mở của SBV theo phiên: bơm/hút ròng, tồn dư, lãi suất điều hành.
Ví dụ=FINLENS.OMO("2026-01-01")
Lưu ý. DẤU MANG THÔNG TIN: net_pump dương = SBV BƠM tiền ra (nới lỏng), âm = HÚT về (thắt chặt). Lấy trị tuyệt đối rồi cộng là biến một chuỗi bơm-hút xen kẽ thành một tổng doanh số vô nghĩa. net_pump = net_pump_repo + net_pump_bill. Chọn cả ba rồi SUM là ĐẾM HAI LẦN, cùng lớp lỗi với proprietary nằm trong local_institution ở FINLENS.FLOW. bill_outstanding NGỪNG CẬP NHẬT từ 22/07/2025: đo 24/08/2026 nó đứng im 13 tháng trong khi mọi chuỗi khác tươi tới 20/08/2026, nên ô trống ở cột đó là THIẾU SỐ chứ không phải bằng 0. BẢNG TRỘN HAI ĐƠN VỊ nếu chọn cả lãi suất: khối lượng là VND, lãi suất điều hành là %; bộ mặc định cố ý chỉ gồm hai cột VND để =FINLENS.OMO() không bao giờ trả một bảng hai đơn vị mà không báo. Và net_pump là SAI PHÂN của repo_outstanding chứ không phải tín hiệu độc lập. Đo được khớp từng đồng giữa hai phiên liền nhau, nên hồi quy hai cột này với nhau là hồi quy một chuỗi với sai phân của chính nó. Chỉ có dữ liệu theo PHIÊN, không có bản theo tháng.
FINLENS.CW=FINLENS.CW(ticker, [field])
Một thuộc tính của một chứng quyền: cơ sở, giá thực hiện, tỷ lệ, ngày đáo hạn.
Ví dụ=FINLENS.CW("CFPT2618","days_to_maturity")
Lưu ý. exercise_price LÀ GIÁ CỦA CHỨNG KHOÁN CƠ SỞ, tính bằng VND thô (đo CFPT2618: 69.000). KHÔNG phải giá chứng quyền. Muốn quy về một chứng quyền thì chia cho conversion_ratio. TỶ LỆ CHUYỂN ĐỔI LÀ MỘT CẶP: nguồn lưu hai vế, conversion_ratio là THƯƠNG của chúng và có số lẻ thật (7.81, 9.8641); cần hai vế thì tra conversion_cw và conversion_share. CHỨNG QUYỀN HẾT HẠN, và hạn rất gần: một mã đã qua last_trading_date vẫn tra được đủ điều khoản mà không có gì trong con số nói rằng nó đã chết. Đo CFPT2618 ngày 24/08/2026 thì còn đúng 10 ngày. Tra days_to_maturity hoặc status trước khi đưa số vào mô hình. Ngày trả về là chuỗi yyyy-mm-dd; cần ngày thật thì bọc DATEVALUE. Ô trống nghĩa là mã có tồn tại nhưng thiếu đúng trường đó, không phải mã sai. Mã sai thì báo lỗi kèm dạng mã đúng.
FINLENS.MARGIN=FINLENS.MARGIN(symbol, [field])
Một phép tổng hợp tỷ lệ ký quỹ của một mã, trên tập công ty chứng khoán có công bố.
Ví dụ=FINLENS.MARGIN("HPG","max_ratio")
Lưu ý. KHÔNG TỒN TẠI "tỷ lệ ký quỹ của HPG". Nguồn khoá theo (mã, công ty chứng khoán, ngày hiệu lực). Một mã có tới 36 CTCK, mỗi bên một tỷ lệ riêng, công bố vào một ngày riêng. Vì thế field ở đây là tên một PHÉP TỔNG HỢP (median_ratio, max_ratio, broker_count, cut_count…), không phải tên một cột; mặc định là TRUNG VỊ chứ không phải max. TRUNG BÌNH/TRUNG VỊ/MAX/MIN CHỈ TÍNH TRÊN CTCK CÒN CHO VAY: gộp cả bên đã cắt về 0 thì con số bị kéo xuống vô nghĩa. Đo trên dữ liệu thật, "trung bình 17%" của một CTCK thực ra là 283 mã ở khoảng 37% cộng 314 mã bị cắt hẳn; dùng cut_count để thấy phần bị cắt. HAI TẦNG ĐẾM NỚI/SIẾT, đừng gộp: up_count/down_count đếm MỌI thời điểm. 517 trên 651 lần siết đã cũ hơn 180 ngày, lần cũ nhất từ 2017. Chúng nói về TRẠNG THÁI, còn recent_up_count/recent_down_count chỉ trong 90 ngày và đó mới là "đang bị siết". top_broker gần như luôn có đồng hạng: 664/705 mã có từ hai CTCK trở lên cùng chạm mức cao nhất, nên tra kèm top_ratio_broker_count trước khi đọc nó thành "CTCK cho vay tốt nhất". Đây là ký quỹ CỔ PHIẾU, không phải ký quỹ phái sinh. Nguồn cập nhật mỗi thứ Hai.
FINLENS.FUND=FINLENS.FUND(fund, [field], [date])
Một thuộc tính của một quỹ đầu tư: NAV, tổng AUM, loại quỹ, công ty quản lý.
Ví dụ=FINLENS.FUND("VEIL","nav_per_share")
Lưu ý. MÃ QUỸ KHÔNG DUY NHẤT: "VVDIF" thuộc hai tổ chức (đo 24/08/2026). Hàm báo lỗi kèm SỐ THỨ TỰ và bạn gọi lại bằng số đó: =FINLENS.FUND("VVDIF#2","nav_per_share"). Số thứ tự bám mã nội bộ nên không đổi giữa các lần gọi; tên đầy đủ cũng dùng được vì hai quỹ này mang tên khác nhau, nhưng số thứ tự thì luôn phân biệt được kể cả khi nguồn đặt trùng tên. Tham số này nhận mã quỹ HOẶC tên quỹ; nó KHÔNG nhận organization_id, vì backend web app phát id đã hoán vị và dán nhầm giữa hai nơi sẽ ra một quỹ KHÁC chứ không ra lỗi. MÃ QUỸ KHÔNG PHẢI MÃ CHỨNG KHOÁN: 53/188 mã chứa ký tự ngoài A-Z0-9 ("A+ Fund", "Tianhong VN", "Xtrackers Vietnam Swap UCITS ETF"), mã phân biệt hoa thường, và nhiều mã mang tiền tố công ty quản lý: quỹ VESAF của VinaCapital có mã là "VINACAPITAL-VESAF" chứ không phải "VESAF". Chỉ 25/188 mã trùng một mã cổ phiếu, nên FINLENS.SEARCH không tìm ra quỹ; đoán mã gần như luôn trượt, hãy mở panel Quỹ & chứng quyền để chọn từ danh mục. Tham số ngày CHỈ dùng được với BẢY trường theo ngày (nav_per_share, nav_per_share_adjusted, total_nav, share_outstanding, foreign_volume, foreign_ratio, nav_date); trường hồ sơ là ảnh chụp và sẽ TỪ CHỐI ngày. Trả số hiện tại cho một ngày quá khứ thì cả cột kéo theo thời gian là một giá trị lặp lại, trông như quỹ đứng yên chứ không trông như lỗi. HỎI MỘT NGÀY KHÔNG CÓ CÔNG BỐ THÌ HÀM LÙI VỀ PHIÊN GẦN NHẤT TRƯỚC ĐÓ, VÀ Ô KHÔNG NÓI RA ĐIỀU ĐÓ: quỹ công bố NAV theo nhịp riêng (đo được: ngày 127 quỹ, tuần 19, tháng 4, quý 5, không rõ 33), nên kéo công thức xuống 250 ngày cho một quỹ nhịp quý cho ra 250 ô hợp lệ mà chỉ 4 là quan sát thật. Tra kèm nav_date ở ô bên cạnh để thấy ngày thật của con số. Hàm trả một ô nên không có chỗ chở cảnh báo. Lùi quá 400 ngày thì hàm báo lỗi thay vì trả số. nav_date và register_date là CHUỖI yyyy-mm-dd; cần ngày thật thì bọc DATEVALUE. foreign_ratio là THANG 0-1 chứ không phải phần trăm. Nguồn đặt tên cột là percentage nhưng dải đo được là 0 đến 1,128. Tiền là VND THÔ, không phải nghìn đồng.
FINLENS.BOND=FINLENS.BOND(code, [field])
Một thuộc tính của một lô trái phiếu doanh nghiệp: lãi suất, dư nợ, ngày đáo hạn.
Ví dụ=FINLENS.BOND("BCMBOND2025","coupon_rate_pct")
Lưu ý. MÃ TRÁI PHIẾU PHÂN BIỆT HOA THƯỜNG và chứa được dấu chấm, gạch chéo, gạch dưới. 54 mã lưu bằng chữ thường và 2.479 mã có ký tự lạ. Đừng tự ép hoa; mở panel Trái phiếu để chọn từ danh mục. KHỐI LƯỢNG LÀ SỐ TRÁI PHIẾU, KHÔNG PHẢI TIỀN: outstanding_volume là số lô trái phiếu, còn tiền là outstanding_value = khối lượng × par_value. Nhầm hai cái không lệch 1.000 lần như đơn vị cổ phiếu mà lệch đúng bằng mệnh giá, thường 100.000 hoặc 1.000.000. term và remaining_term là CHUỖI ("3 Năm") nên không tính toán được: cần số thì dùng days_to_maturity, và nó đo từ MỐC ẢNH CHỤP dữ liệu chứ không phải từ hôm nay. Bốn trường đúng/sai (convertible, secured, with_warrant, green) trả Ô TRỐNG khi nguồn không khai, khác hẳn FALSE, đừng đếm ô trống thành "không". coupon_rate_pct là thang 0-100 với dải đo được lên tới 800, không phải 0-1. Ngày trả về là CHUỖI yyyy-mm-dd; cần ngày thật thì bọc DATEVALUE.
FINLENS.BONDLIST=FINLENS.BONDLIST([issuer], [sector], [status], [currency], [maturityFrom], [maturityTo], [n])
Bảng lọc trái phiếu doanh nghiệp theo tổ chức phát hành, ngành, hạn và đồng tiền.
Ví dụ=FINLENS.BONDLIST(,"real_estate",,,"2026-01-01","2026-12-31")
Lưu ý. MẶC ĐỊNH CHỈ LẤY LÔ CÒN LƯU HÀNH vì 70% lô trong nguồn đã hết lưu hành (4.796/6.835): đặt status="all" thì đa số dòng nói về quá khứ, và cột bond_status là chỗ duy nhất nhìn ra điều đó. currency CHỈ NHẬN MỘT ĐỒNG TIỀN, mặc định VND: có 23 lô mệnh giá USD, và một cột tiền trộn hai đồng tiền thì mọi phép SUM trên nó là một con số vô nghĩa. Hai đồng tiền là hai lượt gọi, không có tổng chung. BA CỘT par_value, outstanding_volume, outstanding_value ĐỨNG LIỀN NHAU có chủ ý: cột giữa là SỐ TRÁI PHIẾU, SUM nó KHÔNG ra dư nợ. Khớp quá n dòng thì hàm BÁO LỖI thay vì cắt bớt, vì một bảng bị cắt trông y hệt bảng đủ rồi bạn sẽ SUM nó. Ngành theo phân loại RIÊNG của nguồn trái phiếu, KHÔNG phải ngành ICB của cổ phiếu. BỘ 14 CỘT ĐÓNG BĂNG: đừng dựa vào việc nó sẽ rộng thêm.
FINLENS.BONDMATURITY=FINLENS.BONDMATURITY(issuer, [freq], [currency], [maturityFrom], [maturityTo])
Lịch đáo hạn của một tổ chức phát hành, gộp theo tháng, quý hoặc năm.
Ví dụ=FINLENS.BONDMATURITY("VHM","quarter")
Lưu ý. CHỈ TÍNH LÔ CÒN DƯ NỢ. Lô đã trả hết không nằm trong kỳ nào, kể cả khi ngày đáo hạn của nó rơi vào kỳ đó. TỔNG CÁC KỲ CÓ THỂ NHỎ HƠN DƯ NỢ CỦA TỔ CHỨC: lô thiếu ngày đáo hạn bị loại vì nó không thuộc kỳ nào, và chênh lệch đúng bằng phần đó. period_end là CUỐI KỲ THEO LỊCH, mốc để vẽ chart. KHÔNG phải ngày đáo hạn thật của lô nào; ngày thật nằm ở FINLENS.BONDLIST. Kỳ trong QUÁ KHỨ vẫn hiện ra nếu còn lô quá hạn chưa trả, đó là thông tin chứ không phải rác. issuer là MÃ TỔ CHỨC PHÁT HÀNH của họ trái phiếu, KHÔNG phải mã cổ phiếu. Hai không gian định danh khác nhau; mở panel Trái phiếu để chọn. freq dùng TỪ ĐẦY ĐỦ month/quarter/year, không dùng M/Q/Y.
FINLENS.WATCHLIST=FINLENS.WATCHLIST([name])
Danh mục theo dõi đã lưu trên finlens.vn: bảng tràn.
Ví dụ=FINLENS.WATCHLIST("Danh mục chính")
Lưu ý. Dựng danh mục bằng giao diện trên web, dùng nó trong Excel bằng một công thức: ghép với FINLENS.QUOTE là có bảng giá sống của đúng danh mục đó. Bỏ trống tên thì hàm liệt kê TÊN các danh mục của bạn, không đoán danh mục mặc định (bảng danh mục không có cột nào đánh dấu mặc định). Tên không phân biệt hoa thường, vì web app tự viết hoa đầu mỗi từ khi lưu. Hai danh mục trùng tên thì hàm báo lỗi thay vì chọn bừa: chọn bừa nghĩa là cùng một công thức, hai lần tính lại, hai danh sách mã khác nhau.
FINLENS.FIELDS=FINLENS.FIELDS([target])
Liệt kê mọi trường dùng được cho tham số fields, kèm mô tả. Không tốn hạn mức.
Ví dụ=FINLENS.FIELDS("QUOTE")
Lưu ý. Excel KHÔNG có danh sách xổ xuống cho tham số của hàm tuỳ biến, nên đây là cách tra nhanh nhất mà không rời bảng tính. HISTORY và QUOTE nhận bộ trường KHÁC nhau: date chỉ có ở HISTORY, còn change/pct_change chỉ có ở QUOTE vì chúng cần phiên liền trước. Bỏ trống target để xem tất cả.
FINLENS.UNIT=FINLENS.UNIT(symbol, [aspect])
Đơn vị thật của dữ liệu một mã: price | volume | value | basis.
Ví dụ=FINLENS.UNIT("HPG")
Lưu ý. Phép suy "cổ phiếu thì nghìn đồng" SAI với chứng quyền, chỉ số và phái sinh. Đây là cách tự kiểm rẻ nhất trước khi đưa số vào mô hình. Dùng aspect = "basis" để biết chuỗi đang là giá điều chỉnh hay giá thô.