Trong chương này, chúng ta xem xét cách thiết kế thể chế của thị trường cổ phiếu Việt Nam, chẳng hạn như các phiên giao dịch, biên độ giá, các loại lệnh và cơ cấu nhà đầu tư, định hình giá, lợi nhuận và thanh khoản quan sát được. Chúng ta định lượng các ma sát vi cấu trúc và chỉ ra vì sao việc bỏ qua các ma sát này dẫn đến suy luận bị chệch trong các kiểm định định giá tài sản.
Vi cấu trúc thị trường là lĩnh vực nghiên cứu cách các quy tắc giao dịch, cơ chế xử lý lệnh và thiết kế thị trường ảnh hưởng đến quá trình hình thành giá, chi phí giao dịch và thanh khoản. Lĩnh vực này, được đặt nền móng bởi Kyle (1985), Glosten và Milgrom (1985) và Hasbrouck (2007), cung cấp bộ công cụ phân tích để hiểu vì sao giá quan sát được có thể lệch khỏi giá trị cơ bản và lệch trong bao lâu.
Ở các thị trường phát triển với giao dịch điện tử liên tục, nhà tạo lập thị trường chỉ định và rất ít ràng buộc pháp lý đối với biến động giá, các ma sát vi cấu trúc thường chỉ là mối quan tâm bậc hai đối với các nhà nghiên cứu làm việc ở tần suất tháng hoặc thấp hơn. Ở thị trường cổ phiếu Việt Nam, điều này hoàn toàn không đúng. Biên độ giá hằng ngày, giao dịch thưa thớt, cơ sở nhà đầu tư chủ yếu là cá nhân, bước giá rời rạc và việc thiếu các cơ chế tạo lập thị trường chính thức tạo ra những ma sát lan truyền vào lợi nhuận hằng tháng, làm méo hệ số tải nhân tố và làm chệch suy luận ở cấp danh mục đầu tư. Vì vậy, mọi phân tích thực nghiệm nghiêm túc về cổ phiếu Việt Nam phải bắt đầu bằng việc đánh giá cẩn thận vi cấu trúc thị trường.
Chương này thực hiện việc đánh giá đó. Trước tiên, chúng ta mô tả kiến trúc thể chế của giao dịch cổ phiếu Việt Nam. Sau đó, chúng ta xây dựng các chẩn đoán cho những ma sát có tác động lớn nhất, chẳng hạn như việc chạm biên độ giá, ngày có lợi nhuận bằng không, phi thanh khoản và giao dịch không đồng bộ, và định lượng mức độ nghiêm trọng của chúng theo mặt cắt ngang các doanh nghiệp niêm yết. Cuối cùng, chúng ta rút ra hướng dẫn thực tiễn để điều chỉnh việc xây dựng danh mục đầu tư và các kiểm định định giá tài sản.
4.1 Vi cấu trúc thị trường là gì?
Giả định trong sách giáo khoa về thị trường không ma sát hàm ý rằng giá phản ánh thông tin một cách liên tục và không tốn chi phí. Theo giả định này, lợi nhuận quan sát được của bất kỳ tài sản nào ở bất kỳ tần suất nào đều bằng lợi nhuận “thực” do các yếu tố cơ bản quyết định. Vi cấu trúc thị trường nới lỏng giả định này bằng cách thừa nhận rằng giá được tạo ra bởi một quá trình giao dịch cụ thể với các chi phí, ràng buộc và điểm không hoàn hảo có thật.
Khung phân tích kinh điển của Kyle (1985) mô hình hóa một thị trường với ba loại người tham gia:
một nhà giao dịch có thông tin biết giá trị cơ bản của tài sản,
các nhà giao dịch nhiễu giao dịch vì lý do thanh khoản, và
một nhà tạo lập thị trường đặt giá sao cho hòa vốn theo kỳ vọng.
Điểm mấu chốt là nhà tạo lập thị trường không thể phân biệt dòng lệnh có thông tin với dòng lệnh không có thông tin, do đó giá điều chỉnh dần dần theo thông tin, tạo ra một khoảng chênh giữa giá giao dịch và giá trị cơ bản. Độ lớn của khoảng chênh này (chênh lệch giá mua–bán) và tốc độ điều chỉnh giá (độ sâu thị trường) là các đối tượng cốt lõi của lý thuyết vi cấu trúc.
Glosten và Milgrom (1985) mở rộng khung phân tích này sang bối cảnh giao dịch tuần tự và chỉ ra rằng chênh lệch giá mua–bán gồm hai thành phần: thành phần lựa chọn bất lợi (khoản bù đắp cho việc giao dịch với các nhà giao dịch có thông tin) và thành phần xử lý lệnh (khoản bù đắp cho các chi phí cơ học của giao dịch). Huang và Stoll (1997) tiếp tục phân tách chênh lệch giá thành các thành phần chênh lệch thực hiện và tác động giá. Những phân tách này quan trọng vì chúng cho thấy các nguồn chi phí giao dịch khác nhau và có hàm ý khác nhau đối với chất lượng thị trường.
Đối với định giá tài sản thực nghiệm, câu hỏi then chốt là: ở tần suất nào và trong điều kiện nào thì các tác động vi cấu trúc trở nên không đáng kể? Ở các thị trường có thanh khoản cao, Bali, Engle, và Murray (2016) lập luận rằng lợi nhuận hằng tháng phần lớn không bị nhiễm tác động vi cấu trúc. Ở Việt Nam, như chúng ta sẽ chứng minh dưới đây, điều này không đúng. Các tác động vi cấu trúc vẫn tồn tại ở tần suất tháng và thậm chí quý đối với một tỷ lệ đáng kể các doanh nghiệp niêm yết.
4.1.1 Mối liên hệ giữa vi cấu trúc và định giá tài sản
Mối liên hệ giữa vi cấu trúc và định giá tài sản thể hiện qua nhiều kênh. Thứ nhất, bản thân phi thanh khoản có thể là một nhân tố rủi ro được định giá. Amihud (2002) chỉ ra rằng phi thanh khoản kỳ vọng có quan hệ cùng chiều với lợi nhuận cổ phiếu kỳ vọng, hàm ý một phần bù thanh khoản. Pástor và Stambaugh (2003) xây dựng một mô hình cân bằng trong đó rủi ro thanh khoản (tức là hiệp phương sai giữa thanh khoản của một cổ phiếu với thanh khoản thị trường) đòi hỏi một phần bù rủi ro. Thứ hai, nhiễu vi cấu trúc trong giá làm chệch các beta, hệ số tải nhân tố và thống kê kiểm định được ước lượng. Scholes và Williams (1977) là những người đầu tiên nhận diện sai lệch này trong bối cảnh giao dịch không đồng bộ, và Dimson (1979) đề xuất bộ ước lượng hệ số tổng hợp để hiệu chỉnh. Thứ ba, biên độ giá và các ràng buộc quản lý khác kiểm duyệt phân phối lợi nhuận, gây ra thiên lệch cắt cụt trong các ước lượng biến động, các moment của lợi nhuận và các thống kê giá trị cực trị (Kim và Rhee 1997).
Bảng 4.1 tóm tắt các kênh này và hệ quả thực nghiệm của chúng.
Bảng 4.1: Các kênh mà vi cấu trúc tác động đến định giá tài sản
Kênh
Cơ chế
Hệ quả thực nghiệm
Phần bù phi thanh khoản
Bù đắp cho việc gánh chịu chi phí giao dịch và rủi ro tồn kho
Khả năng dự báo lợi nhuận theo mặt cắt ngang bằng các thước đo thanh khoản
Giao dịch không đồng bộ
Giao dịch không thường xuyên tạo ra giá lỗi thời
Beta bị chệch xuống, tương quan bị suy giảm và quan hệ dẫn–trễ giả tạo
Biên độ giá
Quy định kiểm duyệt lợi nhuận hằng ngày
Phân phối lợi nhuận bị cắt cụt, lan truyền biến động và tự tương quan nhân tạo
Bước giá rời rạc
Giá bị ràng buộc vào một lưới
Nảy giá mua–bán, tính rời rạc của lợi nhuận, biến động bị chệch
Cơ cấu nhà đầu tư
Dòng lệnh do nhà đầu tư cá nhân chi phối
Giao dịch nhiễu, hành vi bầy đàn, định giá theo tâm lý
4.2 Kiến trúc giao dịch tại Việt Nam
Việt Nam vận hành hai sở giao dịch chứng khoán: Sở Giao dịch Chứng khoán TP. Hồ Chí Minh (HOSE), thành lập năm 2000, và Sở Giao dịch Chứng khoán Hà Nội (HNX), thành lập năm 2005. HOSE niêm yết các doanh nghiệp lớn hơn và chiếm phần lớn vốn hóa thị trường và khối lượng giao dịch. HNX niêm yết các doanh nghiệp nhỏ hơn và cũng vận hành Thị trường Giao dịch Cổ phiếu của Công ty đại chúng chưa niêm yết (UPCoM) dành cho các doanh nghiệp chưa đáp ứng đầy đủ điều kiện niêm yết. Cả ba sàn đều vận hành hệ thống sổ lệnh giới hạn điện tử không có nhà tạo lập thị trường chỉ định.
4.2.1 Đặc điểm của các sàn giao dịch
Bảng 4.2 trình bày những khác biệt cấu trúc chính giữa HOSE, HNX và UPCoM. Những khác biệt này có hàm ý trực tiếp đối với thanh khoản, khám phá giá và mức độ nghiêm trọng của các ma sát vi cấu trúc.
Bảng 4.2: So sánh các sàn giao dịch: HOSE, HNX và UPCoM
Đặc điểm
HOSE
HNX
UPCoM
Năm thành lập
2000
2005
2009
Nhóm niêm yết
Vốn hóa lớn
Vốn hóa vừa/nhỏ
Chưa niêm yết
Biên độ giá hằng ngày
\(\pm\) 7%
\(\pm\) 10%
\(\pm\) 15%
Chế độ bước giá
Phân tầng theo giá
Phân tầng theo giá
100 VND
Lô giao dịch
100 cổ phiếu
100 cổ phiếu
100 cổ phiếu
Bán khống
Hạn chế
Không có
Không có
Giới hạn sở hữu nước ngoài
Theo ngành
Theo ngành
Theo ngành
Các biên độ giá không đồng nhất giữa các sàn tạo ra một thí nghiệm tự nhiên để nghiên cứu tác động của biên độ giá. Biên độ \(\pm\) 7% chặt hơn của HOSE có nghĩa là cổ phiếu vốn hóa lớn bị ràng buộc thường xuyên hơn cổ phiếu vốn hóa vừa trên HNX, với cùng một cú sốc thông tin. Biên độ \(\pm\) 15% rộng hơn của UPCoM tạo ra môi trường ít ràng buộc nhất, mặc dù cổ phiếu trên sàn này cũng kém thanh khoản nhất.
4.2.2 Các phiên giao dịch
Mỗi sàn vận hành một ngày giao dịch có cấu trúc với các phiên riêng biệt. Việc hiểu cấu trúc phiên là thiết yếu vì cơ chế hình thành giá khác nhau giữa các phiên, và một số phiên đặc biệt quan trọng đối với giá tham chiếu (Bảng 4.3).
Bảng 4.3: Cấu trúc phiên giao dịch trên HOSE
Phiên
Thời gian
Cơ chế
Vai trò khám phá giá
Trước giờ mở cửa
08:30–09:00
Chỉ nhập lệnh, không khớp
Cho thấy cầu/cung trước giờ mở cửa
Phiên mở cửa (ATO)
09:00–09:15
Khớp lệnh định kỳ, một mức giá
Xác định giá mở cửa từ các lệnh tích lũy
Khớp lệnh liên tục (buổi sáng)
09:15–11:30
Khớp lệnh giới hạn liên tục
Khám phá giá chính
Nghỉ trưa
11:30–13:00
Không giao dịch
—
Khớp lệnh liên tục (buổi chiều)
13:00–14:30
Khớp lệnh giới hạn liên tục
Khám phá giá chính
Phiên đóng cửa (ATC)
14:30–14:45
Khớp lệnh định kỳ, một mức giá
Xác định giá đóng cửa (giá tham chiếu)
Sau giờ đóng cửa
14:45–15:00
Giao dịch thỏa thuận
Giao dịch khối lượng lớn và giao dịch thỏa thuận
Phiên đóng cửa (ATC) đáng được chú ý đặc biệt. Giá ATC là giá đóng cửa chính thức dùng để tính chỉ số, tính giá trị tài sản ròng (NAV) và xác định yêu cầu ký quỹ. Vì được xác định bằng một phiên khớp lệnh định kỳ với một mức giá duy nhất, giá này có thể bị thao túng bởi các lệnh được đặt đúng thời điểm một cách có chủ đích, một hiện tượng đã được ghi nhận ở nhiều thị trường mới nổi (Comerton-Forde và Tang 2009; Hillion và Suominen 2004). Các nhà nghiên cứu sử dụng giá đóng cửa hằng ngày cần lưu ý rằng giá ATC có thể không phản ánh trạng thái cân bằng của phiên khớp lệnh liên tục, đặc biệt đối với các cổ phiếu kém thanh khoản mà một lệnh lớn duy nhất có thể làm dịch chuyển giá đóng cửa.
4.2.3 Các loại lệnh và quy tắc khớp lệnh
Các sàn giao dịch Việt Nam hỗ trợ một tập hợp loại lệnh hạn chế so với các thị trường phát triển (Bảng 4.4).
Bảng 4.4: Các loại lệnh hiện có
Loại lệnh
Mô tả
Khả năng áp dụng
Lệnh giới hạn (LO)
Chỉ định giá và khối lượng
Mọi phiên
Lệnh thị trường (ATO/ATC)
Khớp tại giá của phiên khớp lệnh định kỳ
Chỉ các phiên khớp lệnh định kỳ
Lệnh thị trường giới hạn (MTL)
Chuyển thành lệnh giới hạn tại giá tốt nhất hiện có
Chỉ trên HNX
Việc không có lệnh tảng băng chìm (iceberg), lệnh dừng và lệnh ẩn có nghĩa là toàn bộ sổ lệnh giới hạn hiển thị với mọi người tham gia. Dù điều này làm tăng tính minh bạch trước giao dịch, nó cũng có nghĩa là các lệnh lớn của nhà đầu tư tổ chức đối mặt với rủi ro rò rỉ thông tin đáng kể, có thể làm nản lòng sự tham gia của các tổ chức và làm giảm độ sâu thị trường.
Các lệnh được khớp theo nguyên tắc ưu tiên nghiêm ngặt về giá–thời gian trong các phiên liên tục. Trong các phiên khớp lệnh định kỳ, một giá cân bằng duy nhất được xác định sao cho tối đa hóa khối lượng khớp. Nếu có nhiều mức giá thỏa mãn tiêu chí này, mức giá gần nhất với giá đóng cửa trước đó được chọn.
4.2.4 Cấu trúc bước giá
Bước giá trên HOSE được phân tầng theo mức giá, điều này tạo ra những gián đoạn trong chênh lệch giá mua–bán tính theo phần trăm của giá (Bảng 4.5).
Bảng 4.5: Biểu bước giá trên HOSE
Khoảng giá (VND)
Bước giá (VND)
Chênh lệch tối thiểu theo % của giá trung điểm
< 10,000
10
0.10% tại 10,000
10,000–49,900
50
0.10% tại 50,000
≥ 50,000
100
0.20% tại 50,000
Việc nhảy từ bước giá 50 VND lên bước giá 100 VND tại ngưỡng 50,000 VND có nghĩa là chênh lệch phần trăm tối thiểu tăng gấp đôi một cách gián đoạn. Điều này tạo ra một “vách đá bước giá” có thể ảnh hưởng đến phân phối theo mặt cắt ngang của chênh lệch giá mua–bán và do đó ảnh hưởng đến việc đo lường phi thanh khoản (Vo và Doan 2023). Bessembinder (2003) ghi nhận các tác động tương tự ở những thị trường khác có cấu trúc bước giá phân tầng.
4.2.5 Cơ cấu nhà đầu tư
Thị trường cổ phiếu Việt Nam chủ yếu do nhà đầu tư cá nhân chi phối. Trong khi các nhà đầu tư tổ chức nước ngoài chiếm một tỷ trọng đáng kể trong vốn hóa thị trường (đặc biệt ở các cổ phiếu blue-chip chịu giới hạn sở hữu nước ngoài), khối lượng giao dịch hằng ngày lại chủ yếu đến từ các tài khoản cá nhân trong nước.
Sự chi phối của nhà đầu tư cá nhân này kéo theo nhiều hệ quả đối với vi cấu trúc. Thứ nhất, nhà đầu tư cá nhân có xu hướng đặt lệnh nhỏ hơn và giao dịch thường xuyên hơn, tạo ra tỷ lệ thông điệp trên giao dịch cao nhưng độ sâu hạn chế tại mỗi mức giá. Thứ hai, dòng lệnh của nhà đầu tư cá nhân dễ bị ảnh hưởng bởi hành vi bầy đàn và tâm lý hơn, điều có thể khuếch đại động lượng và tạo ra biến động quá mức (Barber và c.s. 2009; Kaniel và c.s. 2012). Thứ ba, sự hiện diện hạn chế của các tổ chức có nghĩa là việc cung cấp thanh khoản chuyên nghiệp khan hiếm, đặc biệt ở các cổ phiếu vốn hóa vừa và nhỏ.
4.3 Giá nào được chọn: sở thích chữ số và mê tín
Biểu bước giá trong Bảng 4.5 xác định những mức giá nào là có thể. Nó không xác định mức giá nào trong số đó được chọn. Nếu các nhà giao dịch bàng quan giữa các điểm lưới liền kề, chữ số cuối của giá giao dịch sẽ xấp xỉ phân phối đều mỗi khi giá trải qua nhiều bước giá, do đó mọi độ lệch có hệ thống khỏi phân phối đều là bằng chứng về cách giá được đặt ra. Đây là một chẩn đoán cổ điển trong vi cấu trúc. Harris (1991) ghi nhận rằng giá cổ phiếu tụ lại ở các phân số tròn, nhiều hơn ở các cổ phiếu giá cao và biến động mạnh hơn, và diễn giải hiện tượng tụ giá là việc các nhà giao dịch tiết kiệm chi phí thương lượng bằng cách dùng một lưới hiệu dụng thô hơn mức sàn giao dịch yêu cầu. Christie và Schultz (1994) dùng cùng đối tượng đó cho một mục đích sắc bén hơn: việc các nhà tạo lập thị trường NASDAQ gần như hoàn toàn tránh các mức chào giá lẻ một phần tám ở các cổ phiếu giao dịch sôi động không thể được giải thích bằng chi phí thương lượng mà chỉ ra sự thông đồng ngầm nhằm nới rộng chênh lệch giá. Trong cả hai trường hợp, phân phối của chữ số cuối là dấu vết của quá trình hình thành giá, có thể khôi phục chỉ từ một chuỗi giá.
Văn hóa cung cấp một lý do cho sở thích chữ số mà không liên quan gì đến thương lượng hay thông đồng. Trong tiếng Trung, số 8 là may mắn vì cách phát âm gợi đến sự thịnh vượng, còn số 4 là xui xẻo vì nghe giống từ chỉ cái chết. Hirshleifer, Jian, và Zhang (2018) chỉ ra rằng các công ty Trung Quốc phát hành lần đầu ra công chúng (IPO) nhận được mã niêm yết may mắn thường xuyên hơn mức ngẫu nhiên cho phép, giao dịch với một mức giá cao hơn (có phần bù) và sau đó có kết quả kém hơn. Bhattacharya và c.s. (2018) thấy rằng trên thị trường hợp đồng tương lai chỉ số của Đài Loan, các nhà đầu tư cá nhân đặt lệnh giới hạn tại mức giá tận cùng bằng 8 nhiều hơn một cách không cân xứng so với mức tận cùng bằng 4, trong khi các tổ chức thì không, và những nhà giao dịch mê tín bị thua lỗ. Cả hai bài báo đều xác định sự mê tín nằm ở những người tham gia là nhà đầu tư cá nhân trong một thị trường duy nhất.
4.3.1 Mê tín ở khắp nơi
Chang và Du (2026) đặt ra hai câu hỏi rộng hơn: liệu cùng một sở thích chữ số có xuất hiện trong giá của mọi lớp tài sản chính của Trung Quốc, kể cả những lớp được giao dịch gần như hoàn toàn bởi các tổ chức hay không, và liệu sự hiện diện của nó có hàm ý định giá sai hay không. Cách đo lường của các tác giả theo quy ước đọc của người Trung Quốc, theo đó chữ số khác không cuối cùng của một mức giá niêm yết là chữ số được tính. Mức giá 20.58 tận cùng bằng 8; mức giá 20.50 được đọc là 20.5 và tận cùng bằng 5. Do đó, thống kê cốt lõi là một xác suất có điều kiện,
\[
H_d = \Pr\left(\text{hundredths digit} = d \;\middle|\; \text{hundredths digit} \neq 0\right), \qquad d = 1, \dots, 9,
\tag{4.1}\]
bằng \(1/9 \approx 11.1\%\) với mọi \(d\) khi chữ số cuối được quyết định ngẫu nhiên. Phép kiểm định xem xét liệu \(H_8\) có nằm trên \(1/9\) và \(H_4\) có nằm dưới mức này hay không. Các công cụ được niêm yết với nhiều chữ số thập phân hơn được xử lý theo cùng cách tại vị trí cuối cùng của chúng: chữ số thập phân thứ tư đối với tỷ giá hối đoái, đơn vị số nguyên đối với hợp đồng tương lai hàng hóa. Các hợp đồng hàng hóa có bước giá tối thiểu không cho phép xuất hiện đủ mười chữ số cuối sẽ bị loại bỏ thay vì được hiệu chỉnh, vì trên một lưới có bước 5, chữ số cuối chỉ có thể là 0 hoặc 5.
Hiệu ứng này hóa ra phổ biến rộng khắp. Các độ lớn dưới đây lấy từ phiên bản bài thảo luận (working paper) của các tác giả và có thể khác đôi chút so với bài báo đã xuất bản.
IPO. Từ năm 1995 đến tháng 6 năm 2014, khi giá IPO được đặt ra với sự tham gia đáng kể của thị trường, \(H_8 = 33.2\%\) và \(H_4 = 4.6\%\). Sở thích này mạnh đến mức xuất hiện ngay cả ở vị trí phần mười trong số các mức giá IPO tận cùng ở đó (\(23.0\%\) so với \(6.2\%\)). Nó biến mất ngay khi trần P/E mang tính ràng buộc theo quy định có hiệu lực vào tháng 7 năm 2014 và thị trường không còn đặt giá: trong giai đoạn kiểm soát chặt, cả \(H_8\) lẫn \(H_4\) đều không khác \(1/9\) một cách có ý nghĩa thống kê.
Phát hành bổ sung. Các đợt phát hành riêng lẻ, được đàm phán với tối đa mười nhà đầu tư, cho thấy hiệu ứng nhỏ hơn nhưng bền vững (\(13.9\%\) so với \(8.2\%\)).
Giá cổ phiếu trên thị trường thứ cấp. Giá mở cửa, được xác định bằng khớp lệnh định kỳ, cho thấy \(H_8 = 13.6\%\) và \(H_4 = 8.6\%\), còn giá đóng cửa xác định bằng khớp lệnh định kỳ cho thấy \(12.4\%\) so với \(9.9\%\). Giá đóng cửa được tính bằng bình quân gia quyền theo khối lượng của các giao dịch trong phút cuối cùng, quy tắc áp dụng trước khi mỗi sàn đưa vào phiên khớp lệnh đóng cửa, không cho thấy hiệu ứng (\(11.5\%\) so với \(10.9\%\)), và khoảng cách giữa \(H_8\) và \(H_4\) mở ra ngay sau khi mỗi sàn chuyển đổi cơ chế.
Trái phiếu. Lãi suất coupon phát hành không cho thấy hiệu ứng đối với trái phiếu kho bạc, trái phiếu ngân hàng chính sách hay trái phiếu chính quyền địa phương, nhưng có hiệu ứng mạnh đối với các trái phiếu mang rủi ro tín dụng. Hiệu ứng tăng dần từ trái phiếu tài chính (\(17.6\%\) so với \(7.1\%\)) đến trái phiếu doanh nghiệp phi tài chính phát hành công khai (\(20.3\%\) so với \(7.4\%\)) rồi đến trái phiếu doanh nghiệp phi tài chính phát hành riêng lẻ (\(24.2\%\) so với \(5.2\%\)), và trong mỗi nhóm, hiệu ứng mạnh lên khi xếp hạng giảm, đạt \(30.6\%\) so với \(3.5\%\) đối với trái phiếu phát hành riêng lẻ xếp hạng dưới AAA. Hiệu ứng mạnh hơn ở trái phiếu phát hành trên thị trường giao dịch tập trung so với thị trường liên ngân hàng chỉ dành cho tổ chức, nhưng có mặt ở cả hai.
Tỷ giá hối đoái và hàng hóa. Tỷ giá đóng cửa liên ngân hàng của đô la Mỹ, euro, yên và đô la Hồng Kông so với nhân dân tệ đều cho thấy hiệu ứng. Tỷ giá mở cửa, vốn được neo theo tỷ giá trung tâm do ngân hàng trung ương công bố, thì không. Giá mở cửa gộp của 29 hợp đồng tương lai hàng hóa cho thấy \(13.7\%\) so với \(8.7\%\).
Thiết kế nghiên cứu này thuyết phục không phải vì một con số đơn lẻ nào mà vì các phép thử giả (placebo) được xây dựng sẵn trong đó. Ở đâu giá được đặt một cách cơ học, bằng công thức của cơ quan quản lý, tỷ giá trung tâm hoặc một số trung bình cộng, thì hiệu ứng biến mất. Ở đâu giá được đặt bằng cách tổng hợp các mức giá mà mọi người đệ trình, thì hiệu ứng xuất hiện. Một sở thích văn hóa không thể tồn tại qua phép lấy trung bình, và cũng không thể vận hành ở nơi không ai chọn giá.
4.3.2 Vì sao nhà đầu tư sành sỏi cũng làm vậy
Sự hiện diện của hiệu ứng trên thị trường trái phiếu liên ngân hàng, một thị trường bán buôn của các ngân hàng và tổ chức lớn, là phát hiện đáng ngạc nhiên nhất của bài báo. Nó buộc phải phân biệt hai cơ chế.
Cơ chế thứ nhất là neo giá trong điều kiện mơ hồ. Không mô hình định giá nào xác định giá chính xác đến từng bước giá cuối cùng. Nếu phân tích cẩn thận chỉ có thể thu hẹp lợi suất của một trái phiếu vào khoảng giữa 5.52% và 5.62%, thì mọi điểm trong khoảng đó đều có thể bào chữa được, và một điểm hội tụ được chia sẻ về mặt văn hóa như 5.58% giúp người mua và người bán dễ chốt giao dịch hơn. Đây là hành vi dùng điểm tham chiếu của Tversky và Kahneman (1974) được áp dụng cho một khoảng mà các yếu tố cơ bản để ngỏ. Cơ chế này dự báo hiệu ứng mạnh hơn ở nơi giá trị mơ hồ hơn (trái phiếu có rủi ro tín dụng thay vì trái phiếu chính phủ, IPO thay vì các đợt phát hành bổ sung, xếp hạng thấp thay vì cao), đúng như quy luật nêu trên. Trên thị trường cổ phiếu thứ cấp, các tác giả kiểm định trực tiếp dự báo này. Sử dụng thước đo mơ hồ của Brenner và Izhakian (2018), được xây dựng từ biến thiên theo từng tháng trong phân phối lợi nhuận hằng ngày ước lượng của một cổ phiếu, các tác giả thấy rằng trong dữ liệu bảng doanh nghiệp–năm với hiệu ứng cố định theo doanh nghiệp và theo năm, mức mơ hồ cao hơn dự báo nhiều giá khớp lệnh định kỳ may mắn hơn và ít giá xui xẻo hơn, khi giữ biến động lợi nhuận không đổi. Chính sự mơ hồ, chứ không phải rủi ro, dự báo chữ số.
Cơ chế thứ hai là sự quá lạc quan của các nhà đầu tư thiếu kinh nghiệm. Những nhà đầu tư vốn đã hào hứng với một tài sản sẽ chọn con số may mắn như một cách biểu lộ sự hào hứng đó. Cơ chế này dự báo hiệu ứng mạnh hơn ở nơi sự lạc quan có khả năng cao, và các tác giả tìm thấy điều đó: trong các IPO, \(H_8\) tăng từ \(29.3\%\) ở nhóm P/E thấp nhất lên \(46.0\%\) ở nhóm cao nhất, trong khi các đợt phát hành riêng lẻ, nơi người mua là nhà đầu tư chuyên nghiệp, không cho thấy độ dốc như vậy. Trong dữ liệu bảng thị trường thứ cấp, tỷ số giá trị sổ sách trên giá trị thị trường thấp hơn dự báo hiệu ứng mạnh hơn.
Hai cơ chế này mang hàm ý khác nhau đối với giá, và đây là điều giúp bài báo xứng đáng có chỗ đứng trong một chương về vi cấu trúc. Neo giá chọn một điểm từ một khoảng mà các yếu tố cơ bản đã xác định, nên không để lại định giá sai có hệ thống. Còn sự quá lạc quan thì hẳn sẽ để lại một mức định giá sai nhất định. Bằng chứng khớp với điều đó.
Trong các hồi quy Fama-MacBeth của lợi nhuận hằng tháng điều chỉnh theo thị trường trong ba năm sau khi niêm yết, các IPO được định giá với chữ số cuối là 8 có kết quả kém hơn khoảng \(0.47\%\) mỗi tháng trong giai đoạn định giá linh hoạt, tức khoảng 15% tích lũy. Hệ số này không có ý nghĩa thống kê trong giai đoạn kiểm soát chặt và đối với các đợt phát hành riêng lẻ.
Trên thị trường thứ cấp, một danh mục mua nhóm ngũ phân vị cổ phiếu có mức chênh lệch nhỏ nhất của số lần đóng cửa khớp lệnh định kỳ may mắn so với xui xẻo trong tháng trước, và bán khống nhóm ngũ phân vị có mức chênh lớn nhất, đạt alpha ba nhân tố Fama-French khoảng \(0.48\%\) mỗi tháng trong nhóm cổ phiếu nhỏ. Danh mục này không tạo ra alpha nào trong nhóm cổ phiếu lớn, mặc dù cổ phiếu lớn cũng cho thấy hiệu ứng chữ số, và cũng không tạo ra alpha nào khi giá đóng cửa là bình quân gia quyền theo khối lượng.
Trong số các trái phiếu doanh nghiệp phi tài chính phát hành công khai trên thị trường giao dịch tập trung, một coupon may mắn gắn với chênh lệch lợi suất khi phát hành thấp hơn khoảng 5.4 điểm cơ bản, sau khi kiểm soát các đặc điểm của tổ chức phát hành và của trái phiếu. Không có mức chiết khấu như vậy ở thị trường liên ngân hàng hay ở trái phiếu phát hành riêng lẻ, nơi người mua là những nhà đầu tư sành sỏi nhất.
Bài học tổng quát vượt xa chuyện mê tín: dấu vết hành vi trong giá tự nó không phải là bằng chứng của định giá sai. Sở thích chữ số có thể mạnh, rõ ràng về mặt thống kê, và hiện diện ở những thị trường do các chuyên gia chi phối mà không gây tổn thất cho ai, vì nó chỉ chọn trong số các mức giá phù hợp ngang nhau với các yếu tố cơ bản. Định giá sai chỉ xuất hiện ở nơi cùng dấu vết đó là triệu chứng của sự lạc quan ở những nhà đầu tư quyết định cả mức giá lẫn chữ số cuối của nó.
4.3.3 Ý nghĩa đối với nghiên cứu tại Việt Nam
The premise transfers to Vietnam, though not unchanged. Vietnamese numerology overlaps with the Chinese: 4 (tứ) is avoided for its closeness to tử, death, and 8 (bát) is favored for its association with phát, prosperity. The Vietnamese ranking differs, however, in ways that matter for test design. Nine is at least as favored as eight, 6 (lộc, fortune) is favored, two-digit endings such as 68, 39, and 79 carry meanings of their own, and 7 is avoided by some. The public auctions of vehicle license plates held since 2023, in which plates made of repeated favored digits have sold at very large premia, show that these preferences command real money. A study that imposes the Chinese 8-versus-4 contrast risks missing the main effect, so the first step should be a test of the full digit distribution against uniformity, followed by tests of digits named before the data are examined.
Lưới bước giá quyết định chữ số nào có thể mang sở thích, và trên HOSE, lưới thay đổi theo mức giá (Bảng 4.5). Giá được hiển thị theo nghìn đồng, do đó 25.35 nghĩa là 25,350 VND. Dưới 10,000 VND, bước giá là 10 VND, và chữ số cuối được hiển thị (hàng chục đồng) có thể nhận bất kỳ giá trị nào. Trong khoảng 10,000 đến 50,000 VND, bước giá là 50 VND, nên chữ số hàng chục chỉ có thể là 0 hoặc 5 và chữ số duy nhất tự do để biểu lộ sở thích là hàng trăm. Trên 50,000 VND, và trên UPCoM ở mọi mức giá, bước giá là 100 VND và chữ số hàng trăm lại là chữ số tự do. Do đó, phiên bản Việt Nam của Phương trình 4.1 phải được tính theo từng tầng, trên chữ số cuối mà lưới không ràng buộc, theo cùng tinh thần mà Chang và Du (2026) loại bỏ các hợp đồng hàng hóa có bước giá khiến một số chữ số không thể đạt tới. Gộp các tầng sẽ trộn một chữ số tự do với một chữ số bị ràng buộc và cho ra một phân phối không đều theo cấu trúc.
Hai lực cơ học đặc thù của Việt Nam cũng phải được loại bỏ trước khi một chữ số có thể được đọc là lựa chọn của ai đó.
Giá trần và giá sàn là phép tính, không phải lựa chọn. Một cổ phiếu đóng cửa tại giá trần hoặc giá sàn thì đóng cửa ở giá tham chiếu nhân với một cộng hoặc trừ biên độ, làm tròn theo bước giá, nên chữ số cuối của nó được quyết định bởi giá hôm qua chứ không phải do ai chọn hôm nay. Việc chạm biên độ xảy ra thường xuyên, đặc biệt ở các cổ phiếu nhỏ (Mục 37.2). Nếu không loại bỏ chúng, hiệu ứng bị pha loãng đúng ở phân khúc mà cơ chế quá lạc quan dự báo là mạnh nhất.
Quy tắc phá thế hòa của khớp lệnh định kỳ kéo giá về phía giá đóng cửa hôm qua. Khi có nhiều mức giá cùng tối đa hóa khối lượng khớp, phiên khớp lệnh chọn mức giá gần nhất với giá đóng cửa trước đó, như đã mô tả ở phần các loại lệnh và quy tắc khớp lệnh ở trên. Do đó, chữ số cuối của giá đóng cửa trước đó là một điểm hút cơ học đối với giá khớp lệnh định kỳ hôm nay, và một phần của mọi sự bền vững theo ngày trong các chữ số là do quy tắc chứ không phải do sở thích. Việc điều kiện hóa theo chữ số cuối của giá tham chiếu giúp tách hai yếu tố này.
Việt Nam cũng có một đối chứng tự nhiên với placebo làm cho bằng chứng Trung Quốc có sức thuyết phục. Giá mở cửa và đóng cửa trên HOSE được xác định bằng khớp lệnh định kỳ (Bảng 4.3), cơ chế mà dưới đó sở thích chữ số vẫn tồn tại qua phép tổng hợp. Ngược lại, giá tham chiếu của UPCoM là bình quân gia quyền theo khối lượng của các giá khớp lệnh liên tục lô chẵn của ngày hôm trước, làm tròn theo bước giá: cơ chế lấy trung bình mà dưới đó hiệu ứng ở Trung Quốc biến mất. Một sở thích chữ số trong giá khớp lệnh định kỳ HOSE nhưng vắng mặt trong giá tham chiếu UPCoM là phiên bản Việt Nam của placebo của các tác giả, với điều kiện so sánh được thực hiện trên chữ số mà việc làm tròn theo lưới 100 VND để tự do.
Các thị trường sơ cấp là nơi cơ chế quá lạc quan có thể được kiểm định sắc nét nhất. Các cuộc đấu giá cổ phần của doanh nghiệp nhà nước cổ phần hóa thu thập các giá thầu kín, và các kết quả được công bố, vốn báo cáo giá trúng thầu, cho một cái nhìn đầu tiên về mức giá mà người đấu thầu chọn. Trái phiếu doanh nghiệp phát hành riêng lẻ là một sự tương ứng còn sát hơn với kết quả mạnh nhất của Trung Quốc. Các điều khoản phát hành của chúng, gồm cả lãi suất coupon, được công bố trên trang thông tin trái phiếu doanh nghiệp chuyên biệt của Sở Giao dịch Chứng khoán Hà Nội. Trong giai đoạn bùng nổ 2019–2021, một tỷ lệ đáng kể các trái phiếu này do cá nhân mua, thường thông qua các kênh ngân hàng và công ty chứng khoán, và việc siết chặt năm 2022 đối với điều kiện để được coi là nhà đầu tư chuyên nghiệp có quyền mua chúng (Nghị định 65/2022/ND-CP) đã thay đổi mức độ sành sỏi của cơ sở người mua gần như chỉ sau một đêm. Khung phân tích của Chang và Du (2026) đưa ra hai dự báo có thể kiểm định: tỷ lệ coupon tận cùng bằng các chữ số được ưa chuộng sẽ giảm sau khi siết chặt, và các trái phiếu phát hành trước đó với coupon được ưa chuộng sẽ có kết quả tồi hơn trong làn sóng gia hạn và vỡ nợ thanh toán giai đoạn 2022–2023. Các cuộc đấu thầu trái phiếu chính phủ trên HNX, nơi người đấu thầu là ngân hàng và công ty bảo hiểm, đóng vai trò placebo phi rủi ro, nơi khung phân tích dự báo không có hiệu ứng.
Từ đó rút ra bảy quy tắc thực tiễn.
Dùng giá thô, chưa điều chỉnh. Việc điều chỉnh theo cổ tức và phát hành cổ phiếu nhân lại giá với các hệ số làm mất chữ số cuối. Mọi kiểm định chữ số phải được chạy trên giá giao dịch thực tế, điều mà nhiều sản phẩm dữ liệu không cung cấp theo mặc định.
Tính phân phối chữ số trong từng tầng bước giá, trên chữ số cuối mà lưới để tự do. Không bao giờ gộp giá qua các ngưỡng 10,000 và 50,000 VND.
Loại bỏ các lần đóng cửa chạm biên độ, và điều kiện hóa theo chữ số cuối của giá tham chiếu. Cả hai đều loại bỏ các chữ số do một quy tắc chứ không phải do một nhà đầu tư quyết định.
Kiểm định toàn bộ phân phối trước khi kiểm định các chữ số được nêu tên. Báo cáo một kiểm định tính đồng đều trên mọi chữ số tự do, sau đó kiểm định các chữ số được chọn trước, chẳng hạn 8, 9 và 6 so với 4 và 7. Với chín chữ số, nhiều tầng bước giá và ba sàn giao dịch, logic kiểm định đa giả thuyết của Mục 21.3 áp dụng ở quy mô nhỏ.
Để cơ chế hình thành giá thực hiện việc nhận diện. So sánh giá khớp lệnh định kỳ trên HOSE với giá giao dịch trong phiên liên tục và với giá tham chiếu UPCoM. Một quy luật chung cho cả ba nhiều khả năng là sai lệch do dữ liệu hơn là một sở thích.
Tách biệt sự hiện diện với tác động lên giá. Sở thích chữ số là một thực tế về cách giá được hình thành. Việc nó có gây tổn thất tiền bạc cho ai hay không là một câu hỏi riêng, được trả lời bằng các kiểm định lợi nhuận hoặc lợi suất trong đó chữ số là biến can thiệp, chạy trong các nhóm có mức độ sành sỏi khác nhau của nhà đầu tư.
Chú ý kích thước mẫu trên mỗi cổ phiếu. Một chỉ số may mắn hằng tháng được xây dựng từ hai mươi lần đóng cửa, trong đó có một số lần chạm biên độ hoặc ngày không có giao dịch, sẽ nhiễu. Hãy yêu cầu một số lượng tối thiểu các giá khớp lệnh định kỳ hợp lệ, và so sánh thống kê thực hiện với phân phối của nó khi các chữ số được hoán vị ngẫu nhiên trong từng cổ phiếu.
4.4 Biên độ giá và hệ quả
Việt Nam áp dụng biên độ giá hằng ngày đối với mọi cổ phiếu niêm yết. Giá của một cổ phiếu không thể dịch chuyển vượt quá một tỷ lệ phần trăm cố định so với giá đóng cửa của ngày hôm trước trong một ngày giao dịch. Các biên độ là \(\pm\) 7% trên HOSE, \(\pm\) 10% trên HNX và \(\pm\) 15% trên UPCoM.
4.4.1 Khung lý thuyết
Biên độ giá được đưa ra với mục tiêu tuyên bố là giảm biến động và ngăn chặn sự sai lệch giá do hoảng loạn. Tuy nhiên, tài liệu học thuật cho thấy một bức tranh nhiều sắc thái hơn. Giả thuyết “hiệu ứng nam châm” (Subrahmanyam 1994) dự báo rằng biên độ giá trên thực tế lại làm tăng tốc dịch chuyển giá về phía biên khi các nhà giao dịch vội vàng thực hiện lệnh trước khi chạm biên. Giả thuyết “khám phá giá bị trì hoãn” (Fama và French 1989) lập luận rằng các biên độ chỉ hoãn lại những điều chỉnh giá không thể tránh khỏi, gây ra lan truyền biến động sang các ngày tiếp theo.
Về mặt hình thức, gọi \(P_t^*\) là giá cân bằng vào ngày \(t\) và \(P_{t-1}^c\) là giá đóng cửa trước đó. Lợi nhuận quan sát được là:
trong đó \(r_t^* = \ln(P_t^* / P_{t-1}^c)\) là lợi nhuận tiềm ẩn (không bị ràng buộc), \(\bar{L}\) là biên trên và \(\underline{L}\) là biên dưới. Lợi nhuận quan sát được \(r_t^{obs}\) là phiên bản bị kiểm duyệt của lợi nhuận thực. Việc kiểm duyệt này có một số hệ quả:
Các moment bị cắt cụt: Phương sai quan sát được \(\text{Var}(r_t^{obs}) < \text{Var}(r_t^*)\) vì các lợi nhuận cực đoan bị cắt bỏ. Điều này làm chệch xuống mọi thước đo rủi ro dựa trên biến động.
Tự tương quan nhân tạo: Khi \(r_t^{obs} = \bar{L}\) và \(r_{t+1}^{obs} > 0\) (tiếp tục điều chỉnh vào ngày hôm sau), chuỗi lợi nhuận thể hiện tự tương quan dương hoàn toàn mang tính cơ học, không mang tính thông tin.
Lan truyền biến động: Định nghĩa biến động vượt mức vào ngày \(t+1\) là \(\sigma_{t+1}^2 - E[\sigma_{t+1}^2 | \text{no limit hit on day } t]\). Kim và Rhee (1997) và Chu và Qiu (2019) ghi nhận sự lan truyền dương có ý nghĩa thống kê, trong đó những ngày sau khi chạm biên độ thể hiện biến động cao bất thường.
Các thống kê giá trị cực trị bị chệch: Các thước đo như Value-at-Risk, Expected Shortfall và mức sụt giảm tối đa bị giới hạn một cách cơ học bởi biên độ, làm đánh giá thấp rủi ro đuôi thực sự.
4.4.2 Phát hiện các lần chạm biên độ giá
Bây giờ chúng ta triển khai một chẩn đoán để phát hiện các lần chạm biên độ giá trong dữ liệu hằng ngày.
Hiện mã
import pandas as pdimport numpy as npimport sqlite3# Load daily price datatidy_finance = sqlite3.connect(database="data/tidy_finance_python.sqlite")# Assume prices_daily contains: symbol, date, close, exchangeprices_daily = pd.read_sql_query(# , exchange sql=""" SELECT symbol, date, close FROM prices_daily """, con=tidy_finance, parse_dates=["date"]).dropna()
Hiện mã
# Define limit bands by exchangelimit_bands = {"HOSE": 0.07, "HNX": 0.10, "UPCoM": 0.15}prices_daily = prices_daily.sort_values(["symbol", "date"])prices_daily["prev_close"] = prices_daily.groupby("symbol")["close"].shift(1)prices_daily["ret"] = prices_daily["close"] / prices_daily["prev_close"] -1prices_daily["limit_band"] = prices_daily["exchange"].map(limit_bands)# A limit hit occurs when the return is within 0.1% of the theoretical limittolerance =0.001prices_daily["upper_hit"] = ( prices_daily["ret"] >= prices_daily["limit_band"] - tolerance)prices_daily["lower_hit"] = ( prices_daily["ret"] <=-prices_daily["limit_band"] + tolerance)prices_daily["limit_hit"] = ( prices_daily["upper_hit"] | prices_daily["lower_hit"])
Theo Kim và Rhee (1997), chúng ta kiểm định xem những ngày sau một lần chạm biên độ có thể hiện biến động cao bất thường hay không. Định nghĩa biến giả \(D_t = 1\) nếu có một lần chạm biên độ vào ngày \(t\), và ước lượng:
Một hệ số dương có ý nghĩa thống kê trên biến giả chạm biên độ xác nhận rằng biên độ giá của Việt Nam không loại bỏ biến động, chúng chỉ phân phối lại biến động qua các ngày. Điều này có hàm ý trực tiếp đối với quản trị rủi ro: các thước đo VaR hằng ngày tính từ lợi nhuận bị kiểm duyệt đánh giá thấp mức phơi nhiễm rủi ro thực.
4.4.5 Tự tương quan của lợi nhuận do biên độ giá gây ra
Biên độ giá gây ra tự tương quan dương trong lợi nhuận một cách cơ học. Để định lượng điều này, chúng ta tính hệ số tự tương quan bậc nhất riêng cho các cổ phiếu thường xuyên chạm biên độ so với những cổ phiếu không như vậy.
Bảng 4.6: Tự tương quan của lợi nhuận theo tần suất chạm biên độ giá
Hiện mã
# Classify stocks by limit hit frequencystock_limit_freq = ( prices_daily .groupby("symbol") .agg( hit_rate=("limit_hit", "mean"), n_obs=("ret", "count") ) .query("n_obs >= 250") # At least 1 year of data)stock_limit_freq["limit_group"] = pd.qcut( stock_limit_freq["hit_rate"], q=3, labels=["Low", "Medium", "High"])# Compute autocorrelation by groupdef compute_autocorr(group_symbols): subset = prices_daily[prices_daily["symbol"].isin(group_symbols)].copy() subset["ret_lag"] = subset.groupby("symbol")["ret"].shift(1)return subset[["ret", "ret_lag"]].dropna().corr().iloc[0, 1]autocorr_results = []for group in ["Low", "Medium", "High"]: symbols = stock_limit_freq[stock_limit_freq["limit_group"] == group].index ac = compute_autocorr(symbols) n_stocks =len(symbols) avg_hit_rate = stock_limit_freq.loc[symbols, "hit_rate"].mean() autocorr_results.append({"Group": group,"N Stocks": n_stocks,"Avg Limit Hit Rate (%)": round(avg_hit_rate *100, 2),"AR(1)": round(ac, 4) })pd.DataFrame(autocorr_results).style.hide(axis="index")
Quy luật kỳ vọng là tự tương quan tăng đơn điệu từ nhóm chạm biên độ Thấp đến Cao, xác nhận rằng sự phụ thuộc chuỗi quan sát được trong lợi nhuận ít nhất một phần là sai lệch do dữ liệu từ việc kiểm duyệt giá chứ không phải khả năng dự báo lợi nhuận thực sự.
4.5 Thanh khoản, giao dịch thưa thớt và lợi nhuận bằng không
Thanh khoản (tức là khả năng giao dịch nhanh với chi phí thấp mà không làm dịch chuyển giá) là mối quan tâm bậc nhất đối với cổ phiếu Việt Nam. Một tỷ lệ đáng kể các doanh nghiệp niêm yết, đặc biệt trên HNX và UPCoM, rơi vào tình trạng phi thanh khoản kinh niên với đặc trưng là giao dịch không thường xuyên, chênh lệch giá mua–bán rộng và các ngày có lợi nhuận bằng không xảy ra thường xuyên.
4.5.1 Đo lường thanh khoản
Tài liệu học thuật đã phát triển nhiều thước đo thanh khoản, mỗi thước đo nắm bắt một khía cạnh khác nhau của chất lượng thị trường. @#tbl-liquidity-measures tóm tắt các thước đo áp dụng được nhiều nhất cho dữ liệu Việt Nam, xét theo mức độ sẵn có điển hình của dữ liệu.
Bảng 4.7: Các thước đo thanh khoản cho cổ phiếu Việt Nam
Tỷ số phi thanh khoản Amihud (Amihud 2002) đặc biệt hữu ích vì chỉ cần dữ liệu lợi nhuận và khối lượng hằng ngày. Nó nắm bắt tác động giá của giao dịch (tức là lợi nhuận trên mỗi đơn vị khối lượng tính bằng tiền tệ) và đã được chứng minh là tương quan tốt với các thước đo dựa trên vi cấu trúc tinh vi hơn như chênh lệch hiệu dụng Goyenko và Ukhov (2009).
4.5.2 Tính các chẩn đoán thanh khoản
Hiện mã
# Compute standard liquidity measures at the stock-month levelprices_daily["abs_ret"] = prices_daily["ret"].abs()prices_daily["zero_return"] = (prices_daily["ret"] ==0).astype(int)prices_daily["year_month"] = prices_daily["date"].dt.to_period("M")# Assume volume is in shares and value is in VND# Amihud: average |ret| / value (in billions VND)prices_daily["amihud_daily"] = np.where( prices_daily["value"] >0, prices_daily["abs_ret"] / (prices_daily["value"] /1e9), np.nan)liquidity_monthly = ( prices_daily .groupby(["symbol", "year_month"]) .agg( zero_return_share=("zero_return", "mean"), avg_turnover=("turnover", "mean"), amihud=("amihud_daily", "mean"), trading_days=("ret", "count"), avg_daily_value=("value", "mean") ) .reset_index())# Flag severely illiquid stock-monthsliquidity_monthly["illiquid_flag"] = ( (liquidity_monthly["zero_return_share"] >0.5) | (liquidity_monthly["trading_days"] <10) | (liquidity_monthly["avg_daily_value"] <1e8) # < 100M VND/day)
4.5.3 Phân phối thanh khoản theo mặt cắt ngang
Bảng 4.8: Phân phối theo mặt cắt ngang của các thước đo thanh khoản (năm đầy đủ gần nhất)
Các phân phối thường cho thấy một mẫu hình hai đỉnh: cổ phiếu HOSE tụ ở các giá trị phi thanh khoản thấp, trong khi cổ phiếu HNX và đặc biệt là UPCoM có đuôi phải dài với mức phi thanh khoản cực đoan. Sự không đồng nhất này hàm ý rằng một bộ lọc hay cách xử lý thanh khoản duy nhất là không đủ cho toàn bộ mặt cắt ngang.
4.5.5 Biến thiên theo thời gian của thanh khoản tổng hợp
Thanh khoản toàn thị trường không phải là hằng số. Nó xấu đi trong các cuộc khủng hoảng, giai đoạn bất định chính sách và giai đoạn dòng vốn chảy ra, và cải thiện trong thị trường tăng giá và giai đoạn dòng vốn nước ngoài chảy vào. Bản thân biến thiên theo thời gian của thanh khoản tổng hợp là một nhân tố rủi ro (Pástor và Stambaugh 2003).
4.5.6 Phi thanh khoản thực hiện từ dữ liệu trong ngày
Mọi thước đo trong Bảng 4.7 đều được tính từ dữ liệu hằng ngày, điều làm cho chúng dùng được trên toàn bộ mặt cắt ngang của thị trường Việt Nam. Cái giá của sự tiện lợi đó là độ chính xác, và tỷ số Amihud chịu phần lớn nhất. Tử số của nó, \(|r_{i,d}|\), là một quan sát đơn lẻ đại diện cho cả một ngày biến động giá.
Lacava, Ranaldo, và Santucci de Magistris (2026) đề xuất thay lợi nhuận tuyệt đối đơn lẻ đó bằng một ước lượng tần suất cao của biến động giá trong cùng ngày, tạo ra Amihud thực hiện (realized Amihud)
trong đó \(r_{i,d,j}\) là các lợi nhuận trong ngày trên \(M\) khoảng của ngày \(d\) và hằng số \(\sqrt{2/\pi}\) đưa thước đo về cùng thang đo với tỷ số hằng ngày, nên hai thước đo có thể hoán đổi về mặt số học. Nền tảng kinh tế lượng của bộ ước lượng này — thiết lập semimartingale, các giả định, biến thể biến phân bipower chịu được các bước nhảy, và việc suy ra mức cải thiện độ chính xác — được trình bày trong chương về thanh khoản (Mục 14.4). Mục này giải quyết câu hỏi thuộc về đây: cần làm gì để tính Phương trình 4.4 đúng cách trên HOSE, và liệu mức cải thiện độ chính xác có thực sự hiện thực hóa được trong một thị trường mỏng như thế này hay không.
Câu trả lời ngắn gọn là mức cải thiện này có thật nhưng được quyết định bởi tần suất giao dịch của một cổ phiếu, chứ không phải bởi việc chia nhỏ ngày giao dịch đến mức nào. Với một cổ phiếu thuộc VN30, mức cải thiện gần với mức lý thuyết là bảy lần; với một cổ phiếu giao dịch năm lần một ngày, mức cải thiện dưới hai lần và đi kèm độ chệch xuống đáng kể. Vì sự phân biệt này không hiện ra trong kết quả của bất kỳ quy trình phương sai thực hiện tiêu chuẩn nào, nó phải được áp đặt bằng cách sàng lọc.
4.5.6.1 Xây dựng lưới trong ngày nhận biết phiên giao dịch
Cấu trúc phiên của Việt Nam (Bảng 4.3) loại trừ cách tiếp cận ngây thơ là lấy mẫu lại ngày giao dịch trên một lưới thời gian đều. Ba đặc điểm của ngày giao dịch phải được tôn trọng.
Giờ nghỉ trưa không phải là một khoảng lợi nhuận. Khoảng trống 11:30–13:00 ngăn cách hai phiên liên tục. Lấy hiệu giá lúc 13:00 trừ giá lúc 11:30 tạo ra một “lợi nhuận năm phút” kéo dài chín mươi phút thị trường đóng cửa, đi vào \(\text{RV}\) như một số hạng bình phương lớn và làm phồng ước lượng. Cách xử lý đúng là tính \(\text{RV}\) riêng trong phiên sáng (09:15–11:30, 135 phút) và phiên chiều (13:00–14:30, 90 phút) rồi cộng hai kết quả. Với lấy mẫu năm phút, điều này cho \(27 + 18 = 45\) khoảng, tức là \(M = 45\) được dùng xuyên suốt.
Giá của phiên khớp lệnh định kỳ không phải là giá của thị trường liên tục. Giá ATO (09:00–09:15) và giá ATC (14:30–14:45) là các giá cân bằng đơn lẻ từ khớp lệnh định kỳ, được xác định bằng một cơ chế khác với sổ lệnh giới hạn liên tục. Đưa chúng vào làm điểm lưới sẽ trộn hai quá trình hình thành giá và kéo theo mọi méo mó đặc thù của phiên khớp lệnh định kỳ — mà như đã nêu trong phần thảo luận về Bảng 4.3, có thể đáng kể đối với các cổ phiếu kém thanh khoản nơi một lệnh duy nhất làm dịch chuyển giá đóng cửa.
Khối lượng giao dịch thỏa thuận phải được loại khỏi mẫu số. Khung 14:45–15:00 dành cho giao dịch thỏa thuận tạo ra các giao dịch ở mức giá được thỏa thuận song phương, bên ngoài sổ lệnh. Nếu các khối lượng lớn này đi vào \(\text{DVOL}\) trong khi tử số chỉ được đo trong giao dịch liên tục, thì tử số và mẫu số của tỷ số mô tả hai thị trường khác nhau, và một giao dịch khối lượng lớn duy nhất có thể khiến một cổ phiếu có vẻ thanh khoản hơn gấp cả một bậc độ lớn trong ngày đó.
Đoạn mã sau xây dựng các thước đo theo những quy ước này. Nó đòi hỏi dữ liệu giao dịch trong ngày, vốn không thuộc quy trình dữ liệu hằng ngày được dùng ở những phần khác của chương này, nên không được thực thi ở đây.
Hiện mã
import pandas as pdimport numpy as np# HOSE continuous sessions only: auctions and put-through are excluded.HOSE_SESSIONS = [("09:15", "11:30"), ("13:00", "14:30")]SAMPLING_MINUTES =5def session_grid_returns(day_ticks, freq_min=SAMPLING_MINUTES):""" Log returns on a `freq_min` grid, computed WITHIN each continuous session. `day_ticks` holds one trading day for one symbol with columns [timestamp, price]. Returns a list of per-session return arrays plus the number of grid intervals in which the price actually changed. """ out, n_active, n_grid = [], 0, 0 day = day_ticks["timestamp"].dt.normalize().iloc[0]for start, end in HOSE_SESSIONS: lo = day + pd.Timedelta(start +":00") hi = day + pd.Timedelta(end +":00") sess = day_ticks[(day_ticks["timestamp"] >= lo) & (day_ticks["timestamp"] <= hi)]iflen(sess) <2:continue# Last traded price at each grid point; ffill makes staleness explicit. grid = (sess.set_index("timestamp")["price"] .resample(f"{freq_min}min", origin=lo, label="right", closed="right") .last() .ffill() .dropna())iflen(grid) <2:continue r = np.diff(np.log(grid.to_numpy())) out.append(r) n_grid +=len(r) n_active +=int(np.sum(r !=0)) # intervals carrying real tradingreturn out, n_active, n_griddef realized_measures(day_ticks, dvol_continuous):""" Realized and bipower Amihud for one symbol-day. `dvol_continuous` is VND volume from the continuous sessions ONLY, with put-through blocks removed. """ sessions, n_active, n_grid = session_grid_returns(day_ticks)ifnot sessions or dvol_continuous <=0:returnNone# Sum WITHIN sessions, never across the lunch break. rv =float(sum(np.sum(r **2) for r in sessions)) bv =float(sum((np.pi /2) * np.sum(np.abs(r[1:]) * np.abs(r[:-1]))for r in sessions iflen(r) >1)) k = np.sqrt(2.0/ np.pi)return {"rv": rv,"bv": bv,"n_active": n_active,"n_grid": n_grid,"active_share": n_active / n_grid if n_grid else np.nan,"rilliq": k * np.sqrt(rv) / dvol_continuous,"rilliq_bv": k * np.sqrt(max(bv, 0.0)) / dvol_continuous, }def realized_illiquidity_panel(ticks, dvol_daily, min_active=20):""" Build a symbol-day panel, flagging days too thin for the estimator. `min_active` is the screen developed below: below roughly 20 traded intervals of 45 the precision advantage largely disappears. """ recs = []for (sym, day), grp in ticks.groupby(["symbol", ticks["timestamp"].dt.date]): dv = dvol_daily.get((sym, day))if dv isNone:continue m = realized_measures(grp.sort_values("timestamp"), dv)if m isNone:continue m.update(symbol=sym, date=pd.Timestamp(day), reliable=m["n_active"] >= min_active) recs.append(m) panel = pd.DataFrame(recs)iflen(panel): share =100* panel["reliable"].mean()print(f"{len(panel):,} symbol-days; {share:.1f}% clear the "f"min_active={min_active} screen")return panel
4.5.6.2 Mức cải thiện độ chính xác có còn khi giao dịch thưa thớt?
Mức cải thiện lý thuyết bảy lần giả định có \(M = 45\) lợi nhuận mang thông tin. Một cổ phiếu giao dịch năm lần mỗi phiên thì không có được như vậy. Lưới năm phút của nó chủ yếu là các giá lỗi thời được điền tiếp theo, và một khoảng được điền tiếp theo đóng góp một số không cơ học vào \(\text{RV}\) — một khoảng mà bộ ước lượng không đọc được biến động, không phải vì giá trị không dịch chuyển mà vì không ai giao dịch.
Mô phỏng dưới đây định lượng cái giá của điều này. Một mức giá hiệu quả khuếch tán trên lưới một phút trong 225 phút liên tục của HOSE; các giao dịch đến theo một quá trình Poisson mà cường độ được chúng ta thay đổi; giá năm phút quan sát được là giá giao dịch cuối cùng tại hoặc trước mỗi điểm lưới. Vì khối lượng giao dịch được giữ giống hệt nhau cho mọi cổ phiếu theo thiết kế mô phỏng, mọi khác biệt trong tỷ số đo được đều có thể quy cho riêng tử số.
Mức cải thiện độ chính xác được quyết định bởi số giao dịch, không phải số điểm lưới. Thước đo thực hiện vượt thước đo hằng ngày khoảng 7.2 lần khi giao dịch liên tục, và hệ số quan sát được bám sát \(\sqrt{2 M_{\text{eff}}(\pi/2 - 1)}\) gần như chính xác một khi \(M_{\text{eff}}\) được định nghĩa là số khoảng mà giá thực sự thay đổi thay vì 45 khoảng trên lưới. Với 20 giao dịch mỗi ngày, chỉ khoảng 17 khoảng có hoạt động và mức cải thiện thực hiện giảm xuống còn khoảng 3.4; với năm giao dịch mỗi ngày, mức này khoảng 1.7. Làm mịn lưới không giúp ích gì, vì ràng buộc là sự xuất hiện của các giao dịch, không phải độ phân giải của đồng hồ.
Tình trạng lỗi thời làm thước đo chệch xuống, và độ chệch nhỏ cho đến khi giao dịch thực sự trở nên thưa thớt. Độ chệch dưới 2% cho đến mức 50 giao dịch mỗi ngày, đạt khoảng \(-5\%\) ở mức 20, và khoảng \(-19\%\) ở mức 5. Cơ chế này đáng được hiểu chính xác, vì câu chuyện trực giác là sai: việc làm thô lấy mẫu của một martingale không làm chệch phương sai thực hiện, vì \(\mathbb{E}[\text{RV}]\) bằng phương sai tích phân với mọi phân hoạch. Điều mà tình trạng lỗi thời thực sự loại bỏ là biến động giá xảy ra trước giao dịch đầu tiên và sau giao dịch cuối cùng — hai đầu của ngày, không phải giữa ngày. Đó là lý do độ chệch ở mức vừa phải đối với các cổ phiếu giao dịch vừa phải và chỉ trở nên nghiêm trọng đối với các cổ phiếu có giao dịch đầu tiên và cuối cùng nằm xa ranh giới phiên. Tuy vậy, đó là độ chệch theo hướng nguy hiểm: nó làm các cổ phiếu kém thanh khoản nhất trông thanh khoản hơn, điều ngược với sai lầm mà một nhà nghiên cứu mong đợi và sẽ không bị phát hiện bởi một bộ lọc giá trị ngoại lai.
Tỷ số Amihud hằng ngày hầu như không mang thông tin theo mặt cắt ngang trong tử số của nó. Khi khối lượng giao dịch được giữ cố định giữa các cổ phiếu, tương quan hạng giữa tỷ số cổ điển và phi thanh khoản thực chỉ khoảng 0.26, về cơ bản là phẳng ở mọi cường độ giao dịch. Phiên bản thực hiện đạt khoảng 0.92 trong trường hợp thanh khoản cao. Đây là minh chứng trực tiếp cho một điểm được thảo luận trong Mục 14.3.1.1: việc phân loại theo tỷ số Amihud trong dữ liệu thực hoạt động phần lớn là nhờ mẫu số biến thiên rất lớn giữa các cổ phiếu và được đo không có sai số. Tử số, nếu xét riêng, sắp xếp các cổ phiếu chỉ hơn nhiễu một chút. Điều này cũng cho thấy bộ ước lượng thực hiện dùng để làm gì — nó là một cải tiến cho thành phần của thước đo mà hiện nay đóng góp ít nhất.
Có một ngưỡng sàng lọc dùng được. Mức cải thiện trên 5\(\times\) khi có ít nhất khoảng 30 khoảng hoạt động, và giảm xuống dưới 2.5\(\times\) khi có ít hơn 10 khoảng. Yêu cầu n_active >= 20 trên 45, như trong hàm xây dựng bảng dữ liệu ở trên, nằm giữa hai điểm đó: nó giữ thước đo thực hiện tốt hơn thước đo hằng ngày rõ rệt, trên 3\(\times\), và giữ độ chệch do lỗi thời ở mức vài phần trăm, đồng thời loại bỏ vùng mà bộ ước lượng suy giảm nhanh nhất. Các cổ phiếu không qua được bộ sàng lọc nên quay về dùng tỷ số Amihud hằng ngày, và tỷ lệ cổ phiếu quay về cần được báo cáo, vì nó sẽ tương quan mạnh với quy mô và do đó sẽ tương tác với mọi phân tích phân loại theo quy mô.
4.5.6.3 Quan hệ với giao dịch không đồng bộ
Cơ chế ở đây giống cơ chế tạo ra độ chệch beta được bàn trong phần thảo luận về các bộ ước lượng Dimson và Scholes–Williams ở phần sau của chương này: giao dịch không thường xuyên có nghĩa là giá quan sát được lỗi thời, và giá lỗi thời làm đánh giá thấp mức đồng biến động của các giá hiệu quả tiềm ẩn. Điểm khác biệt là moment nào bị ảnh hưởng. Giao dịch không đồng bộ làm suy giảm hiệp phương sai giữa một cổ phiếu và thị trường, làm chệch beta xuống. Tình trạng lỗi thời trong Phương trình 4.4 làm suy giảm phương sai của chính cổ phiếu, làm chệch ước lượng phi thanh khoản xuống. Cả hai sai số đều tăng theo mức độ thưa thớt, và do đó cả hai đều gán nhãn sai cho cùng những cổ phiếu — những mã nhỏ nhất, ít giao dịch nhất đồng thời bị đánh giá thấp beta và đánh giá thấp phi thanh khoản, hai sai số đẩy theo cùng một hướng trong mọi kiểm định theo mặt cắt ngang có cả hai.
4.5.6.4 Lưu ý thực hành đối với dữ liệu Việt Nam
Khả năng có sẵn dữ liệu là ràng buộc chính. Dữ liệu giao dịch và báo giá trong ngày của HOSE không thuộc quy trình dữ liệu hằng ngày tiêu chuẩn dùng trong cuốn sách này và phải được tìm nguồn riêng. Các thước đo thực hiện nên được coi là một sự tinh chỉnh áp dụng cho nhóm thanh khoản cao của thị trường — xấp xỉ VN30 và các cổ phiếu vốn hóa vừa có quy mô lớn hơn — thay vì một sự thay thế cho tỷ số hằng ngày trên toàn bộ dữ liệu bảng.
Sàng lọc theo các khoảng có giao dịch, không bao giờ theo các khoảng của lưới. Một quy trình lấy mẫu lại sẽ trả về 45 mức giá cho một cổ phiếu chỉ giao dịch hai lần, vì việc điền tiếp theo diễn ra âm thầm. Hãy đếm số lần giá thay đổi, không đếm số dòng.
Dùng biến thể bipower vào các ngày chạm biên độ giá. Như đã chỉ ra trong Mục 14.4, một bước nhảy thông tin làm phồng \(\text{RV}\) nhưng để biến phân bipower gần như không chệch. Xét tần suất chạm biên độ được ghi nhận ở phần trước của chương này, đây là lựa chọn mặc định đáng ưu tiên đối với dữ liệu Việt Nam.
Không lấy mẫu dưới năm phút. Biểu bước giá trong Bảng 4.5 làm tỷ số nhiễu trên tín hiệu trong giá HOSE tệ hơn so với các thị trường Mỹ nơi quy ước năm phút được thiết lập, do đó khoảng tối ưu thậm chí còn dài hơn. Lấy mẫu mịn hơn khuếch đại nảy giá mua–bán nhanh hơn mức nó bổ sung thông tin; Mục 14.4 định lượng độ chệch phát sinh.
Báo cáo tỷ lệ quay về cùng mọi kết quả. Vì bộ sàng lọc loại bỏ cổ phiếu một cách không ngẫu nhiên, một kết quả theo mặt cắt ngang tính trên mẫu còn lại bị điều kiện hóa theo thanh khoản, chính là biến đang được nghiên cứu.
Khuyến nghị thực hành
Trước mọi phân tích định giá tài sản, hãy áp dụng bộ lọc thanh khoản sau: loại các tháng–cổ phiếu có tỷ lệ ngày có lợi nhuận bằng không vượt 50%, có ít hơn 15 ngày giao dịch quan sát được, hoặc có giá trị giao dịch trung bình hằng ngày thấp hơn một ngưỡng (ví dụ 100 triệu VND). Hãy ghi lại bộ lọc một cách tường minh và báo cáo độ nhạy của kết quả đối với các ngưỡng thay thế.
4.6 Ước lượng chênh lệch giá mua–bán
Khi thiếu dữ liệu báo giá toàn diện, chênh lệch giá mua–bán hiệu dụng có thể được ước lượng từ dữ liệu giao dịch bằng phương pháp của Roll (1984). Bộ ước lượng Roll khai thác thực tế rằng nếu nảy giá mua–bán là nguồn duy nhất của hiệp phương sai chuỗi âm trong lợi nhuận, thì:
trong đó \(\Delta p_t = p_t - p_{t-1}\) là thay đổi giá. Khi tự hiệp phương sai dương (xảy ra khi tương quan chuỗi do thông tin gây ra lấn át nảy giá mua–bán), bộ ước lượng Roll không xác định. Hasbrouck (2009) đề xuất một biến thể Bayes xử lý trường hợp này bằng cách áp đặt một phân phối tiên nghiệm lên chênh lệch giá.
Hiện mã
# Compute Roll spread estimate at the stock-month levelprices_daily["dprice"] = prices_daily.groupby("symbol")["close"].diff()prices_daily["dprice_lag"] = prices_daily.groupby("symbol")["dprice"].shift(1)roll_cov = ( prices_daily .groupby(["symbol", "year_month"]) .apply(lambda g: g[["dprice", "dprice_lag"]].dropna().cov().iloc[0, 1], include_groups=False ) .reset_index(name="autocovariance"))# Roll spread is defined only when autocovariance is negativeroll_cov["roll_spread"] = np.where( roll_cov["autocovariance"] <0,2* np.sqrt(-roll_cov["autocovariance"]), np.nan)# As a percentage of priceroll_cov = roll_cov.merge( prices_daily.groupby(["symbol", "year_month"])["close"].mean() .reset_index(name="avg_price"), on=["symbol", "year_month"])roll_cov["roll_spread_pct"] = roll_cov["roll_spread"] / roll_cov["avg_price"] *100
Bảng 4.9: Phân phối các ước lượng chênh lệch Roll (% của giá)
Khi các cổ phiếu không giao dịch cùng tần suất hoặc vào cùng thời điểm, lợi nhuận quan sát được bị lệch thời gian. Thiên lệch giao dịch không đồng bộ này, được hình thức hóa lần đầu bởi Scholes và Williams (1977) và Lo và MacKinlay (1990), là một trong những tác động vi cấu trúc có hệ quả lớn nhất đối với định giá tài sản ở các thị trường mỏng.
4.7.1 Vấn đề
Giả sử quá trình lợi nhuận thực (không quan sát được) của cổ phiếu \(i\) tuân theo mô hình một nhân tố:
trong đó \(r_{m,t}^*\) là lợi nhuận thị trường thực và \(\beta_i\) là beta thực. Nếu cổ phiếu \(i\) giao dịch lần cuối \(k\) ngày trước cuối ngày \(t\), lợi nhuận quan sát được chỉ bao hàm thông tin đến ngày \(t - k\). Scholes và Williams (1977) chỉ ra rằng ước lượng OLS của beta từ việc hồi quy lợi nhuận quan sát được theo lợi nhuận thị trường quan sát được là:
trong đó \(\pi_i\) là xác suất cổ phiếu \(i\) giao dịch vào một ngày bất kỳ. Với một cổ phiếu chỉ giao dịch 50% số ngày, beta OLS bị chệch xuống 50%. Độ chệch này nghiêm trọng ở Việt Nam, nơi nhiều cổ phiếu vốn hóa nhỏ giao dịch ít hơn một nửa số ngày giao dịch.
Beta đã hiệu chỉnh theo Dimson là \(\hat{\beta}_i^{Dimson} = \sum_{k=-K}^{K} \hat{\beta}_{i,k}\). Thông thường \(K = 1\) hoặc \(K = 2\) là đủ. Tổng các hệ số nắm bắt toàn bộ phản ứng của lợi nhuận quan sát được của cổ phiếu đối với thông tin thị trường, bất kể cổ phiếu thực sự giao dịch vào lúc nào.
Biểu đồ phân tán sẽ cho thấy một quy luật có hệ thống: beta Dimson vượt beta OLS với đa số cổ phiếu, với chênh lệch lớn nhất ở các cổ phiếu giao dịch thưa thớt. Các điểm nằm trên đường 45 độ cho biết những cổ phiếu có beta OLS bị chệch xuống do giao dịch không đồng bộ.
Bảng 4.10: Độ chệch beta theo tam phân vị tần suất giao dịch
Với tam phân vị giao dịch thưa thớt nhất, beta OLS đánh giá thấp rủi ro hệ thống thực trung bình 20-40%. Việc dùng beta chưa hiệu chỉnh để ước lượng chi phí vốn chủ sở hữu hoặc kiểm định mô hình nhân tố sẽ cho kết quả sai một cách có hệ thống với các cổ phiếu này.
4.7.4 Bộ ước lượng Scholes-Williams
Một hiệu chỉnh thay thế, do Scholes và Williams (1977) đề xuất, ước lượng beta như sau:
trong đó \(\hat{\beta}_{i,k}\) là hệ số góc từ việc hồi quy \(r_{i,t}\) chỉ theo \(r_{m,t-k}\), và \(\hat{\rho}_m\) là tự tương quan bậc nhất của lợi nhuận thị trường. Bộ ước lượng Scholes-Williams nhất quán dưới giả định rằng việc không giao dịch là nguồn duy nhất của tương quan chéo chuỗi, trong khi bộ ước lượng Dimson vững hơn trước các nguồn bổ sung của cấu trúc dẫn–trễ.
Các ma sát vi cấu trúc được ghi nhận ở trên có hệ quả trực tiếp đối với việc xây dựng danh mục đầu tư, đặc biệt với các chiến lược liên quan đến tái cân bằng trên toàn bộ mặt cắt ngang các doanh nghiệp niêm yết.
4.8.1 Lợi nhuận trọng số bằng nhau so với trọng số theo vốn hóa
Lợi nhuận danh mục trọng số bằng nhau cho mỗi cổ phiếu cùng một trọng số, kể cả các cổ phiếu vốn hóa nhỏ kém thanh khoản có thể đóng góp giá lỗi thời hoặc nhiễu. Lợi nhuận trọng số theo vốn hóa nghiêng về các cổ phiếu lớn, thanh khoản cao và ít bị nhiễm tác động vi cấu trúc hơn.
Sự phân kỳ kéo dài giữa lợi nhuận tích lũy trọng số bằng nhau và trọng số theo vốn hóa là dấu hiệu đặc trưng của các tác động vi cấu trúc: danh mục trọng số bằng nhau phóng đại lợi nhuận có thể đạt được vì ngầm giả định giao dịch không tốn chi phí ở các cổ phiếu kém thanh khoản.
4.8.2 Các bộ lọc thanh khoản khuyến nghị
Dựa trên các chẩn đoán được xây dựng trong chương này, chúng tôi khuyến nghị các bộ lọc tiền phân tích sau:
Mẹo
Hãy luôn báo cáo kết quả có và không có bộ lọc thanh khoản. Nếu kết quả khác nhau về mặt định tính, các phát hiện cơ sở có thể bị chi phối bởi các sai lệch giả tạo mang tính vi cấu trúc chứ không phải các tác động kinh tế thực sự.
4.8.3 Tần suất tháng so với tần suất ngày
Với hầu hết các ứng dụng định giá tài sản, việc tổng hợp lợi nhuận theo tháng được ưu tiên hơn phân tích theo ngày ở Việt Nam vì:
Lợi nhuận hằng tháng làm mịn nhiễu trong ngày, nảy giá mua–bán và các tác động của biên độ giá.
Các cổ phiếu giao dịch không thường xuyên trong một tháng vẫn tạo ra lợi nhuận hằng tháng có ý nghĩa.
Việc phân loại danh mục nhân tố theo quy ước được thực hiện ở tần suất tháng.
Các kiểm định thống kê có kích thước kiểm định gần mức danh nghĩa hơn khi nhiễu vi cấu trúc được giảm.
Tuy nhiên, việc tổng hợp theo tháng không loại bỏ mọi độ chệch. Các cổ phiếu có lợi nhuận bằng không trong cả một tháng vẫn đóng góp các quan sát lỗi thời. Các hiệu chỉnh Dimson và Scholes-Williams vẫn nên được áp dụng ở tần suất tháng khi ước lượng beta.
4.9 Hàm ý đối với các kiểm định định giá tài sản
4.9.1 Ước lượng mô hình nhân tố
Ước lượng mô hình nhân tố tiêu chuẩn giả định rằng lợi nhuận được quan sát đồng bộ và không bị kiểm duyệt. Ở Việt Nam, cả hai giả định đều bị vi phạm. Các hệ quả thực tiễn được nêu trong Bảng 4.11
Bảng 4.11: Các giả định tiêu chuẩn và những vi phạm của chúng
Giả định
Vi phạm tại Việt Nam
Hệ quả
Quan sát đồng bộ
Giao dịch thưa thớt
Beta bị chệch, R² bị suy giảm
Lợi nhuận không bị kiểm duyệt
Biên độ giá
Phân phối bị cắt cụt, các moment bị chệch
Giao dịch liên tục
Bước giá rời rạc
Tính rời rạc của lợi nhuận, nảy giá mua–bán
Không có chi phí giao dịch
Chênh lệch giá rộng
Lợi nhuận danh mục bị phóng đại
4.9.2 Quy trình kiểm định điều chỉnh
Chúng tôi khuyến nghị các điều chỉnh sau đối với các kiểm định định giá tài sản tiêu chuẩn khi áp dụng cho dữ liệu Việt Nam:
Ước lượng beta: Dùng beta Dimson (\(K \ge 1\)) hoặc Scholes-Williams, không dùng beta OLS.
Xây dựng nhân tố: Khi hình thành các danh mục theo quy mô và giá trị, hãy áp dụng bộ lọc thanh khoản trước khi phân loại. Cân nhắc loại nhóm ngũ phân vị nhỏ nhất theo vốn hóa thị trường, nhóm chịu ảnh hưởng nhiều nhất của giao dịch thưa thớt.
Tổng hợp lợi nhuận: Dùng tần suất tháng. Nếu buộc phải phân tích theo ngày, hãy đưa lợi nhuận thị trường trễ vào hồi quy chuỗi thời gian.
Suy luận vững: Dùng sai số chuẩn phân cụm theo cổ phiếu để tính đến tương quan chuỗi dai dẳng do vi cấu trúc gây ra. Dùng sai số chuẩn Newey-West HAC với số độ trễ đủ lớn.
Điều chỉnh biên độ giá: Với phân tích biến động hoặc đo lường rủi ro, hãy cân nhắc cách tiếp cận của Chu và Qiu (2019) là mô hình hóa phân phối lợi nhuận tiềm ẩn (không bị kiểm duyệt) bằng hồi quy cắt cụt:
Báo cáo độ nhạy: Luôn báo cáo các kết quả chính theo những đặc tả thay thế: có và không có bộ lọc thanh khoản, dùng beta OLS so với beta Dimson, ở tần suất ngày so với tháng, và dùng biến động quan sát được so với biến động đã hiệu chỉnh cắt cụt.
4.10 Tóm tắt
Chương này đã xác lập rằng thị trường cổ phiếu Việt Nam thể hiện các đặc điểm vi cấu trúc ảnh hưởng đáng kể đến giá, lợi nhuận và các thước đo rủi ro quan sát được. Các phát hiện chính là:
Biên độ giá kiểm duyệt lợi nhuận hằng ngày, gây ra tự tương quan dương, lan truyền biến động và phân phối bị cắt cụt. Biên độ \(\pm\) 7% trên HOSE đặc biệt chặt đối với các cổ phiếu biến động mạnh.
Giao dịch thưa thớt và lợi nhuận bằng không ảnh hưởng đến một tỷ lệ đáng kể các doanh nghiệp niêm yết. Xác suất giao dịch dưới 50% là phổ biến trên HNX và UPCoM, tạo ra thiên lệch giao dịch không đồng bộ làm suy giảm các ước lượng beta OLS 20-40%.
Phi thanh khoản biến thiên rất lớn theo mặt cắt ngang, với các tỷ số Amihud trải rộng qua nhiều bậc độ lớn. Lợi nhuận danh mục trọng số theo vốn hóa ít bị nhiễm hơn lợi nhuận trọng số bằng nhau.
Các hiệu chỉnh beta Dimson và Scholes-Williams xử lý hiệu quả thiên lệch giao dịch không đồng bộ và nên được dùng làm bộ ước lượng beta mặc định cho cổ phiếu Việt Nam.
Các bộ lọc thanh khoản nên được áp dụng trước mọi phân tích định giá tài sản, và kết quả nên được báo cáo có và không có các bộ lọc này như một kiểm tra độ vững.
Việc bỏ qua các ma sát này không chỉ thêm nhiễu vào kết quả thực nghiệm, nó làm chệch các ước lượng một cách có hệ thống theo những hướng có thể dự đoán. Các chẩn đoán và hiệu chỉnh trình bày trong chương này tạo nền tảng cho nghiên cứu định giá tài sản thực nghiệm đáng tin cậy tại Việt Nam.
Amihud, Yakov. 2002. “Illiquidity and stock returns: cross-section and time-series effects”. Journal of financial markets 5 (1): 31–56. https://doi.org/10.1016/S1386-4181(01)00024-6.
Bali, Turan G, Robert F Engle, và Scott Murray. 2016. Empirical asset pricing: The cross section of stock returns. John Wiley & Sons.
Barber, Brad M, Yi-Tsung Lee, Yu-Jane Liu, và Terrance Odean. 2009. “Just how much do individual investors lose by trading?”The Review of Financial Studies 22 (2): 609–32.
Bessembinder, Hendrik. 2003. “Trade execution costs and market quality after decimalization”. Journal of Financial and Quantitative Analysis 38 (4): 747–77.
Chu, Xiaojun, và Jianying Qiu. 2019. “Forecasting volatility with price limit hits—Evidence from Chinese stock market”. Emerging Markets Finance and Trade 55 (5): 1034–50.
Comerton-Forde, Carole, và Kar Mei Tang. 2009. “Anonymity, liquidity and fragmentation”. Journal of Financial Markets 12 (3): 337–67.
Dimson, Elroy. 1979. “Risk measurement when shares are subject to infrequent trading”. Journal of financial economics 7 (2): 197–226. https://doi.org/10.1016/0304-405X(79)90013-8.
Fama, Eugene F., và Kenneth R. French. 1989. “Business conditions and expected returns on stocks and bonds”. Journal of Financial Economics 25 (1): 23–49. https://doi.org/10.1016/0304-405X(89)90095-0.
Glosten, Lawrence R, và Paul R Milgrom. 1985. “Bid, ask and transaction prices in a specialist market with heterogeneously informed traders”. Journal of financial economics 14 (1): 71–100. https://doi.org/10.1016/0304-405X(85)90044-3.
Goyenko, Ruslan Y, Craig W Holden, và Charles A Trzcinka. 2009. “Do liquidity measures measure liquidity?”Journal of financial Economics 92 (2): 153–81.
Goyenko, Ruslan Y, và Andrey D Ukhov. 2009. “Stock and bond market liquidity: A long-run empirical analysis”. Journal of Financial and Quantitative Analysis 44 (1): 189–212.
Harris, Lawrence. 1991. “Stock price clustering and discreteness”. The Review of Financial Studies 4 (3): 389–415. https://doi.org/10.1093/rfs/4.3.389.
Hasbrouck, Joel. 2007. Empirical market microstructure: The institutions, economics, and econometrics of securities trading. Oxford University Press.
Hillion, Pierre, và Matti Suominen. 2004. “The manipulation of closing prices”. Journal of Financial Markets 7 (4): 351–75.
Hirshleifer, David, Ming Jian, và Huai Zhang. 2018. “Superstition and financial decision making”. Management Science 64 (1): 235–52. https://doi.org/10.1287/mnsc.2016.2584.
Huang, Roger D, và Hans R Stoll. 1997. “The components of the bid-ask spread: A general approach”. The Review of Financial Studies 10 (4): 995–1034.
Kaniel, Ron, Shuming Liu, Gideon Saar, và Sheridan Titman. 2012. “Individual investor trading and return patterns around earnings announcements”. The Journal of Finance 67 (2): 639–80.
Kyle, Albert S. 1985. “Continuous auctions and insider trading”. Econometrica: Journal of the Econometric Society 53 (6): 1315–35. https://doi.org/10.2307/1913210.
Lo, Andrew W, và A Craig MacKinlay. 1990. “An econometric analysis of nonsynchronous trading”. Journal of Econometrics 45 (1-2): 181–211.
Pástor, L’uboš, và Robert F Stambaugh. 2003. “Liquidity risk and expected stock returns”. Journal of Political economy 111 (3): 642–85. https://doi.org/10.1086/374184.
Scholes, Myron, và Joseph Williams. 1977. “Estimating betas from nonsynchronous data”. Journal of financial economics 5 (3): 309–27. https://doi.org/10.1016/0304-405X(77)90041-1.
Subrahmanyam, Avanidhar. 1994. “Circuit breakers and market volatility: A theoretical perspective”. The Journal of Finance 49 (1): 237–54.
# Vi cấu trúc thị trường tại Việt Nam::: callout-noteTrong chương này, chúng ta xem xét cách thiết kế thể chế của thị trường cổ phiếu Việt Nam, chẳng hạn như các phiên giao dịch, biên độ giá, các loại lệnh và cơ cấu nhà đầu tư, định hình giá, lợi nhuận và thanh khoản quan sát được. Chúng ta định lượng các ma sát vi cấu trúc và chỉ ra vì sao việc bỏ qua các ma sát này dẫn đến suy luận bị chệch trong các kiểm định định giá tài sản.:::Vi cấu trúc thị trường là lĩnh vực nghiên cứu cách các quy tắc giao dịch, cơ chế xử lý lệnh và thiết kế thị trường ảnh hưởng đến quá trình hình thành giá, chi phí giao dịch và thanh khoản. Lĩnh vực này, được đặt nền móng bởi @kyle1985continuous, @glosten1985bid và @hasbrouck2007empirical, cung cấp bộ công cụ phân tích để hiểu vì sao giá quan sát được có thể lệch khỏi giá trị cơ bản và lệch trong bao lâu.Ở các thị trường phát triển với giao dịch điện tử liên tục, nhà tạo lập thị trường chỉ định và rất ít ràng buộc pháp lý đối với biến động giá, các ma sát vi cấu trúc thường chỉ là mối quan tâm bậc hai đối với các nhà nghiên cứu làm việc ở tần suất tháng hoặc thấp hơn. Ở thị trường cổ phiếu Việt Nam, điều này hoàn toàn không đúng. Biên độ giá hằng ngày, giao dịch thưa thớt, cơ sở nhà đầu tư chủ yếu là cá nhân, bước giá rời rạc và việc thiếu các cơ chế tạo lập thị trường chính thức tạo ra những ma sát lan truyền vào lợi nhuận hằng tháng, làm méo hệ số tải nhân tố và làm chệch suy luận ở cấp danh mục đầu tư. Vì vậy, mọi phân tích thực nghiệm nghiêm túc về cổ phiếu Việt Nam phải bắt đầu bằng việc đánh giá cẩn thận vi cấu trúc thị trường.Chương này thực hiện việc đánh giá đó. Trước tiên, chúng ta mô tả kiến trúc thể chế của giao dịch cổ phiếu Việt Nam. Sau đó, chúng ta xây dựng các chẩn đoán cho những ma sát có tác động lớn nhất, chẳng hạn như việc chạm biên độ giá, ngày có lợi nhuận bằng không, phi thanh khoản và giao dịch không đồng bộ, và định lượng mức độ nghiêm trọng của chúng theo mặt cắt ngang các doanh nghiệp niêm yết. Cuối cùng, chúng ta rút ra hướng dẫn thực tiễn để điều chỉnh việc xây dựng danh mục đầu tư và các kiểm định định giá tài sản.## Vi cấu trúc thị trường là gì?Giả định trong sách giáo khoa về thị trường không ma sát hàm ý rằng giá phản ánh thông tin một cách liên tục và không tốn chi phí. Theo giả định này, lợi nhuận quan sát được của bất kỳ tài sản nào ở bất kỳ tần suất nào đều bằng lợi nhuận "thực" do các yếu tố cơ bản quyết định. Vi cấu trúc thị trường nới lỏng giả định này bằng cách thừa nhận rằng giá được tạo ra bởi một quá trình giao dịch cụ thể với các chi phí, ràng buộc và điểm không hoàn hảo có thật.Khung phân tích kinh điển của @kyle1985continuous mô hình hóa một thị trường với ba loại người tham gia:1. một nhà giao dịch có thông tin biết giá trị cơ bản của tài sản,2. các nhà giao dịch nhiễu giao dịch vì lý do thanh khoản, và3. một nhà tạo lập thị trường đặt giá sao cho hòa vốn theo kỳ vọng.Điểm mấu chốt là nhà tạo lập thị trường không thể phân biệt dòng lệnh có thông tin với dòng lệnh không có thông tin, do đó giá điều chỉnh dần dần theo thông tin, tạo ra một khoảng chênh giữa giá giao dịch và giá trị cơ bản. Độ lớn của khoảng chênh này (chênh lệch giá mua–bán) và tốc độ điều chỉnh giá (độ sâu thị trường) là các đối tượng cốt lõi của lý thuyết vi cấu trúc.@glosten1985bid mở rộng khung phân tích này sang bối cảnh giao dịch tuần tự và chỉ ra rằng chênh lệch giá mua–bán gồm hai thành phần: thành phần lựa chọn bất lợi (khoản bù đắp cho việc giao dịch với các nhà giao dịch có thông tin) và thành phần xử lý lệnh (khoản bù đắp cho các chi phí cơ học của giao dịch). @huang1997components tiếp tục phân tách chênh lệch giá thành các thành phần chênh lệch thực hiện và tác động giá. Những phân tách này quan trọng vì chúng cho thấy các nguồn chi phí giao dịch khác nhau và có hàm ý khác nhau đối với chất lượng thị trường.Đối với định giá tài sản thực nghiệm, câu hỏi then chốt là: ở tần suất nào và trong điều kiện nào thì các tác động vi cấu trúc trở nên không đáng kể? Ở các thị trường có thanh khoản cao, @bali2016empirical lập luận rằng lợi nhuận hằng tháng phần lớn không bị nhiễm tác động vi cấu trúc. Ở Việt Nam, như chúng ta sẽ chứng minh dưới đây, điều này không đúng. Các tác động vi cấu trúc vẫn tồn tại ở tần suất tháng và thậm chí quý đối với một tỷ lệ đáng kể các doanh nghiệp niêm yết.### Mối liên hệ giữa vi cấu trúc và định giá tài sảnMối liên hệ giữa vi cấu trúc và định giá tài sản thể hiện qua nhiều kênh. Thứ nhất, bản thân phi thanh khoản có thể là một nhân tố rủi ro được định giá. @amihud2002illiquidity chỉ ra rằng phi thanh khoản kỳ vọng có quan hệ cùng chiều với lợi nhuận cổ phiếu kỳ vọng, hàm ý một phần bù thanh khoản. @pastor2003liquidity xây dựng một mô hình cân bằng trong đó rủi ro thanh khoản (tức là hiệp phương sai giữa thanh khoản của một cổ phiếu với thanh khoản thị trường) đòi hỏi một phần bù rủi ro. Thứ hai, nhiễu vi cấu trúc trong giá làm chệch các beta, hệ số tải nhân tố và thống kê kiểm định được ước lượng. @scholes1977estimating là những người đầu tiên nhận diện sai lệch này trong bối cảnh giao dịch không đồng bộ, và @dimson1979risk đề xuất bộ ước lượng hệ số tổng hợp để hiệu chỉnh. Thứ ba, biên độ giá và các ràng buộc quản lý khác kiểm duyệt phân phối lợi nhuận, gây ra thiên lệch cắt cụt trong các ước lượng biến động, các moment của lợi nhuận và các thống kê giá trị cực trị [@kim1997price].@tbl-microstructure-interface tóm tắt các kênh này và hệ quả thực nghiệm của chúng.| Kênh | Cơ chế | Hệ quả thực nghiệm ||--------------------|------------------|----------------------------------|| Phần bù phi thanh khoản | Bù đắp cho việc gánh chịu chi phí giao dịch và rủi ro tồn kho | Khả năng dự báo lợi nhuận theo mặt cắt ngang bằng các thước đo thanh khoản || Giao dịch không đồng bộ | Giao dịch không thường xuyên tạo ra giá lỗi thời | Beta bị chệch xuống, tương quan bị suy giảm và quan hệ dẫn–trễ giả tạo || Biên độ giá | Quy định kiểm duyệt lợi nhuận hằng ngày | Phân phối lợi nhuận bị cắt cụt, lan truyền biến động và tự tương quan nhân tạo || Bước giá rời rạc | Giá bị ràng buộc vào một lưới | Nảy giá mua–bán, tính rời rạc của lợi nhuận, biến động bị chệch || Cơ cấu nhà đầu tư | Dòng lệnh do nhà đầu tư cá nhân chi phối | Giao dịch nhiễu, hành vi bầy đàn, định giá theo tâm lý |: Các kênh mà vi cấu trúc tác động đến định giá tài sản {#tbl-microstructure-interface}## Kiến trúc giao dịch tại Việt NamViệt Nam vận hành hai sở giao dịch chứng khoán: Sở Giao dịch Chứng khoán TP. Hồ Chí Minh (HOSE), thành lập năm 2000, và Sở Giao dịch Chứng khoán Hà Nội (HNX), thành lập năm 2005. HOSE niêm yết các doanh nghiệp lớn hơn và chiếm phần lớn vốn hóa thị trường và khối lượng giao dịch. HNX niêm yết các doanh nghiệp nhỏ hơn và cũng vận hành Thị trường Giao dịch Cổ phiếu của Công ty đại chúng chưa niêm yết (UPCoM) dành cho các doanh nghiệp chưa đáp ứng đầy đủ điều kiện niêm yết. Cả ba sàn đều vận hành hệ thống sổ lệnh giới hạn điện tử không có nhà tạo lập thị trường chỉ định.### Đặc điểm của các sàn giao dịch@tbl-exchange-comparison trình bày những khác biệt cấu trúc chính giữa HOSE, HNX và UPCoM. Những khác biệt này có hàm ý trực tiếp đối với thanh khoản, khám phá giá và mức độ nghiêm trọng của các ma sát vi cấu trúc.| Đặc điểm | HOSE | HNX | UPCoM ||-------------------|------------------|------------------|------------------|| Năm thành lập | 2000 | 2005 | 2009 || Nhóm niêm yết | Vốn hóa lớn | Vốn hóa vừa/nhỏ | Chưa niêm yết || Biên độ giá hằng ngày | $\pm$ 7% | $\pm$ 10% | $\pm$ 15% || Chế độ bước giá | Phân tầng theo giá | Phân tầng theo giá | 100 VND || Lô giao dịch | 100 cổ phiếu | 100 cổ phiếu | 100 cổ phiếu || Bán khống | Hạn chế | Không có | Không có || Giới hạn sở hữu nước ngoài | Theo ngành | Theo ngành | Theo ngành |: So sánh các sàn giao dịch: HOSE, HNX và UPCoM {#tbl-exchange-comparison}Các biên độ giá không đồng nhất giữa các sàn tạo ra một thí nghiệm tự nhiên để nghiên cứu tác động của biên độ giá. Biên độ $\pm$ 7% chặt hơn của HOSE có nghĩa là cổ phiếu vốn hóa lớn bị ràng buộc thường xuyên hơn cổ phiếu vốn hóa vừa trên HNX, với cùng một cú sốc thông tin. Biên độ $\pm$ 15% rộng hơn của UPCoM tạo ra môi trường ít ràng buộc nhất, mặc dù cổ phiếu trên sàn này cũng kém thanh khoản nhất.### Các phiên giao dịchMỗi sàn vận hành một ngày giao dịch có cấu trúc với các phiên riêng biệt. Việc hiểu cấu trúc phiên là thiết yếu vì cơ chế hình thành giá khác nhau giữa các phiên, và một số phiên đặc biệt quan trọng đối với giá tham chiếu (@tbl-trading-sessions).| Phiên | Thời gian | Cơ chế | Vai trò khám phá giá ||---|---|---|---|| Trước giờ mở cửa | 08:30–09:00 | Chỉ nhập lệnh, không khớp | Cho thấy cầu/cung trước giờ mở cửa || Phiên mở cửa (ATO) | 09:00–09:15 | Khớp lệnh định kỳ, một mức giá | Xác định giá mở cửa từ các lệnh tích lũy || Khớp lệnh liên tục (buổi sáng) | 09:15–11:30 | Khớp lệnh giới hạn liên tục | Khám phá giá chính || Nghỉ trưa | 11:30–13:00 | Không giao dịch | — || Khớp lệnh liên tục (buổi chiều) | 13:00–14:30 | Khớp lệnh giới hạn liên tục | Khám phá giá chính || Phiên đóng cửa (ATC) | 14:30–14:45 | Khớp lệnh định kỳ, một mức giá | Xác định giá đóng cửa (giá tham chiếu) || Sau giờ đóng cửa | 14:45–15:00 | Giao dịch thỏa thuận | Giao dịch khối lượng lớn và giao dịch thỏa thuận |: Cấu trúc phiên giao dịch trên HOSE {#tbl-trading-sessions}Phiên đóng cửa (ATC) đáng được chú ý đặc biệt. Giá ATC là giá đóng cửa chính thức dùng để tính chỉ số, tính giá trị tài sản ròng (NAV) và xác định yêu cầu ký quỹ. Vì được xác định bằng một phiên khớp lệnh định kỳ với một mức giá duy nhất, giá này có thể bị thao túng bởi các lệnh được đặt đúng thời điểm một cách có chủ đích, một hiện tượng đã được ghi nhận ở nhiều thị trường mới nổi [@comerton2009anonymity; @hillion2004manipulation]. Các nhà nghiên cứu sử dụng giá đóng cửa hằng ngày cần lưu ý rằng giá ATC có thể không phản ánh trạng thái cân bằng của phiên khớp lệnh liên tục, đặc biệt đối với các cổ phiếu kém thanh khoản mà một lệnh lớn duy nhất có thể làm dịch chuyển giá đóng cửa.### Các loại lệnh và quy tắc khớp lệnhCác sàn giao dịch Việt Nam hỗ trợ một tập hợp loại lệnh hạn chế so với các thị trường phát triển (@tbl-order-types).| Loại lệnh | Mô tả | Khả năng áp dụng ||-----------------------|-------------------------|-------------------------|| Lệnh giới hạn (LO) | Chỉ định giá và khối lượng | Mọi phiên || Lệnh thị trường (ATO/ATC) | Khớp tại giá của phiên khớp lệnh định kỳ | Chỉ các phiên khớp lệnh định kỳ || Lệnh thị trường giới hạn (MTL) | Chuyển thành lệnh giới hạn tại giá tốt nhất hiện có | Chỉ trên HNX |: Các loại lệnh hiện có {#tbl-order-types}Việc không có lệnh tảng băng chìm (iceberg), lệnh dừng và lệnh ẩn có nghĩa là toàn bộ sổ lệnh giới hạn hiển thị với mọi người tham gia. Dù điều này làm tăng tính minh bạch trước giao dịch, nó cũng có nghĩa là các lệnh lớn của nhà đầu tư tổ chức đối mặt với rủi ro rò rỉ thông tin đáng kể, có thể làm nản lòng sự tham gia của các tổ chức và làm giảm độ sâu thị trường.Các lệnh được khớp theo nguyên tắc ưu tiên nghiêm ngặt về giá–thời gian trong các phiên liên tục. Trong các phiên khớp lệnh định kỳ, một giá cân bằng duy nhất được xác định sao cho tối đa hóa khối lượng khớp. Nếu có nhiều mức giá thỏa mãn tiêu chí này, mức giá gần nhất với giá đóng cửa trước đó được chọn.### Cấu trúc bước giáBước giá trên HOSE được phân tầng theo mức giá, điều này tạo ra những gián đoạn trong chênh lệch giá mua–bán tính theo phần trăm của giá (@tbl-tick-sizes).| Khoảng giá (VND) | Bước giá (VND) | Chênh lệch tối thiểu theo % của giá trung điểm ||---|---|---|| < 10,000 | 10 | 0.10% tại 10,000 || 10,000–49,900 | 50 | 0.10% tại 50,000 || ≥ 50,000 | 100 | 0.20% tại 50,000 |: Biểu bước giá trên HOSE {#tbl-tick-sizes}Việc nhảy từ bước giá 50 VND lên bước giá 100 VND tại ngưỡng 50,000 VND có nghĩa là chênh lệch phần trăm tối thiểu tăng gấp đôi một cách gián đoạn. Điều này tạo ra một "vách đá bước giá" có thể ảnh hưởng đến phân phối theo mặt cắt ngang của chênh lệch giá mua–bán và do đó ảnh hưởng đến việc đo lường phi thanh khoản [@vo2023minimum]. @bessembinder2003trade ghi nhận các tác động tương tự ở những thị trường khác có cấu trúc bước giá phân tầng.### Cơ cấu nhà đầu tưThị trường cổ phiếu Việt Nam chủ yếu do nhà đầu tư cá nhân chi phối. Trong khi các nhà đầu tư tổ chức nước ngoài chiếm một tỷ trọng đáng kể trong vốn hóa thị trường (đặc biệt ở các cổ phiếu blue-chip chịu giới hạn sở hữu nước ngoài), khối lượng giao dịch hằng ngày lại chủ yếu đến từ các tài khoản cá nhân trong nước.```{python}#| label: fig-investor-composition#| include: false#| fig-cap: "Cơ cấu nhà đầu tư xấp xỉ theo giá trị giao dịch trên HOSE"import matplotlib.pyplot as pltimport numpy as npcategories = ["Domestic Retail","Domestic Institutional","Foreign Institutional","Foreign Retail"]shares = [85, 5, 8, 2]colors = ["#2C73D2", "#0089BA", "#00B7C7", "#5DCEAF"]fig, ax = plt.subplots(figsize=(6.5, 4))bars = ax.barh(categories, shares, color=colors, edgecolor="white", height=0.6)for bar, share inzip(bars, shares): ax.text( bar.get_width() +1, bar.get_y() + bar.get_height() /2,f"{share}%", va="center", fontsize=10 )ax.set_xlabel("Share of Trading Value (%)")ax.set_xlim(0, 100)ax.spines["top"].set_visible(False)ax.spines["right"].set_visible(False)plt.tight_layout()plt.show()```Sự chi phối của nhà đầu tư cá nhân này kéo theo nhiều hệ quả đối với vi cấu trúc. Thứ nhất, nhà đầu tư cá nhân có xu hướng đặt lệnh nhỏ hơn và giao dịch thường xuyên hơn, tạo ra tỷ lệ thông điệp trên giao dịch cao nhưng độ sâu hạn chế tại mỗi mức giá. Thứ hai, dòng lệnh của nhà đầu tư cá nhân dễ bị ảnh hưởng bởi hành vi bầy đàn và tâm lý hơn, điều có thể khuếch đại động lượng và tạo ra biến động quá mức [@barber2009just; @kaniel2012individual]. Thứ ba, sự hiện diện hạn chế của các tổ chức có nghĩa là việc cung cấp thanh khoản chuyên nghiệp khan hiếm, đặc biệt ở các cổ phiếu vốn hóa vừa và nhỏ.## Giá nào được chọn: sở thích chữ số và mê tín {#sec-micro-superstition}Biểu bước giá trong @tbl-tick-sizes xác định những mức giá nào là *có thể*. Nó không xác định mức giá nào trong số đó được *chọn*. Nếu các nhà giao dịch bàng quan giữa các điểm lưới liền kề, chữ số cuối của giá giao dịch sẽ xấp xỉ phân phối đều mỗi khi giá trải qua nhiều bước giá, do đó mọi độ lệch có hệ thống khỏi phân phối đều là bằng chứng về cách giá được đặt ra. Đây là một chẩn đoán cổ điển trong vi cấu trúc. @harris1991stock ghi nhận rằng giá cổ phiếu tụ lại ở các phân số tròn, nhiều hơn ở các cổ phiếu giá cao và biến động mạnh hơn, và diễn giải hiện tượng tụ giá là việc các nhà giao dịch tiết kiệm chi phí thương lượng bằng cách dùng một lưới hiệu dụng thô hơn mức sàn giao dịch yêu cầu. @christie1994nasdaq dùng cùng đối tượng đó cho một mục đích sắc bén hơn: việc các nhà tạo lập thị trường NASDAQ gần như hoàn toàn tránh các mức chào giá lẻ một phần tám ở các cổ phiếu giao dịch sôi động không thể được giải thích bằng chi phí thương lượng mà chỉ ra sự thông đồng ngầm nhằm nới rộng chênh lệch giá. Trong cả hai trường hợp, phân phối của chữ số cuối là dấu vết của quá trình hình thành giá, có thể khôi phục chỉ từ một chuỗi giá.Văn hóa cung cấp một lý do cho sở thích chữ số mà không liên quan gì đến thương lượng hay thông đồng. Trong tiếng Trung, số 8 là may mắn vì cách phát âm gợi đến sự thịnh vượng, còn số 4 là xui xẻo vì nghe giống từ chỉ cái chết. @hirshleifer2018superstition chỉ ra rằng các công ty Trung Quốc phát hành lần đầu ra công chúng (IPO) nhận được mã niêm yết may mắn thường xuyên hơn mức ngẫu nhiên cho phép, giao dịch với một mức giá cao hơn (có phần bù) và sau đó có kết quả kém hơn. @bhattacharya2018superstitious thấy rằng trên thị trường hợp đồng tương lai chỉ số của Đài Loan, các nhà đầu tư cá nhân đặt lệnh giới hạn tại mức giá tận cùng bằng 8 nhiều hơn một cách không cân xứng so với mức tận cùng bằng 4, trong khi các tổ chức thì không, và những nhà giao dịch mê tín bị thua lỗ. Cả hai bài báo đều xác định sự mê tín nằm ở những người tham gia là nhà đầu tư cá nhân trong một thị trường duy nhất.### Mê tín ở khắp nơi {#sec-micro-superstition-evidence}@chang2026superstition đặt ra hai câu hỏi rộng hơn: liệu cùng một sở thích chữ số có xuất hiện trong giá của mọi lớp tài sản chính của Trung Quốc, kể cả những lớp được giao dịch gần như hoàn toàn bởi các tổ chức hay không, và liệu sự hiện diện của nó có hàm ý định giá sai hay không. Cách đo lường của các tác giả theo quy ước đọc của người Trung Quốc, theo đó chữ số *khác không* cuối cùng của một mức giá niêm yết là chữ số được tính. Mức giá 20.58 tận cùng bằng 8; mức giá 20.50 được đọc là 20.5 và tận cùng bằng 5. Do đó, thống kê cốt lõi là một xác suất có điều kiện,$$H_d = \Pr\left(\text{hundredths digit} = d \;\middle|\; \text{hundredths digit} \neq 0\right), \qquad d = 1, \dots, 9,$$ {#eq-micro-digit-prob}bằng $1/9 \approx 11.1\%$ với mọi $d$ khi chữ số cuối được quyết định ngẫu nhiên. Phép kiểm định xem xét liệu $H_8$ có nằm trên $1/9$ và $H_4$ có nằm dưới mức này hay không. Các công cụ được niêm yết với nhiều chữ số thập phân hơn được xử lý theo cùng cách tại vị trí cuối cùng của chúng: chữ số thập phân thứ tư đối với tỷ giá hối đoái, đơn vị số nguyên đối với hợp đồng tương lai hàng hóa. Các hợp đồng hàng hóa có bước giá tối thiểu không cho phép xuất hiện đủ mười chữ số cuối sẽ bị loại bỏ thay vì được hiệu chỉnh, vì trên một lưới có bước 5, chữ số cuối chỉ có thể là 0 hoặc 5.Hiệu ứng này hóa ra phổ biến rộng khắp. Các độ lớn dưới đây lấy từ phiên bản bài thảo luận (working paper) của các tác giả và có thể khác đôi chút so với bài báo đã xuất bản.- **IPO.** Từ năm 1995 đến tháng 6 năm 2014, khi giá IPO được đặt ra với sự tham gia đáng kể của thị trường, $H_8 = 33.2\%$ và $H_4 = 4.6\%$. Sở thích này mạnh đến mức xuất hiện ngay cả ở vị trí phần mười trong số các mức giá IPO tận cùng ở đó ($23.0\%$ so với $6.2\%$). Nó biến mất ngay khi trần P/E mang tính ràng buộc theo quy định có hiệu lực vào tháng 7 năm 2014 và thị trường không còn đặt giá: trong giai đoạn kiểm soát chặt, cả $H_8$ lẫn $H_4$ đều không khác $1/9$ một cách có ý nghĩa thống kê.- **Phát hành bổ sung.** Các đợt phát hành riêng lẻ, được đàm phán với tối đa mười nhà đầu tư, cho thấy hiệu ứng nhỏ hơn nhưng bền vững ($13.9\%$ so với $8.2\%$).- **Giá cổ phiếu trên thị trường thứ cấp.** Giá mở cửa, được xác định bằng khớp lệnh định kỳ, cho thấy $H_8 = 13.6\%$ và $H_4 = 8.6\%$, còn giá đóng cửa xác định bằng khớp lệnh định kỳ cho thấy $12.4\%$ so với $9.9\%$. Giá đóng cửa được tính bằng bình quân gia quyền theo khối lượng của các giao dịch trong phút cuối cùng, quy tắc áp dụng trước khi mỗi sàn đưa vào phiên khớp lệnh đóng cửa, không cho thấy hiệu ứng ($11.5\%$ so với $10.9\%$), và khoảng cách giữa $H_8$ và $H_4$ mở ra ngay sau khi mỗi sàn chuyển đổi cơ chế.- **Trái phiếu.** Lãi suất coupon phát hành không cho thấy hiệu ứng đối với trái phiếu kho bạc, trái phiếu ngân hàng chính sách hay trái phiếu chính quyền địa phương, nhưng có hiệu ứng mạnh đối với các trái phiếu mang rủi ro tín dụng. Hiệu ứng tăng dần từ trái phiếu tài chính ($17.6\%$ so với $7.1\%$) đến trái phiếu doanh nghiệp phi tài chính phát hành công khai ($20.3\%$ so với $7.4\%$) rồi đến trái phiếu doanh nghiệp phi tài chính phát hành riêng lẻ ($24.2\%$ so với $5.2\%$), và trong mỗi nhóm, hiệu ứng mạnh lên khi xếp hạng giảm, đạt $30.6\%$ so với $3.5\%$ đối với trái phiếu phát hành riêng lẻ xếp hạng dưới AAA. Hiệu ứng mạnh hơn ở trái phiếu phát hành trên thị trường giao dịch tập trung so với thị trường liên ngân hàng chỉ dành cho tổ chức, nhưng có mặt ở cả hai.- **Tỷ giá hối đoái và hàng hóa.** Tỷ giá đóng cửa liên ngân hàng của đô la Mỹ, euro, yên và đô la Hồng Kông so với nhân dân tệ đều cho thấy hiệu ứng. Tỷ giá mở cửa, vốn được neo theo tỷ giá trung tâm do ngân hàng trung ương công bố, thì không. Giá mở cửa gộp của 29 hợp đồng tương lai hàng hóa cho thấy $13.7\%$ so với $8.7\%$.Thiết kế nghiên cứu này thuyết phục không phải vì một con số đơn lẻ nào mà vì các phép thử giả (placebo) được xây dựng sẵn trong đó. Ở đâu giá được đặt một cách cơ học, bằng công thức của cơ quan quản lý, tỷ giá trung tâm hoặc một số trung bình cộng, thì hiệu ứng biến mất. Ở đâu giá được đặt bằng cách tổng hợp các mức giá mà mọi người đệ trình, thì hiệu ứng xuất hiện. Một sở thích văn hóa không thể tồn tại qua phép lấy trung bình, và cũng không thể vận hành ở nơi không ai chọn giá.### Vì sao nhà đầu tư sành sỏi cũng làm vậy {#sec-micro-superstition-mechanism}Sự hiện diện của hiệu ứng trên thị trường trái phiếu liên ngân hàng, một thị trường bán buôn của các ngân hàng và tổ chức lớn, là phát hiện đáng ngạc nhiên nhất của bài báo. Nó buộc phải phân biệt hai cơ chế.Cơ chế thứ nhất là **neo giá trong điều kiện mơ hồ**. Không mô hình định giá nào xác định giá chính xác đến từng bước giá cuối cùng. Nếu phân tích cẩn thận chỉ có thể thu hẹp lợi suất của một trái phiếu vào khoảng giữa 5.52% và 5.62%, thì mọi điểm trong khoảng đó đều có thể bào chữa được, và một điểm hội tụ được chia sẻ về mặt văn hóa như 5.58% giúp người mua và người bán dễ chốt giao dịch hơn. Đây là hành vi dùng điểm tham chiếu của @tversky1974judgment được áp dụng cho một khoảng mà các yếu tố cơ bản để ngỏ. Cơ chế này dự báo hiệu ứng mạnh hơn ở nơi giá trị mơ hồ hơn (trái phiếu có rủi ro tín dụng thay vì trái phiếu chính phủ, IPO thay vì các đợt phát hành bổ sung, xếp hạng thấp thay vì cao), đúng như quy luật nêu trên. Trên thị trường cổ phiếu thứ cấp, các tác giả kiểm định trực tiếp dự báo này. Sử dụng thước đo mơ hồ của @brenner2018asset, được xây dựng từ biến thiên theo từng tháng trong phân phối lợi nhuận hằng ngày ước lượng của một cổ phiếu, các tác giả thấy rằng trong dữ liệu bảng doanh nghiệp–năm với hiệu ứng cố định theo doanh nghiệp và theo năm, mức mơ hồ cao hơn dự báo nhiều giá khớp lệnh định kỳ may mắn hơn và ít giá xui xẻo hơn, khi giữ biến động lợi nhuận không đổi. Chính sự mơ hồ, chứ không phải rủi ro, dự báo chữ số.Cơ chế thứ hai là **sự quá lạc quan của các nhà đầu tư thiếu kinh nghiệm**. Những nhà đầu tư vốn đã hào hứng với một tài sản sẽ chọn con số may mắn như một cách biểu lộ sự hào hứng đó. Cơ chế này dự báo hiệu ứng mạnh hơn ở nơi sự lạc quan có khả năng cao, và các tác giả tìm thấy điều đó: trong các IPO, $H_8$ tăng từ $29.3\%$ ở nhóm P/E thấp nhất lên $46.0\%$ ở nhóm cao nhất, trong khi các đợt phát hành riêng lẻ, nơi người mua là nhà đầu tư chuyên nghiệp, không cho thấy độ dốc như vậy. Trong dữ liệu bảng thị trường thứ cấp, tỷ số giá trị sổ sách trên giá trị thị trường thấp hơn dự báo hiệu ứng mạnh hơn.Hai cơ chế này mang hàm ý khác nhau đối với giá, và đây là điều giúp bài báo xứng đáng có chỗ đứng trong một chương về vi cấu trúc. Neo giá chọn một điểm từ một khoảng mà các yếu tố cơ bản đã xác định, nên không để lại định giá sai có hệ thống. Còn sự quá lạc quan thì hẳn sẽ để lại một mức định giá sai nhất định. Bằng chứng khớp với điều đó.- Trong các hồi quy Fama-MacBeth của lợi nhuận hằng tháng điều chỉnh theo thị trường trong ba năm sau khi niêm yết, các IPO được định giá với chữ số cuối là 8 có kết quả kém hơn khoảng $0.47\%$ mỗi tháng trong giai đoạn định giá linh hoạt, tức khoảng 15% tích lũy. Hệ số này không có ý nghĩa thống kê trong giai đoạn kiểm soát chặt và đối với các đợt phát hành riêng lẻ.- Trên thị trường thứ cấp, một danh mục mua nhóm ngũ phân vị cổ phiếu có mức chênh lệch nhỏ nhất của số lần đóng cửa khớp lệnh định kỳ may mắn so với xui xẻo trong tháng trước, và bán khống nhóm ngũ phân vị có mức chênh lớn nhất, đạt alpha ba nhân tố Fama-French khoảng $0.48\%$ mỗi tháng trong nhóm cổ phiếu nhỏ. Danh mục này không tạo ra alpha nào trong nhóm cổ phiếu lớn, mặc dù cổ phiếu lớn cũng cho thấy hiệu ứng chữ số, và cũng không tạo ra alpha nào khi giá đóng cửa là bình quân gia quyền theo khối lượng.- Trong số các trái phiếu doanh nghiệp phi tài chính phát hành công khai trên thị trường giao dịch tập trung, một coupon may mắn gắn với chênh lệch lợi suất khi phát hành thấp hơn khoảng 5.4 điểm cơ bản, sau khi kiểm soát các đặc điểm của tổ chức phát hành và của trái phiếu. Không có mức chiết khấu như vậy ở thị trường liên ngân hàng hay ở trái phiếu phát hành riêng lẻ, nơi người mua là những nhà đầu tư sành sỏi nhất.Bài học tổng quát vượt xa chuyện mê tín: **dấu vết hành vi trong giá tự nó không phải là bằng chứng của định giá sai.** Sở thích chữ số có thể mạnh, rõ ràng về mặt thống kê, và hiện diện ở những thị trường do các chuyên gia chi phối mà không gây tổn thất cho ai, vì nó chỉ chọn trong số các mức giá phù hợp ngang nhau với các yếu tố cơ bản. Định giá sai chỉ xuất hiện ở nơi cùng dấu vết đó là triệu chứng của sự lạc quan ở những nhà đầu tư quyết định cả *mức* giá lẫn chữ số cuối của nó.### Ý nghĩa đối với nghiên cứu tại Việt Nam {#sec-micro-superstition-vietnam}The premise transfers to Vietnam, though not unchanged. Vietnamese numerology overlaps with the Chinese: 4 (*tứ*) is avoided for its closeness to *tử*, death, and 8 (*bát*) is favored for its association with *phát*, prosperity. The Vietnamese ranking differs, however, in ways that matter for test design. Nine is at least as favored as eight, 6 (*lộc*, fortune) is favored, two-digit endings such as 68, 39, and 79 carry meanings of their own, and 7 is avoided by some. The public auctions of vehicle license plates held since 2023, in which plates made of repeated favored digits have sold at very large premia, show that these preferences command real money. A study that imposes the Chinese 8-versus-4 contrast risks missing the main effect, so the first step should be a test of the full digit distribution against uniformity, followed by tests of digits named before the data are examined.Lưới bước giá quyết định chữ số nào có thể mang sở thích, và trên HOSE, lưới thay đổi theo mức giá (@tbl-tick-sizes). Giá được hiển thị theo nghìn đồng, do đó 25.35 nghĩa là 25,350 VND. Dưới 10,000 VND, bước giá là 10 VND, và chữ số cuối được hiển thị (hàng chục đồng) có thể nhận bất kỳ giá trị nào. Trong khoảng 10,000 đến 50,000 VND, bước giá là 50 VND, nên chữ số hàng chục chỉ có thể là 0 hoặc 5 và chữ số duy nhất tự do để biểu lộ sở thích là hàng trăm. Trên 50,000 VND, và trên UPCoM ở mọi mức giá, bước giá là 100 VND và chữ số hàng trăm lại là chữ số tự do. Do đó, phiên bản Việt Nam của @eq-micro-digit-prob phải được tính theo từng tầng, trên chữ số cuối mà lưới không ràng buộc, theo cùng tinh thần mà @chang2026superstition loại bỏ các hợp đồng hàng hóa có bước giá khiến một số chữ số không thể đạt tới. Gộp các tầng sẽ trộn một chữ số tự do với một chữ số bị ràng buộc và cho ra một phân phối không đều theo cấu trúc.Hai lực cơ học đặc thù của Việt Nam cũng phải được loại bỏ trước khi một chữ số có thể được đọc là lựa chọn của ai đó.**Giá trần và giá sàn là phép tính, không phải lựa chọn.** Một cổ phiếu đóng cửa tại giá trần hoặc giá sàn thì đóng cửa ở giá tham chiếu nhân với một cộng hoặc trừ biên độ, làm tròn theo bước giá, nên chữ số cuối của nó được quyết định bởi giá hôm qua chứ không phải do ai chọn hôm nay. Việc chạm biên độ xảy ra thường xuyên, đặc biệt ở các cổ phiếu nhỏ (@sec-price-limit-prevalence). Nếu không loại bỏ chúng, hiệu ứng bị pha loãng đúng ở phân khúc mà cơ chế quá lạc quan dự báo là mạnh nhất.**Quy tắc phá thế hòa của khớp lệnh định kỳ kéo giá về phía giá đóng cửa hôm qua.** Khi có nhiều mức giá cùng tối đa hóa khối lượng khớp, phiên khớp lệnh chọn mức giá gần nhất với giá đóng cửa trước đó, như đã mô tả ở phần các loại lệnh và quy tắc khớp lệnh ở trên. Do đó, chữ số cuối của giá đóng cửa trước đó là một điểm hút cơ học đối với giá khớp lệnh định kỳ hôm nay, và một phần của mọi sự bền vững theo ngày trong các chữ số là do quy tắc chứ không phải do sở thích. Việc điều kiện hóa theo chữ số cuối của giá tham chiếu giúp tách hai yếu tố này.Việt Nam cũng có một đối chứng tự nhiên với placebo làm cho bằng chứng Trung Quốc có sức thuyết phục. Giá mở cửa và đóng cửa trên HOSE được xác định bằng khớp lệnh định kỳ (@tbl-trading-sessions), cơ chế mà dưới đó sở thích chữ số vẫn tồn tại qua phép tổng hợp. Ngược lại, giá tham chiếu của UPCoM là bình quân gia quyền theo khối lượng của các giá khớp lệnh liên tục lô chẵn của ngày hôm trước, làm tròn theo bước giá: cơ chế lấy trung bình mà dưới đó hiệu ứng ở Trung Quốc biến mất. Một sở thích chữ số trong giá khớp lệnh định kỳ HOSE nhưng vắng mặt trong giá tham chiếu UPCoM là phiên bản Việt Nam của placebo của các tác giả, với điều kiện so sánh được thực hiện trên chữ số mà việc làm tròn theo lưới 100 VND để tự do.Các thị trường sơ cấp là nơi cơ chế quá lạc quan có thể được kiểm định sắc nét nhất. Các cuộc đấu giá cổ phần của doanh nghiệp nhà nước cổ phần hóa thu thập các giá thầu kín, và các kết quả được công bố, vốn báo cáo giá trúng thầu, cho một cái nhìn đầu tiên về mức giá mà người đấu thầu chọn. Trái phiếu doanh nghiệp phát hành riêng lẻ là một sự tương ứng còn sát hơn với kết quả mạnh nhất của Trung Quốc. Các điều khoản phát hành của chúng, gồm cả lãi suất coupon, được công bố trên trang thông tin trái phiếu doanh nghiệp chuyên biệt của Sở Giao dịch Chứng khoán Hà Nội. Trong giai đoạn bùng nổ 2019–2021, một tỷ lệ đáng kể các trái phiếu này do cá nhân mua, thường thông qua các kênh ngân hàng và công ty chứng khoán, và việc siết chặt năm 2022 đối với điều kiện để được coi là nhà đầu tư chuyên nghiệp có quyền mua chúng (Nghị định 65/2022/ND-CP) đã thay đổi mức độ sành sỏi của cơ sở người mua gần như chỉ sau một đêm. Khung phân tích của @chang2026superstition đưa ra hai dự báo có thể kiểm định: tỷ lệ coupon tận cùng bằng các chữ số được ưa chuộng sẽ giảm sau khi siết chặt, và các trái phiếu phát hành trước đó với coupon được ưa chuộng sẽ có kết quả tồi hơn trong làn sóng gia hạn và vỡ nợ thanh toán giai đoạn 2022–2023. Các cuộc đấu thầu trái phiếu chính phủ trên HNX, nơi người đấu thầu là ngân hàng và công ty bảo hiểm, đóng vai trò placebo phi rủi ro, nơi khung phân tích dự báo không có hiệu ứng.Từ đó rút ra bảy quy tắc thực tiễn.1. **Dùng giá thô, chưa điều chỉnh.** Việc điều chỉnh theo cổ tức và phát hành cổ phiếu nhân lại giá với các hệ số làm mất chữ số cuối. Mọi kiểm định chữ số phải được chạy trên giá giao dịch thực tế, điều mà nhiều sản phẩm dữ liệu không cung cấp theo mặc định.2. **Tính phân phối chữ số trong từng tầng bước giá, trên chữ số cuối mà lưới để tự do.** Không bao giờ gộp giá qua các ngưỡng 10,000 và 50,000 VND.3. **Loại bỏ các lần đóng cửa chạm biên độ, và điều kiện hóa theo chữ số cuối của giá tham chiếu.** Cả hai đều loại bỏ các chữ số do một quy tắc chứ không phải do một nhà đầu tư quyết định.4. **Kiểm định toàn bộ phân phối trước khi kiểm định các chữ số được nêu tên.** Báo cáo một kiểm định tính đồng đều trên mọi chữ số tự do, sau đó kiểm định các chữ số được chọn trước, chẳng hạn 8, 9 và 6 so với 4 và 7. Với chín chữ số, nhiều tầng bước giá và ba sàn giao dịch, logic kiểm định đa giả thuyết của @sec-factor-zoo-multiple-testing áp dụng ở quy mô nhỏ.5. **Để cơ chế hình thành giá thực hiện việc nhận diện.** So sánh giá khớp lệnh định kỳ trên HOSE với giá giao dịch trong phiên liên tục và với giá tham chiếu UPCoM. Một quy luật chung cho cả ba nhiều khả năng là sai lệch do dữ liệu hơn là một sở thích.6. **Tách biệt sự hiện diện với tác động lên giá.** Sở thích chữ số là một thực tế về cách giá được hình thành. Việc nó có gây tổn thất tiền bạc cho ai hay không là một câu hỏi riêng, được trả lời bằng các kiểm định lợi nhuận hoặc lợi suất trong đó chữ số là biến can thiệp, chạy trong các nhóm có mức độ sành sỏi khác nhau của nhà đầu tư.7. **Chú ý kích thước mẫu trên mỗi cổ phiếu.** Một chỉ số may mắn hằng tháng được xây dựng từ hai mươi lần đóng cửa, trong đó có một số lần chạm biên độ hoặc ngày không có giao dịch, sẽ nhiễu. Hãy yêu cầu một số lượng tối thiểu các giá khớp lệnh định kỳ hợp lệ, và so sánh thống kê thực hiện với phân phối của nó khi các chữ số được hoán vị ngẫu nhiên trong từng cổ phiếu.## Biên độ giá và hệ quảViệt Nam áp dụng biên độ giá hằng ngày đối với mọi cổ phiếu niêm yết. Giá của một cổ phiếu không thể dịch chuyển vượt quá một tỷ lệ phần trăm cố định so với giá đóng cửa của ngày hôm trước trong một ngày giao dịch. Các biên độ là $\pm$ 7% trên HOSE, $\pm$ 10% trên HNX và $\pm$ 15% trên UPCoM.### Khung lý thuyếtBiên độ giá được đưa ra với mục tiêu tuyên bố là giảm biến động và ngăn chặn sự sai lệch giá do hoảng loạn. Tuy nhiên, tài liệu học thuật cho thấy một bức tranh nhiều sắc thái hơn. Giả thuyết "hiệu ứng nam châm" [@subrahmanyam1994circuit] dự báo rằng biên độ giá trên thực tế lại làm tăng tốc dịch chuyển giá về phía biên khi các nhà giao dịch vội vàng thực hiện lệnh trước khi chạm biên. Giả thuyết "khám phá giá bị trì hoãn" [@Fama1989] lập luận rằng các biên độ chỉ hoãn lại những điều chỉnh giá không thể tránh khỏi, gây ra lan truyền biến động sang các ngày tiếp theo.Về mặt hình thức, gọi $P_t^*$ là giá cân bằng vào ngày $t$ và $P_{t-1}^c$ là giá đóng cửa trước đó. Lợi nhuận quan sát được là:$$r_t^{obs} = \begin{cases}\bar{L} & \text{if } r_t^* \geq \bar{L} \\r_t^* & \text{if } \underline{L} < r_t^* < \bar{L} \\\underline{L} & \text{if } r_t^* \leq \underline{L}\end{cases}$$ {#eq-price-limit}trong đó $r_t^* = \ln(P_t^* / P_{t-1}^c)$ là lợi nhuận tiềm ẩn (không bị ràng buộc), $\bar{L}$ là biên trên và $\underline{L}$ là biên dưới. Lợi nhuận quan sát được $r_t^{obs}$ là phiên bản bị kiểm duyệt của lợi nhuận thực. Việc kiểm duyệt này có một số hệ quả:1. **Các moment bị cắt cụt**: Phương sai quan sát được $\text{Var}(r_t^{obs}) < \text{Var}(r_t^*)$ vì các lợi nhuận cực đoan bị cắt bỏ. Điều này làm chệch xuống mọi thước đo rủi ro dựa trên biến động.2. **Tự tương quan nhân tạo**: Khi $r_t^{obs} = \bar{L}$ và $r_{t+1}^{obs} > 0$ (tiếp tục điều chỉnh vào ngày hôm sau), chuỗi lợi nhuận thể hiện tự tương quan dương hoàn toàn mang tính cơ học, không mang tính thông tin.3. **Lan truyền biến động**: Định nghĩa biến động vượt mức vào ngày $t+1$ là $\sigma_{t+1}^2 - E[\sigma_{t+1}^2 | \text{no limit hit on day } t]$. @kim1997price và @chu2019forecasting ghi nhận sự lan truyền dương có ý nghĩa thống kê, trong đó những ngày sau khi chạm biên độ thể hiện biến động cao bất thường.4. **Các thống kê giá trị cực trị bị chệch**: Các thước đo như Value-at-Risk, Expected Shortfall và mức sụt giảm tối đa bị giới hạn một cách cơ học bởi biên độ, làm đánh giá thấp rủi ro đuôi thực sự.### Phát hiện các lần chạm biên độ giáBây giờ chúng ta triển khai một chẩn đoán để phát hiện các lần chạm biên độ giá trong dữ liệu hằng ngày.```{python}#| label: detect-limit-hitsimport pandas as pdimport numpy as npimport sqlite3# Load daily price datatidy_finance = sqlite3.connect(database="data/tidy_finance_python.sqlite")# Assume prices_daily contains: symbol, date, close, exchangeprices_daily = pd.read_sql_query(# , exchange sql=""" SELECT symbol, date, close FROM prices_daily """, con=tidy_finance, parse_dates=["date"]).dropna()``````{python}#| eval: false# Define limit bands by exchangelimit_bands = {"HOSE": 0.07, "HNX": 0.10, "UPCoM": 0.15}prices_daily = prices_daily.sort_values(["symbol", "date"])prices_daily["prev_close"] = prices_daily.groupby("symbol")["close"].shift(1)prices_daily["ret"] = prices_daily["close"] / prices_daily["prev_close"] -1prices_daily["limit_band"] = prices_daily["exchange"].map(limit_bands)# A limit hit occurs when the return is within 0.1% of the theoretical limittolerance =0.001prices_daily["upper_hit"] = ( prices_daily["ret"] >= prices_daily["limit_band"] - tolerance)prices_daily["lower_hit"] = ( prices_daily["ret"] <=-prices_daily["limit_band"] + tolerance)prices_daily["limit_hit"] = ( prices_daily["upper_hit"] | prices_daily["lower_hit"])```### Tần suất chạm biên độ```{python}#| eval: false#| label: fig-limit-hit-frequency#| fig-cap: "Tần suất chạm biên độ giá hằng tháng theo sàn giao dịch"prices_daily["year_month"] = prices_daily["date"].dt.to_period("M")limit_hit_monthly = ( prices_daily .groupby(["year_month", "exchange"]) .agg( total_obs=("limit_hit", "count"), limit_hits=("limit_hit", "sum") ) .reset_index())limit_hit_monthly["hit_rate"] = ( limit_hit_monthly["limit_hits"] / limit_hit_monthly["total_obs"])limit_hit_monthly["date"] = limit_hit_monthly["year_month"].dt.to_timestamp()fig, ax = plt.subplots(figsize=(8, 4))for exchange, color inzip( ["HOSE", "HNX", "UPCoM"], ["#2C73D2", "#FF6B6B", "#5DCEAF"]): subset = limit_hit_monthly[limit_hit_monthly["exchange"] == exchange] ax.plot( subset["date"], subset["hit_rate"] *100, label=exchange, color=color, linewidth=1.2 )ax.set_ylabel("Limit Hit Rate (%)")ax.set_xlabel("")ax.legend(frameon=False)ax.spines["top"].set_visible(False)ax.spines["right"].set_visible(False)plt.tight_layout()plt.show()```### Kiểm định lan truyền biến độngTheo @kim1997price, chúng ta kiểm định xem những ngày sau một lần chạm biên độ có thể hiện biến động cao bất thường hay không. Định nghĩa biến giả $D_t = 1$ nếu có một lần chạm biên độ vào ngày $t$, và ước lượng:$$\sigma_{t+1}^2 = \alpha + \beta D_t + \gamma \sigma_t^2 + \varepsilon_{t+1}$$ {#eq-vol-spillover}trong đó $\sigma_t^2$ là bình phương lợi nhuận. Một $\beta$ dương và có ý nghĩa thống kê cho thấy sự lan truyền biến động do biên độ giá gây ra.```{python}#| eval: false#| label: volatility-spillover-testimport statsmodels.api as sm# Panel-level volatility spillover testprices_daily["sq_ret"] = prices_daily["ret"] **2prices_daily["sq_ret_lead"] = prices_daily.groupby("symbol")["sq_ret"].shift(-1)prices_daily["limit_hit_int"] = prices_daily["limit_hit"].astype(int)spillover_data = prices_daily.dropna(subset=["sq_ret_lead", "sq_ret"])X = sm.add_constant(spillover_data[["limit_hit_int", "sq_ret"]])y = spillover_data["sq_ret_lead"]model = sm.OLS(y, X).fit(cov_type="cluster", cov_kwds={"groups": spillover_data["symbol"]})spillover_results = pd.DataFrame({"Coefficient": model.params,"Std. Error": model.bse,"t-stat": model.tvalues,"p-value": model.pvalues}).round(6)print(spillover_results)```::: callout-tipMột hệ số dương có ý nghĩa thống kê trên biến giả chạm biên độ xác nhận rằng biên độ giá của Việt Nam không loại bỏ biến động, chúng chỉ phân phối lại biến động qua các ngày. Điều này có hàm ý trực tiếp đối với quản trị rủi ro: các thước đo VaR hằng ngày tính từ lợi nhuận bị kiểm duyệt đánh giá thấp mức phơi nhiễm rủi ro thực.:::### Tự tương quan của lợi nhuận do biên độ giá gây raBiên độ giá gây ra tự tương quan dương trong lợi nhuận một cách cơ học. Để định lượng điều này, chúng ta tính hệ số tự tương quan bậc nhất riêng cho các cổ phiếu thường xuyên chạm biên độ so với những cổ phiếu không như vậy.```{python}#| eval: false#| label: tbl-autocorrelation-by-limit#| tbl-cap: "Tự tương quan của lợi nhuận theo tần suất chạm biên độ giá"# Classify stocks by limit hit frequencystock_limit_freq = ( prices_daily .groupby("symbol") .agg( hit_rate=("limit_hit", "mean"), n_obs=("ret", "count") ) .query("n_obs >= 250") # At least 1 year of data)stock_limit_freq["limit_group"] = pd.qcut( stock_limit_freq["hit_rate"], q=3, labels=["Low", "Medium", "High"])# Compute autocorrelation by groupdef compute_autocorr(group_symbols): subset = prices_daily[prices_daily["symbol"].isin(group_symbols)].copy() subset["ret_lag"] = subset.groupby("symbol")["ret"].shift(1)return subset[["ret", "ret_lag"]].dropna().corr().iloc[0, 1]autocorr_results = []for group in ["Low", "Medium", "High"]: symbols = stock_limit_freq[stock_limit_freq["limit_group"] == group].index ac = compute_autocorr(symbols) n_stocks =len(symbols) avg_hit_rate = stock_limit_freq.loc[symbols, "hit_rate"].mean() autocorr_results.append({"Group": group,"N Stocks": n_stocks,"Avg Limit Hit Rate (%)": round(avg_hit_rate *100, 2),"AR(1)": round(ac, 4) })pd.DataFrame(autocorr_results).style.hide(axis="index")```Quy luật kỳ vọng là tự tương quan tăng đơn điệu từ nhóm chạm biên độ Thấp đến Cao, xác nhận rằng sự phụ thuộc chuỗi quan sát được trong lợi nhuận ít nhất một phần là sai lệch do dữ liệu từ việc kiểm duyệt giá chứ không phải khả năng dự báo lợi nhuận thực sự.## Thanh khoản, giao dịch thưa thớt và lợi nhuận bằng khôngThanh khoản (tức là khả năng giao dịch nhanh với chi phí thấp mà không làm dịch chuyển giá) là mối quan tâm bậc nhất đối với cổ phiếu Việt Nam. Một tỷ lệ đáng kể các doanh nghiệp niêm yết, đặc biệt trên HNX và UPCoM, rơi vào tình trạng phi thanh khoản kinh niên với đặc trưng là giao dịch không thường xuyên, chênh lệch giá mua–bán rộng và các ngày có lợi nhuận bằng không xảy ra thường xuyên.### Đo lường thanh khoảnTài liệu học thuật đã phát triển nhiều thước đo thanh khoản, mỗi thước đo nắm bắt một khía cạnh khác nhau của chất lượng thị trường. @#tbl-liquidity-measures tóm tắt các thước đo áp dụng được nhiều nhất cho dữ liệu Việt Nam, xét theo mức độ sẵn có điển hình của dữ liệu.| Thước đo | Công thức | Diễn giải | Dữ liệu cần thiết ||------------------|------------------|------------------|------------------|| Tỷ lệ vòng quay | $\text{TO}_{i,t} = \frac{\text{Volume}_{i,t}}{\text{Shares Outstanding}_{i}}$ | Cường độ giao dịch so với lượng cổ phiếu tự do chuyển nhượng | Khối lượng, số cổ phiếu lưu hành || Phi thanh khoản Amihud | $\text{ILLIQ}_{i,t} = \frac{1}{D} \sum_{d=1}^{D} \frac{|r_{i,d}|}{V_{i,d}}$ | Tác động giá trên mỗi đơn vị khối lượng | Lợi nhuận hằng ngày, khối lượng hằng ngày || Tỷ lệ ngày có lợi nhuận bằng không | $\text{ZR}_{i,t} = \frac{\#\{d : r_{i,d} = 0\}}{D}$ | Tần suất không giao dịch hoặc giá lỗi thời | Lợi nhuận hằng ngày || Chênh lệch Roll | $\hat{S}_i = 2\sqrt{-\text{Cov}(r_{i,d}, r_{i,d-1})}$ | Ước lượng chênh lệch giá mua–bán hiệu dụng | Lợi nhuận hằng ngày || Chênh lệch giá mua–bán | $\text{BA}_{i,d} = \frac{\text{Ask}_{i,d} - \text{Bid}_{i,d}}{(\text{Ask}_{i,d} + \text{Bid}_{i,d})/2}$ | Chi phí giao dịch trực tiếp | Dữ liệu báo giá |: Các thước đo thanh khoản cho cổ phiếu Việt Nam {#tbl-liquidity-measures}Tỷ số phi thanh khoản Amihud [@amihud2002illiquidity] đặc biệt hữu ích vì chỉ cần dữ liệu lợi nhuận và khối lượng hằng ngày. Nó nắm bắt tác động giá của giao dịch (tức là lợi nhuận trên mỗi đơn vị khối lượng tính bằng tiền tệ) và đã được chứng minh là tương quan tốt với các thước đo dựa trên vi cấu trúc tinh vi hơn như chênh lệch hiệu dụng [xem @goyenko2009liquidity và @goyenko2009stock để có so sánh toàn diện].### Tính các chẩn đoán thanh khoản```{python}#| label: compute-liquidity#| eval: false# Compute standard liquidity measures at the stock-month levelprices_daily["abs_ret"] = prices_daily["ret"].abs()prices_daily["zero_return"] = (prices_daily["ret"] ==0).astype(int)prices_daily["year_month"] = prices_daily["date"].dt.to_period("M")# Assume volume is in shares and value is in VND# Amihud: average |ret| / value (in billions VND)prices_daily["amihud_daily"] = np.where( prices_daily["value"] >0, prices_daily["abs_ret"] / (prices_daily["value"] /1e9), np.nan)liquidity_monthly = ( prices_daily .groupby(["symbol", "year_month"]) .agg( zero_return_share=("zero_return", "mean"), avg_turnover=("turnover", "mean"), amihud=("amihud_daily", "mean"), trading_days=("ret", "count"), avg_daily_value=("value", "mean") ) .reset_index())# Flag severely illiquid stock-monthsliquidity_monthly["illiquid_flag"] = ( (liquidity_monthly["zero_return_share"] >0.5) | (liquidity_monthly["trading_days"] <10) | (liquidity_monthly["avg_daily_value"] <1e8) # < 100M VND/day)```### Phân phối thanh khoản theo mặt cắt ngang```{python}#| label: tbl-liquidity-distribution#| eval: false#| tbl-cap: "Phân phối theo mặt cắt ngang của các thước đo thanh khoản (năm đầy đủ gần nhất)"latest_year = liquidity_monthly["year_month"].dt.year.max()annual_liq = ( liquidity_monthly[liquidity_monthly["year_month"].dt.year == latest_year] .groupby("symbol") .agg( zero_return_share=("zero_return_share", "mean"), avg_turnover=("avg_turnover", "mean"), amihud=("amihud", "mean"), avg_daily_value_m=("avg_daily_value", lambda x: x.mean() /1e6) ))summary_stats = annual_liq.describe(percentiles=[0.10, 0.25, 0.50, 0.75, 0.90]).Tsummary_stats = summary_stats[ ["mean", "std", "10%", "25%", "50%", "75%", "90%"]].round(4)summary_stats.columns = ["Mean", "Std", "P10", "P25", "Median", "P75", "P90"]summary_stats.index = ["Zero-Return Share","Avg Daily Turnover","Amihud Illiquidity","Avg Daily Value (M VND)"]summary_stats```### Phân phối thanh khoản giữa các sàn giao dịch```{python}#| label: fig-liquidity-by-exchange#| eval: false#| fig-cap: "Phân phối tỷ lệ ngày có lợi nhuận bằng không và phi thanh khoản Amihud theo sàn giao dịch"# Merge exchange infostock_exchange = ( prices_daily[["symbol", "exchange"]] .drop_duplicates("symbol"))annual_liq_exch = annual_liq.merge( stock_exchange, left_index=True, right_on="symbol")fig, axes = plt.subplots(1, 2, figsize=(10, 4))# Zero-return sharefor exchange, color inzip( ["HOSE", "HNX", "UPCoM"], ["#2C73D2", "#FF6B6B", "#5DCEAF"]): subset = annual_liq_exch[annual_liq_exch["exchange"] == exchange] axes[0].hist( subset["zero_return_share"], bins=30, alpha=0.6, color=color, label=exchange, density=True )axes[0].set_xlabel("Zero-Return Share")axes[0].set_ylabel("Density")axes[0].legend(frameon=False)axes[0].spines["top"].set_visible(False)axes[0].spines["right"].set_visible(False)# Amihud (log scale)for exchange, color inzip( ["HOSE", "HNX", "UPCoM"], ["#2C73D2", "#FF6B6B", "#5DCEAF"]): subset = annual_liq_exch[annual_liq_exch["exchange"] == exchange] amihud_log = np.log(subset["amihud"].clip(lower=1e-10)) axes[1].hist( amihud_log, bins=30, alpha=0.6, color=color, label=exchange, density=True )axes[1].set_xlabel("Log Amihud Illiquidity")axes[1].set_ylabel("Density")axes[1].legend(frameon=False)axes[1].spines["top"].set_visible(False)axes[1].spines["right"].set_visible(False)plt.tight_layout()plt.show()```Các phân phối thường cho thấy một mẫu hình hai đỉnh: cổ phiếu HOSE tụ ở các giá trị phi thanh khoản thấp, trong khi cổ phiếu HNX và đặc biệt là UPCoM có đuôi phải dài với mức phi thanh khoản cực đoan. Sự không đồng nhất này hàm ý rằng một bộ lọc hay cách xử lý thanh khoản duy nhất là không đủ cho toàn bộ mặt cắt ngang.### Biến thiên theo thời gian của thanh khoản tổng hợpThanh khoản toàn thị trường không phải là hằng số. Nó xấu đi trong các cuộc khủng hoảng, giai đoạn bất định chính sách và giai đoạn dòng vốn chảy ra, và cải thiện trong thị trường tăng giá và giai đoạn dòng vốn nước ngoài chảy vào. Bản thân biến thiên theo thời gian của thanh khoản tổng hợp là một nhân tố rủi ro [@pastor2003liquidity].```{python}#| label: fig-aggregate-liquidity#| eval: false#| fig-cap: "Chuỗi thời gian của thanh khoản tổng hợp (phi thanh khoản Amihud toàn thị trường)"agg_liquidity = ( liquidity_monthly .groupby("year_month") .agg( median_amihud=("amihud", "median"), median_zero_ret=("zero_return_share", "median"), total_value=("avg_daily_value", "sum") ) .reset_index())agg_liquidity["date"] = agg_liquidity["year_month"].dt.to_timestamp()fig, ax1 = plt.subplots(figsize=(8, 4))ax1.plot( agg_liquidity["date"], np.log(agg_liquidity["median_amihud"].clip(lower=1e-10)), color="#2C73D2", linewidth=1.2)ax1.set_ylabel("Log Median Amihud", color="#2C73D2")ax1.tick_params(axis="y", labelcolor="#2C73D2")ax2 = ax1.twinx()ax2.fill_between( agg_liquidity["date"], agg_liquidity["median_zero_ret"] *100, alpha=0.3, color="#FF6B6B")ax2.set_ylabel("Median Zero-Return Share (%)", color="#FF6B6B")ax2.tick_params(axis="y", labelcolor="#FF6B6B")ax1.spines["top"].set_visible(False)plt.tight_layout()plt.show()```### Phi thanh khoản thực hiện từ dữ liệu trong ngày {#sec-micro-realized-illiq}Mọi thước đo trong @tbl-liquidity-measures đều được tính từ dữ liệu hằng ngày, điều làm cho chúng dùng được trên toàn bộ mặt cắt ngang của thị trường Việt Nam. Cái giá của sự tiện lợi đó là độ chính xác, và tỷ số Amihud chịu phần lớn nhất. Tử số của nó, $|r_{i,d}|$, là một quan sát đơn lẻ đại diện cho cả một ngày biến động giá.@lacava2026realized đề xuất thay lợi nhuận tuyệt đối đơn lẻ đó bằng một ước lượng tần suất cao của biến động giá trong cùng ngày, tạo ra **Amihud thực hiện (realized Amihud)**$$\text{RILLIQ}_{i,d} = \sqrt{\frac{2}{\pi}}\,\frac{\sqrt{\text{RV}_{i,d}}}{\text{DVOL}_{i,d}},\qquad\text{RV}_{i,d} = \sum_{j=1}^{M} r_{i,d,j}^2$$ {#eq-micro-realized-amihud}trong đó $r_{i,d,j}$ là các lợi nhuận trong ngày trên $M$ khoảng của ngày $d$ và hằng số $\sqrt{2/\pi}$ đưa thước đo về cùng thang đo với tỷ số hằng ngày, nên hai thước đo có thể hoán đổi về mặt số học. Nền tảng kinh tế lượng của bộ ước lượng này — thiết lập semimartingale, các giả định, biến thể biến phân bipower chịu được các bước nhảy, và việc suy ra mức cải thiện độ chính xác — được trình bày trong chương về thanh khoản (@sec-liquidity-realized). Mục này giải quyết câu hỏi thuộc về đây: **cần làm gì để tính @eq-micro-realized-amihud đúng cách trên HOSE, và liệu mức cải thiện độ chính xác có thực sự hiện thực hóa được trong một thị trường mỏng như thế này hay không.**Câu trả lời ngắn gọn là mức cải thiện này có thật nhưng được quyết định bởi tần suất giao dịch của một cổ phiếu, chứ không phải bởi việc chia nhỏ ngày giao dịch đến mức nào. Với một cổ phiếu thuộc VN30, mức cải thiện gần với mức lý thuyết là bảy lần; với một cổ phiếu giao dịch năm lần một ngày, mức cải thiện dưới hai lần và đi kèm độ chệch xuống đáng kể. Vì sự phân biệt này không hiện ra trong kết quả của bất kỳ quy trình phương sai thực hiện tiêu chuẩn nào, nó phải được áp đặt bằng cách sàng lọc.#### Xây dựng lưới trong ngày nhận biết phiên giao dịchCấu trúc phiên của Việt Nam (@tbl-trading-sessions) loại trừ cách tiếp cận ngây thơ là lấy mẫu lại ngày giao dịch trên một lưới thời gian đều. Ba đặc điểm của ngày giao dịch phải được tôn trọng.**Giờ nghỉ trưa không phải là một khoảng lợi nhuận.** Khoảng trống 11:30–13:00 ngăn cách hai phiên liên tục. Lấy hiệu giá lúc 13:00 trừ giá lúc 11:30 tạo ra một "lợi nhuận năm phút" kéo dài chín mươi phút thị trường đóng cửa, đi vào $\text{RV}$ như một số hạng bình phương lớn và làm phồng ước lượng. Cách xử lý đúng là tính $\text{RV}$ riêng trong phiên sáng (09:15–11:30, 135 phút) và phiên chiều (13:00–14:30, 90 phút) rồi cộng hai kết quả. Với lấy mẫu năm phút, điều này cho $27 + 18 = 45$ khoảng, tức là $M = 45$ được dùng xuyên suốt.**Giá của phiên khớp lệnh định kỳ không phải là giá của thị trường liên tục.** Giá ATO (09:00–09:15) và giá ATC (14:30–14:45) là các giá cân bằng đơn lẻ từ khớp lệnh định kỳ, được xác định bằng một cơ chế khác với sổ lệnh giới hạn liên tục. Đưa chúng vào làm điểm lưới sẽ trộn hai quá trình hình thành giá và kéo theo mọi méo mó đặc thù của phiên khớp lệnh định kỳ — mà như đã nêu trong phần thảo luận về @tbl-trading-sessions, có thể đáng kể đối với các cổ phiếu kém thanh khoản nơi một lệnh duy nhất làm dịch chuyển giá đóng cửa.**Khối lượng giao dịch thỏa thuận phải được loại khỏi mẫu số.** Khung 14:45–15:00 dành cho giao dịch thỏa thuận tạo ra các giao dịch ở mức giá được thỏa thuận song phương, bên ngoài sổ lệnh. Nếu các khối lượng lớn này đi vào $\text{DVOL}$ trong khi tử số chỉ được đo trong giao dịch liên tục, thì tử số và mẫu số của tỷ số mô tả hai thị trường khác nhau, và một giao dịch khối lượng lớn duy nhất có thể khiến một cổ phiếu có vẻ thanh khoản hơn gấp cả một bậc độ lớn trong ngày đó.Đoạn mã sau xây dựng các thước đo theo những quy ước này. Nó đòi hỏi dữ liệu giao dịch trong ngày, vốn không thuộc quy trình dữ liệu hằng ngày được dùng ở những phần khác của chương này, nên không được thực thi ở đây.```{python}#| label: realized-illiquidity-hose#| eval: false#| code-summary: "Session-aware realized measures for HOSE intraday data"import pandas as pdimport numpy as np# HOSE continuous sessions only: auctions and put-through are excluded.HOSE_SESSIONS = [("09:15", "11:30"), ("13:00", "14:30")]SAMPLING_MINUTES =5def session_grid_returns(day_ticks, freq_min=SAMPLING_MINUTES):""" Log returns on a `freq_min` grid, computed WITHIN each continuous session. `day_ticks` holds one trading day for one symbol with columns [timestamp, price]. Returns a list of per-session return arrays plus the number of grid intervals in which the price actually changed. """ out, n_active, n_grid = [], 0, 0 day = day_ticks["timestamp"].dt.normalize().iloc[0]for start, end in HOSE_SESSIONS: lo = day + pd.Timedelta(start +":00") hi = day + pd.Timedelta(end +":00") sess = day_ticks[(day_ticks["timestamp"] >= lo) & (day_ticks["timestamp"] <= hi)]iflen(sess) <2:continue# Last traded price at each grid point; ffill makes staleness explicit. grid = (sess.set_index("timestamp")["price"] .resample(f"{freq_min}min", origin=lo, label="right", closed="right") .last() .ffill() .dropna())iflen(grid) <2:continue r = np.diff(np.log(grid.to_numpy())) out.append(r) n_grid +=len(r) n_active +=int(np.sum(r !=0)) # intervals carrying real tradingreturn out, n_active, n_griddef realized_measures(day_ticks, dvol_continuous):""" Realized and bipower Amihud for one symbol-day. `dvol_continuous` is VND volume from the continuous sessions ONLY, with put-through blocks removed. """ sessions, n_active, n_grid = session_grid_returns(day_ticks)ifnot sessions or dvol_continuous <=0:returnNone# Sum WITHIN sessions, never across the lunch break. rv =float(sum(np.sum(r **2) for r in sessions)) bv =float(sum((np.pi /2) * np.sum(np.abs(r[1:]) * np.abs(r[:-1]))for r in sessions iflen(r) >1)) k = np.sqrt(2.0/ np.pi)return {"rv": rv,"bv": bv,"n_active": n_active,"n_grid": n_grid,"active_share": n_active / n_grid if n_grid else np.nan,"rilliq": k * np.sqrt(rv) / dvol_continuous,"rilliq_bv": k * np.sqrt(max(bv, 0.0)) / dvol_continuous, }def realized_illiquidity_panel(ticks, dvol_daily, min_active=20):""" Build a symbol-day panel, flagging days too thin for the estimator. `min_active` is the screen developed below: below roughly 20 traded intervals of 45 the precision advantage largely disappears. """ recs = []for (sym, day), grp in ticks.groupby(["symbol", ticks["timestamp"].dt.date]): dv = dvol_daily.get((sym, day))if dv isNone:continue m = realized_measures(grp.sort_values("timestamp"), dv)if m isNone:continue m.update(symbol=sym, date=pd.Timestamp(day), reliable=m["n_active"] >= min_active) recs.append(m) panel = pd.DataFrame(recs)iflen(panel): share =100* panel["reliable"].mean()print(f"{len(panel):,} symbol-days; {share:.1f}% clear the "f"min_active={min_active} screen")return panel```#### Mức cải thiện độ chính xác có còn khi giao dịch thưa thớt?Mức cải thiện lý thuyết bảy lần giả định có $M = 45$ lợi nhuận *mang thông tin*. Một cổ phiếu giao dịch năm lần mỗi phiên thì không có được như vậy. Lưới năm phút của nó chủ yếu là các giá lỗi thời được điền tiếp theo, và một khoảng được điền tiếp theo đóng góp một số không cơ học vào $\text{RV}$ — một khoảng mà bộ ước lượng không đọc được biến động, không phải vì giá trị không dịch chuyển mà vì không ai giao dịch.Mô phỏng dưới đây định lượng cái giá của điều này. Một mức giá hiệu quả khuếch tán trên lưới một phút trong 225 phút liên tục của HOSE; các giao dịch đến theo một quá trình Poisson mà cường độ được chúng ta thay đổi; giá năm phút quan sát được là giá giao dịch cuối cùng tại hoặc trước mỗi điểm lưới. Vì khối lượng giao dịch được giữ **giống hệt nhau cho mọi cổ phiếu theo thiết kế mô phỏng**, mọi khác biệt trong tỷ số đo được đều có thể quy cho riêng tử số.```{python}#| label: thin-trading-realized#| code-summary: "Does the realized Amihud's precision gain survive thin trading?"import numpy as npimport pandas as pdfrom scipy import statsrng_thin = np.random.default_rng(20260818)MIN_PER_DAY =225# HOSE continuous minutesGRID_MIN =5M_GRID = MIN_PER_DAY // GRID_MIN # 45 five-minute intervalsdef simulate_thin(n_days, trades_per_day):"""Efficient diffusion sampled through a Poisson trade process.""" m1 = MIN_PER_DAY IV = rng_thin.gamma(4.0, (0.025**2) /4.0, size=n_days) steps = rng_thin.normal(0, 1, size=(n_days, m1)) * np.sqrt(IV / m1)[:, None] eff = np.cumsum(steps, axis=1) traded = rng_thin.random((n_days, m1)) <min(trades_per_day / m1, 1.0) traded[:, 0] =True# opening trade# Forward fill: observed price is the last TRADED price. idx = np.maximum.accumulate( np.where(traded, np.arange(m1)[None, :], 0), axis=1) obs = np.take_along_axis(eff, idx, axis=1) grid = np.arange(GRID_MIN -1, m1, GRID_MIN) r = np.diff(obs[:, grid], axis=1, prepend=obs[:, [0]])returndict(IV=IV, RV=np.sum(r **2, axis=1), n_active=np.sum(r !=0, axis=1), R_day=obs[:, -1] - obs[:, 0])k_thin = np.sqrt(2.0/ np.pi)DVOL_FIXED =5.0# billions VND, IDENTICAL for every stockrows_thin = []for lam in [1000, 500, 200, 100, 50, 20, 10, 5]: s = simulate_thin(20_000, lam) truth = k_thin * np.sqrt(s["IV"]) / DVOL_FIXED realized = k_thin * np.sqrt(s["RV"]) / DVOL_FIXED classic = np.abs(s["R_day"]) / DVOL_FIXEDdef rel_rmse(e):return np.sqrt(((e - truth) **2).mean()) / truth.mean() m_eff = s["n_active"].mean() rows_thin.append({"trades/day": lam,"active of 45": round(m_eff, 1),"bias % (realized)": round(100* (realized.mean() / truth.mean() -1), 1),"RMSE classic": round(rel_rmse(classic), 3),"RMSE realized": round(rel_rmse(realized), 3),"gain": round(rel_rmse(classic) / rel_rmse(realized), 2),"predicted gain": round(np.sqrt(2* m_eff * (np.pi /2-1)), 2),"rank rho realized": round(stats.spearmanr(realized, truth).statistic, 3),"rank rho classic": round(stats.spearmanr(classic, truth).statistic, 3), })print(pd.DataFrame(rows_thin).to_string(index=False))```Bảng ủng hộ bốn kết luận.**Mức cải thiện độ chính xác được quyết định bởi số giao dịch, không phải số điểm lưới.** Thước đo thực hiện vượt thước đo hằng ngày khoảng 7.2 lần khi giao dịch liên tục, và hệ số quan sát được bám sát $\sqrt{2 M_{\text{eff}}(\pi/2 - 1)}$ gần như chính xác một khi $M_{\text{eff}}$ được định nghĩa là số khoảng mà giá thực sự thay đổi thay vì 45 khoảng trên lưới. Với 20 giao dịch mỗi ngày, chỉ khoảng 17 khoảng có hoạt động và mức cải thiện thực hiện giảm xuống còn khoảng 3.4; với năm giao dịch mỗi ngày, mức này khoảng 1.7. Làm mịn lưới không giúp ích gì, vì ràng buộc là sự xuất hiện của các giao dịch, không phải độ phân giải của đồng hồ.**Tình trạng lỗi thời làm thước đo chệch xuống, và độ chệch nhỏ cho đến khi giao dịch thực sự trở nên thưa thớt.** Độ chệch dưới 2% cho đến mức 50 giao dịch mỗi ngày, đạt khoảng $-5\%$ ở mức 20, và khoảng $-19\%$ ở mức 5. Cơ chế này đáng được hiểu chính xác, vì câu chuyện trực giác là sai: việc làm thô lấy mẫu của một martingale *không* làm chệch phương sai thực hiện, vì $\mathbb{E}[\text{RV}]$ bằng phương sai tích phân với mọi phân hoạch. Điều mà tình trạng lỗi thời thực sự loại bỏ là biến động giá xảy ra trước giao dịch đầu tiên và sau giao dịch cuối cùng — hai đầu của ngày, không phải giữa ngày. Đó là lý do độ chệch ở mức vừa phải đối với các cổ phiếu giao dịch vừa phải và chỉ trở nên nghiêm trọng đối với các cổ phiếu có giao dịch đầu tiên và cuối cùng nằm xa ranh giới phiên. Tuy vậy, đó là độ chệch theo hướng nguy hiểm: nó làm các cổ phiếu kém thanh khoản nhất trông *thanh khoản hơn*, điều ngược với sai lầm mà một nhà nghiên cứu mong đợi và sẽ không bị phát hiện bởi một bộ lọc giá trị ngoại lai.**Tỷ số Amihud hằng ngày hầu như không mang thông tin theo mặt cắt ngang trong tử số của nó.** Khi khối lượng giao dịch được giữ cố định giữa các cổ phiếu, tương quan hạng giữa tỷ số cổ điển và phi thanh khoản thực chỉ khoảng 0.26, về cơ bản là phẳng ở mọi cường độ giao dịch. Phiên bản thực hiện đạt khoảng 0.92 trong trường hợp thanh khoản cao. Đây là minh chứng trực tiếp cho một điểm được thảo luận trong @sec-liquidity-amihud-original: việc phân loại theo tỷ số Amihud trong dữ liệu thực hoạt động phần lớn là nhờ *mẫu số* biến thiên rất lớn giữa các cổ phiếu và được đo không có sai số. Tử số, nếu xét riêng, sắp xếp các cổ phiếu chỉ hơn nhiễu một chút. Điều này cũng cho thấy bộ ước lượng thực hiện dùng để làm gì — nó là một cải tiến cho thành phần của thước đo mà hiện nay đóng góp ít nhất.**Có một ngưỡng sàng lọc dùng được.** Mức cải thiện trên 5$\times$ khi có ít nhất khoảng 30 khoảng hoạt động, và giảm xuống dưới 2.5$\times$ khi có ít hơn 10 khoảng. Yêu cầu `n_active >= 20` trên 45, như trong hàm xây dựng bảng dữ liệu ở trên, nằm giữa hai điểm đó: nó giữ thước đo thực hiện tốt hơn thước đo hằng ngày rõ rệt, trên 3$\times$, và giữ độ chệch do lỗi thời ở mức vài phần trăm, đồng thời loại bỏ vùng mà bộ ước lượng suy giảm nhanh nhất. Các cổ phiếu không qua được bộ sàng lọc nên quay về dùng tỷ số Amihud hằng ngày, và tỷ lệ cổ phiếu quay về cần được báo cáo, vì nó sẽ tương quan mạnh với quy mô và do đó sẽ tương tác với mọi phân tích phân loại theo quy mô.#### Quan hệ với giao dịch không đồng bộCơ chế ở đây giống cơ chế tạo ra độ chệch beta được bàn trong phần thảo luận về các bộ ước lượng Dimson và Scholes–Williams ở phần sau của chương này: giao dịch không thường xuyên có nghĩa là giá quan sát được lỗi thời, và giá lỗi thời làm đánh giá thấp mức đồng biến động của các giá hiệu quả tiềm ẩn. Điểm khác biệt là moment nào bị ảnh hưởng. Giao dịch không đồng bộ làm suy giảm *hiệp phương sai* giữa một cổ phiếu và thị trường, làm chệch beta xuống. Tình trạng lỗi thời trong @eq-micro-realized-amihud làm suy giảm *phương sai* của chính cổ phiếu, làm chệch ước lượng phi thanh khoản xuống. Cả hai sai số đều tăng theo mức độ thưa thớt, và do đó cả hai đều gán nhãn sai cho cùng những cổ phiếu — những mã nhỏ nhất, ít giao dịch nhất đồng thời bị đánh giá thấp beta và đánh giá thấp phi thanh khoản, hai sai số đẩy theo cùng một hướng trong mọi kiểm định theo mặt cắt ngang có cả hai.#### Lưu ý thực hành đối với dữ liệu Việt Nam1. **Khả năng có sẵn dữ liệu là ràng buộc chính.** Dữ liệu giao dịch và báo giá trong ngày của HOSE không thuộc quy trình dữ liệu hằng ngày tiêu chuẩn dùng trong cuốn sách này và phải được tìm nguồn riêng. Các thước đo thực hiện nên được coi là một sự tinh chỉnh áp dụng cho nhóm thanh khoản cao của thị trường — xấp xỉ VN30 và các cổ phiếu vốn hóa vừa có quy mô lớn hơn — thay vì một sự thay thế cho tỷ số hằng ngày trên toàn bộ dữ liệu bảng.2. **Sàng lọc theo các khoảng có giao dịch, không bao giờ theo các khoảng của lưới.** Một quy trình lấy mẫu lại sẽ trả về 45 mức giá cho một cổ phiếu chỉ giao dịch hai lần, vì việc điền tiếp theo diễn ra âm thầm. Hãy đếm số lần giá thay đổi, không đếm số dòng.3. **Dùng biến thể bipower vào các ngày chạm biên độ giá.** Như đã chỉ ra trong @sec-liquidity-realized, một bước nhảy thông tin làm phồng $\text{RV}$ nhưng để biến phân bipower gần như không chệch. Xét tần suất chạm biên độ được ghi nhận ở phần trước của chương này, đây là lựa chọn mặc định đáng ưu tiên đối với dữ liệu Việt Nam.4. **Không lấy mẫu dưới năm phút.** Biểu bước giá trong @tbl-tick-sizes làm tỷ số nhiễu trên tín hiệu trong giá HOSE tệ hơn so với các thị trường Mỹ nơi quy ước năm phút được thiết lập, do đó khoảng tối ưu thậm chí còn dài hơn. Lấy mẫu mịn hơn khuếch đại nảy giá mua–bán nhanh hơn mức nó bổ sung thông tin; @sec-liquidity-realized định lượng độ chệch phát sinh.5. **Báo cáo tỷ lệ quay về cùng mọi kết quả.** Vì bộ sàng lọc loại bỏ cổ phiếu một cách không ngẫu nhiên, một kết quả theo mặt cắt ngang tính trên mẫu còn lại bị điều kiện hóa theo thanh khoản, chính là biến đang được nghiên cứu.::: callout-important## Khuyến nghị thực hànhTrước mọi phân tích định giá tài sản, hãy áp dụng bộ lọc thanh khoản sau: loại các tháng–cổ phiếu có tỷ lệ ngày có lợi nhuận bằng không vượt 50%, có ít hơn 15 ngày giao dịch quan sát được, hoặc có giá trị giao dịch trung bình hằng ngày thấp hơn một ngưỡng (ví dụ 100 triệu VND). Hãy ghi lại bộ lọc một cách tường minh và báo cáo độ nhạy của kết quả đối với các ngưỡng thay thế.:::## Ước lượng chênh lệch giá mua–bánKhi thiếu dữ liệu báo giá toàn diện, chênh lệch giá mua–bán hiệu dụng có thể được ước lượng từ dữ liệu giao dịch bằng phương pháp của @roll1984simple. Bộ ước lượng Roll khai thác thực tế rằng nếu nảy giá mua–bán là nguồn duy nhất của hiệp phương sai chuỗi âm trong lợi nhuận, thì:$$\hat{S}_{\text{Roll}} = 2\sqrt{-\text{Cov}(\Delta p_t, \Delta p_{t-1})}$$ {#eq-roll}trong đó $\Delta p_t = p_t - p_{t-1}$ là thay đổi giá. Khi tự hiệp phương sai dương (xảy ra khi tương quan chuỗi do thông tin gây ra lấn át nảy giá mua–bán), bộ ước lượng Roll không xác định. @hasbrouck2009trading đề xuất một biến thể Bayes xử lý trường hợp này bằng cách áp đặt một phân phối tiên nghiệm lên chênh lệch giá.```{python}#| label: compute-roll-spread#| eval: false# Compute Roll spread estimate at the stock-month levelprices_daily["dprice"] = prices_daily.groupby("symbol")["close"].diff()prices_daily["dprice_lag"] = prices_daily.groupby("symbol")["dprice"].shift(1)roll_cov = ( prices_daily .groupby(["symbol", "year_month"]) .apply(lambda g: g[["dprice", "dprice_lag"]].dropna().cov().iloc[0, 1], include_groups=False ) .reset_index(name="autocovariance"))# Roll spread is defined only when autocovariance is negativeroll_cov["roll_spread"] = np.where( roll_cov["autocovariance"] <0,2* np.sqrt(-roll_cov["autocovariance"]), np.nan)# As a percentage of priceroll_cov = roll_cov.merge( prices_daily.groupby(["symbol", "year_month"])["close"].mean() .reset_index(name="avg_price"), on=["symbol", "year_month"])roll_cov["roll_spread_pct"] = roll_cov["roll_spread"] / roll_cov["avg_price"] *100``````{python}#| label: tbl-roll-spread-summary#| eval: false#| tbl-cap: "Phân phối các ước lượng chênh lệch Roll (% của giá)"roll_summary = ( roll_cov .dropna(subset=["roll_spread_pct"]) .groupby("year_month")["roll_spread_pct"] .describe(percentiles=[0.25, 0.50, 0.75]) .reset_index())# Show latest year summarylatest_year_roll = roll_cov[ roll_cov["year_month"].dt.year == roll_cov["year_month"].dt.year.max()]print( latest_year_roll["roll_spread_pct"] .dropna() .describe(percentiles=[0.10, 0.25, 0.50, 0.75, 0.90]) .round(3))```## Thiên lệch giao dịch không đồng bộKhi các cổ phiếu không giao dịch cùng tần suất hoặc vào cùng thời điểm, lợi nhuận quan sát được bị lệch thời gian. Thiên lệch giao dịch không đồng bộ này, được hình thức hóa lần đầu bởi @scholes1977estimating và @lo1990econometric, là một trong những tác động vi cấu trúc có hệ quả lớn nhất đối với định giá tài sản ở các thị trường mỏng.### Vấn đềGiả sử quá trình lợi nhuận thực (không quan sát được) của cổ phiếu $i$ tuân theo mô hình một nhân tố:$$r_{i,t}^* = \alpha_i + \beta_i r_{m,t}^* + \varepsilon_{i,t}$$ {#eq-true-factor}trong đó $r_{m,t}^*$ là lợi nhuận thị trường thực và $\beta_i$ là beta thực. Nếu cổ phiếu $i$ giao dịch lần cuối $k$ ngày trước cuối ngày $t$, lợi nhuận quan sát được chỉ bao hàm thông tin đến ngày $t - k$. @scholes1977estimating chỉ ra rằng ước lượng OLS của beta từ việc hồi quy lợi nhuận quan sát được theo lợi nhuận thị trường quan sát được là:$$\hat{\beta}_i^{OLS} = \beta_i \cdot \pi_i$$ {#eq-beta-bias}trong đó $\pi_i$ là xác suất cổ phiếu $i$ giao dịch vào một ngày bất kỳ. Với một cổ phiếu chỉ giao dịch 50% số ngày, beta OLS bị chệch xuống 50%. Độ chệch này nghiêm trọng ở Việt Nam, nơi nhiều cổ phiếu vốn hóa nhỏ giao dịch ít hơn một nửa số ngày giao dịch.### Định lượng độ chệch```{python}#| label: fig-trading-frequency#| eval: false#| fig-cap: "Phân phối tần suất giao dịch hằng ngày trên các cổ phiếu niêm yết"# Compute trading frequency: proportion of market days with nonzero volumemarket_days = prices_daily.groupby("year_month")["date"].nunique()trading_freq = ( prices_daily[prices_daily["value"] >0] .groupby(["symbol", "year_month"])["date"] .nunique() .reset_index(name="days_traded"))trading_freq = trading_freq.merge( market_days.reset_index().rename(columns={"date": "market_days"}), on="year_month")trading_freq["trade_prob"] = trading_freq["days_traded"] / trading_freq["market_days"]# Annual averageannual_trade_freq = ( trading_freq .groupby("symbol")["trade_prob"] .mean() .reset_index(name="avg_trade_prob"))fig, ax = plt.subplots(figsize=(7, 4))ax.hist( annual_trade_freq["avg_trade_prob"], bins=50, color="#2C73D2", edgecolor="white", alpha=0.8)ax.axvline( annual_trade_freq["avg_trade_prob"].median(), color="#FF6B6B", linestyle="--", linewidth=1.5, label=f"Median = {annual_trade_freq['avg_trade_prob'].median():.2f}")ax.set_xlabel("Average Trading Probability (Fraction of Market Days)")ax.set_ylabel("Number of Stocks")ax.legend(frameon=False)ax.spines["top"].set_visible(False)ax.spines["right"].set_visible(False)plt.tight_layout()plt.show()```### Hiệu chỉnh beta Dimson@dimson1979risk đề xuất một hiệu chỉnh đơn giản: đưa các lợi nhuận thị trường trễ và dẫn vào hồi quy beta:$$r_{i,t} = \alpha_i + \sum_{k=-K}^{K} \beta_{i,k} \, r_{m,t-k} + \varepsilon_{i,t}$$ {#eq-dimson}Beta đã hiệu chỉnh theo Dimson là $\hat{\beta}_i^{Dimson} = \sum_{k=-K}^{K} \hat{\beta}_{i,k}$. Thông thường $K = 1$ hoặc $K = 2$ là đủ. Tổng các hệ số nắm bắt toàn bộ phản ứng của lợi nhuận quan sát được của cổ phiếu đối với thông tin thị trường, bất kể cổ phiếu thực sự giao dịch vào lúc nào.```{python}#| label: dimson-beta-estimation#| eval: false# Estimate Dimson betas with K=1 lag and lead# Merge market returnmarket_ret = ( prices_daily .groupby("date") .apply(lambda g: np.average(g["ret"].dropna(), weights=g["mktcap"].loc[g["ret"].dropna().index])if g["ret"].dropna().shape[0] >0else np.nan, include_groups=False ) .reset_index(name="rm"))prices_daily = prices_daily.merge(market_ret, on="date", how="left")prices_daily["rm_lag1"] = prices_daily.groupby("symbol")["rm"].shift(1)prices_daily["rm_lead1"] = prices_daily.groupby("symbol")["rm"].shift(-1)def estimate_dimson_beta(group):"""Estimate OLS and Dimson(K=1) betas for a single stock.""" g = group.dropna(subset=["ret", "rm", "rm_lag1", "rm_lead1"])iflen(g) <60:return pd.Series({"beta_ols": np.nan, "beta_dimson": np.nan, "n_obs": len(g)})# OLS beta X_ols = sm.add_constant(g["rm"]) ols_model = sm.OLS(g["ret"], X_ols).fit() beta_ols = ols_model.params["rm"]# Dimson beta X_dim = sm.add_constant(g[["rm_lag1", "rm", "rm_lead1"]]) dim_model = sm.OLS(g["ret"], X_dim).fit() beta_dimson = dim_model.params[["rm_lag1", "rm", "rm_lead1"]].sum()return pd.Series({"beta_ols": beta_ols,"beta_dimson": beta_dimson,"n_obs": len(g) })beta_comparison = ( prices_daily .groupby("symbol") .apply(estimate_dimson_beta, include_groups=False) .reset_index())``````{python}#| label: fig-beta-comparison#| eval: false#| fig-cap: "Beta OLS so với beta đã hiệu chỉnh theo Dimson"beta_valid = beta_comparison.dropna()fig, ax = plt.subplots(figsize=(6, 6))ax.scatter( beta_valid["beta_ols"], beta_valid["beta_dimson"], alpha=0.3, s=10, color="#2C73D2")lims = [min(ax.get_xlim()[0], ax.get_ylim()[0]),max(ax.get_xlim()[1], ax.get_ylim()[1])]ax.plot(lims, lims, "--", color="gray", linewidth=1)ax.set_xlabel("OLS Beta")ax.set_ylabel("Dimson Beta (K=1)")ax.set_aspect("equal")ax.spines["top"].set_visible(False)ax.spines["right"].set_visible(False)plt.tight_layout()plt.show()```Biểu đồ phân tán sẽ cho thấy một quy luật có hệ thống: beta Dimson vượt beta OLS với đa số cổ phiếu, với chênh lệch lớn nhất ở các cổ phiếu giao dịch thưa thớt. Các điểm nằm trên đường 45 độ cho biết những cổ phiếu có beta OLS bị chệch xuống do giao dịch không đồng bộ.```{python}#| label: tbl-beta-bias-by-liquidity#| eval: false#| tbl-cap: "Độ chệch beta theo tam phân vị tần suất giao dịch"beta_with_freq = beta_valid.merge(annual_trade_freq, on="symbol")beta_with_freq["freq_tercile"] = pd.qcut( beta_with_freq["avg_trade_prob"], q=3, labels=["Low (Thin)", "Medium", "High (Liquid)"])beta_bias_summary = ( beta_with_freq .groupby("freq_tercile") .agg( n_stocks=("symbol", "count"), avg_trade_prob=("avg_trade_prob", "mean"), mean_beta_ols=("beta_ols", "mean"), mean_beta_dimson=("beta_dimson", "mean"), median_beta_ols=("beta_ols", "median"), median_beta_dimson=("beta_dimson", "median") ) .round(3))beta_bias_summary["bias_pct"] = ( (beta_bias_summary["mean_beta_dimson"] - beta_bias_summary["mean_beta_ols"])/ beta_bias_summary["mean_beta_dimson"] *100).round(1)beta_bias_summary```::: callout-warningVới tam phân vị giao dịch thưa thớt nhất, beta OLS đánh giá thấp rủi ro hệ thống thực trung bình 20-40%. Việc dùng beta chưa hiệu chỉnh để ước lượng chi phí vốn chủ sở hữu hoặc kiểm định mô hình nhân tố sẽ cho kết quả sai một cách có hệ thống với các cổ phiếu này.:::### Bộ ước lượng Scholes-WilliamsMột hiệu chỉnh thay thế, do @scholes1977estimating đề xuất, ước lượng beta như sau:$$\hat{\beta}_i^{SW} = \frac{\hat{\beta}_{i,-1} + \hat{\beta}_{i,0} + \hat{\beta}_{i,+1}}{1 + 2\hat{\rho}_m}$$ {#eq-sw}trong đó $\hat{\beta}_{i,k}$ là hệ số góc từ việc hồi quy $r_{i,t}$ chỉ theo $r_{m,t-k}$, và $\hat{\rho}_m$ là tự tương quan bậc nhất của lợi nhuận thị trường. Bộ ước lượng Scholes-Williams nhất quán dưới giả định rằng việc không giao dịch là nguồn duy nhất của tương quan chéo chuỗi, trong khi bộ ước lượng Dimson vững hơn trước các nguồn bổ sung của cấu trúc dẫn–trễ.```{python}#| label: scholes-williams-beta#| eval: falsedef estimate_sw_beta(group):"""Estimate Scholes-Williams beta.""" g = group.dropna(subset=["ret", "rm", "rm_lag1", "rm_lead1"])iflen(g) <60:return np.nan# Separate regressions beta_lag = sm.OLS(g["ret"], sm.add_constant(g["rm_lag1"])).fit().params.iloc[1] beta_0 = sm.OLS(g["ret"], sm.add_constant(g["rm"])).fit().params.iloc[1] beta_lead = sm.OLS(g["ret"], sm.add_constant(g["rm_lead1"])).fit().params.iloc[1]# Market autocorrelation rho_m = g["rm"].autocorr(lag=1) beta_sw = (beta_lag + beta_0 + beta_lead) / (1+2* rho_m)return beta_swbeta_comparison["beta_sw"] = ( prices_daily .groupby("symbol") .apply(estimate_sw_beta, include_groups=False) .values)```## Hàm ý đối với xây dựng danh mục đầu tưCác ma sát vi cấu trúc được ghi nhận ở trên có hệ quả trực tiếp đối với việc xây dựng danh mục đầu tư, đặc biệt với các chiến lược liên quan đến tái cân bằng trên toàn bộ mặt cắt ngang các doanh nghiệp niêm yết.### Lợi nhuận trọng số bằng nhau so với trọng số theo vốn hóaLợi nhuận danh mục trọng số bằng nhau cho mỗi cổ phiếu cùng một trọng số, kể cả các cổ phiếu vốn hóa nhỏ kém thanh khoản có thể đóng góp giá lỗi thời hoặc nhiễu. Lợi nhuận trọng số theo vốn hóa nghiêng về các cổ phiếu lớn, thanh khoản cao và ít bị nhiễm tác động vi cấu trúc hơn.```{python}#| label: fig-ew-vs-vw#| eval: false#| fig-cap: "Lợi nhuận tích lũy: danh mục thị trường trọng số bằng nhau so với trọng số theo vốn hóa"monthly_returns = ( prices_daily .groupby(["symbol", "year_month"]) .agg( monthly_ret=("ret", lambda x: (1+ x).prod() -1), last_mktcap=("mktcap", "last") ) .reset_index())monthly_returns["date"] = monthly_returns["year_month"].dt.to_timestamp()# Equal-weightedew_ret = monthly_returns.groupby("date")["monthly_ret"].mean().reset_index(name="ew")# Value-weighteddef vw_return(group): w = group["last_mktcap"] / group["last_mktcap"].sum()return (w * group["monthly_ret"]).sum()vw_ret = ( monthly_returns.groupby("date") .apply(vw_return, include_groups=False) .reset_index(name="vw"))port_comp = ew_ret.merge(vw_ret, on="date")fig, ax = plt.subplots(figsize=(8, 4))for col, label, color in [ ("ew", "Equal-Weighted", "#FF6B6B"), ("vw", "Value-Weighted", "#2C73D2")]: cum_ret = (1+ port_comp[col]).cumprod() ax.plot(port_comp["date"], cum_ret, label=label, color=color, linewidth=1.2)ax.set_ylabel("Cumulative Return (Growth of 1 VND)")ax.set_xlabel("")ax.legend(frameon=False)ax.spines["top"].set_visible(False)ax.spines["right"].set_visible(False)plt.tight_layout()plt.show()```Sự phân kỳ kéo dài giữa lợi nhuận tích lũy trọng số bằng nhau và trọng số theo vốn hóa là dấu hiệu đặc trưng của các tác động vi cấu trúc: danh mục trọng số bằng nhau phóng đại lợi nhuận có thể đạt được vì ngầm giả định giao dịch không tốn chi phí ở các cổ phiếu kém thanh khoản.### Các bộ lọc thanh khoản khuyến nghịDựa trên các chẩn đoán được xây dựng trong chương này, chúng tôi khuyến nghị các bộ lọc tiền phân tích sau:```{python}#| label: tbl-recommended-filters#| include: false#| tbl-cap: "Các bộ lọc thanh khoản khuyến nghị cho nghiên cứu định giá tài sản"filters = pd.DataFrame({"Filter": ["Minimum trading days per month","Maximum zero-return share per month","Minimum average daily value (VND)","Minimum listing age","Exclude UPCoM stocks" ],"Threshold": ["≥ 15 days","≤ 50%","≥ 100 million","≥ 6 months","Optional but recommended" ],"Rationale": ["Ensures sufficient price observations for return computation","Removes stocks with predominantly stale prices","Ensures rebalancing is approximately feasible","Avoids IPO effects and thin early trading","UPCoM stocks have minimal disclosure and extreme illiquidity" ]})filters.style.hide(axis="index")```::: callout-tipHãy luôn báo cáo kết quả có và không có bộ lọc thanh khoản. Nếu kết quả khác nhau về mặt định tính, các phát hiện cơ sở có thể bị chi phối bởi các sai lệch giả tạo mang tính vi cấu trúc chứ không phải các tác động kinh tế thực sự.:::### Tần suất tháng so với tần suất ngàyVới hầu hết các ứng dụng định giá tài sản, việc tổng hợp lợi nhuận theo tháng được ưu tiên hơn phân tích theo ngày ở Việt Nam vì:1. Lợi nhuận hằng tháng làm mịn nhiễu trong ngày, nảy giá mua–bán và các tác động của biên độ giá.2. Các cổ phiếu giao dịch không thường xuyên trong một tháng vẫn tạo ra lợi nhuận hằng tháng có ý nghĩa.3. Việc phân loại danh mục nhân tố theo quy ước được thực hiện ở tần suất tháng.4. Các kiểm định thống kê có kích thước kiểm định gần mức danh nghĩa hơn khi nhiễu vi cấu trúc được giảm.Tuy nhiên, việc tổng hợp theo tháng không loại bỏ mọi độ chệch. Các cổ phiếu có lợi nhuận bằng không trong cả một tháng vẫn đóng góp các quan sát lỗi thời. Các hiệu chỉnh Dimson và Scholes-Williams vẫn nên được áp dụng ở tần suất tháng khi ước lượng beta.## Hàm ý đối với các kiểm định định giá tài sản### Ước lượng mô hình nhân tốƯớc lượng mô hình nhân tố tiêu chuẩn giả định rằng lợi nhuận được quan sát đồng bộ và không bị kiểm duyệt. Ở Việt Nam, cả hai giả định đều bị vi phạm. Các hệ quả thực tiễn được nêu trong @tbl-assumption-violations| Giả định | Vi phạm tại Việt Nam | Hệ quả ||-------------------|--------------------------------|---------------------|| Quan sát đồng bộ | Giao dịch thưa thớt | Beta bị chệch, R² bị suy giảm || Lợi nhuận không bị kiểm duyệt | Biên độ giá | Phân phối bị cắt cụt, các moment bị chệch || Giao dịch liên tục | Bước giá rời rạc | Tính rời rạc của lợi nhuận, nảy giá mua–bán || Không có chi phí giao dịch | Chênh lệch giá rộng | Lợi nhuận danh mục bị phóng đại |: Các giả định tiêu chuẩn và những vi phạm của chúng {#tbl-assumption-violations}### Quy trình kiểm định điều chỉnhChúng tôi khuyến nghị các điều chỉnh sau đối với các kiểm định định giá tài sản tiêu chuẩn khi áp dụng cho dữ liệu Việt Nam:1. **Ước lượng beta**: Dùng beta Dimson ($K \ge 1$) hoặc Scholes-Williams, không dùng beta OLS.2. **Xây dựng nhân tố**: Khi hình thành các danh mục theo quy mô và giá trị, hãy áp dụng bộ lọc thanh khoản trước khi phân loại. Cân nhắc loại nhóm ngũ phân vị nhỏ nhất theo vốn hóa thị trường, nhóm chịu ảnh hưởng nhiều nhất của giao dịch thưa thớt.3. **Tổng hợp lợi nhuận**: Dùng tần suất tháng. Nếu buộc phải phân tích theo ngày, hãy đưa lợi nhuận thị trường trễ vào hồi quy chuỗi thời gian.4. **Suy luận vững**: Dùng sai số chuẩn phân cụm theo cổ phiếu để tính đến tương quan chuỗi dai dẳng do vi cấu trúc gây ra. Dùng sai số chuẩn Newey-West HAC với số độ trễ đủ lớn.5. **Điều chỉnh biên độ giá**: Với phân tích biến động hoặc đo lường rủi ro, hãy cân nhắc cách tiếp cận của @chu2019forecasting là mô hình hóa phân phối lợi nhuận tiềm ẩn (không bị kiểm duyệt) bằng hồi quy cắt cụt:$$r_{i,t}^* \sim N(\mu_i, \sigma_i^2), \quad r_{i,t}^{obs} = \max(\underline{L}, \min(\bar{L}, r_{i,t}^*))$$ {#eq-truncated}Ước lượng $\mu_i$ và $\sigma_i^2$ bằng hợp lý cực đại cho phân phối chuẩn cắt cụt.```{python}#| label: truncated-volatilityfrom scipy.optimize import minimizefrom scipy.stats import normdef truncated_normal_nll(params, returns, lower, upper):"""Negative log-likelihood of truncated normal.""" mu, log_sigma = params sigma = np.exp(log_sigma)# Interior observations interior = (returns > lower) & (returns < upper) ll_interior = norm.logpdf(returns[interior], mu, sigma)# Lower censored ll_lower = norm.logcdf(lower, mu, sigma) n_lower = (returns <= lower).sum()# Upper censored ll_upper = np.log(1- norm.cdf(upper, mu, sigma) +1e-15) n_upper = (returns >= upper).sum() nll =-(ll_interior.sum() + n_lower * ll_lower + n_upper * ll_upper)return nlldef estimate_true_volatility(returns, limit_band):"""Estimate latent volatility correcting for price limit censoring.""" result = minimize( truncated_normal_nll, x0=[returns.mean(), np.log(returns.std())], args=(returns.values, -limit_band, limit_band), method="Nelder-Mead" ) mu, log_sigma = result.xreturn np.exp(log_sigma)```6. **Báo cáo độ nhạy**: Luôn báo cáo các kết quả chính theo những đặc tả thay thế: có và không có bộ lọc thanh khoản, dùng beta OLS so với beta Dimson, ở tần suất ngày so với tháng, và dùng biến động quan sát được so với biến động đã hiệu chỉnh cắt cụt.## Tóm tắtChương này đã xác lập rằng thị trường cổ phiếu Việt Nam thể hiện các đặc điểm vi cấu trúc ảnh hưởng đáng kể đến giá, lợi nhuận và các thước đo rủi ro quan sát được. Các phát hiện chính là:1. **Biên độ giá** kiểm duyệt lợi nhuận hằng ngày, gây ra tự tương quan dương, lan truyền biến động và phân phối bị cắt cụt. Biên độ $\pm$ 7% trên HOSE đặc biệt chặt đối với các cổ phiếu biến động mạnh.2. **Giao dịch thưa thớt và lợi nhuận bằng không** ảnh hưởng đến một tỷ lệ đáng kể các doanh nghiệp niêm yết. Xác suất giao dịch dưới 50% là phổ biến trên HNX và UPCoM, tạo ra thiên lệch giao dịch không đồng bộ làm suy giảm các ước lượng beta OLS 20-40%.3. **Phi thanh khoản** biến thiên rất lớn theo mặt cắt ngang, với các tỷ số Amihud trải rộng qua nhiều bậc độ lớn. Lợi nhuận danh mục trọng số theo vốn hóa ít bị nhiễm hơn lợi nhuận trọng số bằng nhau.4. **Các hiệu chỉnh beta Dimson và Scholes-Williams** xử lý hiệu quả thiên lệch giao dịch không đồng bộ và nên được dùng làm bộ ước lượng beta mặc định cho cổ phiếu Việt Nam.5. **Các bộ lọc thanh khoản** nên được áp dụng trước mọi phân tích định giá tài sản, và kết quả nên được báo cáo có và không có các bộ lọc này như một kiểm tra độ vững.Việc bỏ qua các ma sát này không chỉ thêm nhiễu vào kết quả thực nghiệm, nó làm chệch các ước lượng một cách có hệ thống theo những hướng có thể dự đoán. Các chẩn đoán và hiệu chỉnh trình bày trong chương này tạo nền tảng cho nghiên cứu định giá tài sản thực nghiệm đáng tin cậy tại Việt Nam.<!-- ## Bài tập1. **Quy luật thanh khoản trong ngày**: Dùng dữ liệu trong ngày, tính chênh lệch giá mua–bán trung bình và độ sâu theo các khoảng 15 phút trong suốt ngày giao dịch. Ghi nhận quy luật thanh khoản trong ngày hình chữ U và thảo luận mối liên hệ của nó với các dự báo lý thuyết của @admati1988theory.2. **Kiểm định hiệu ứng nam châm**: Kiểm định giả thuyết hiệu ứng nam châm của @subrahmanyam1994circuit. Có điều kiện là một cổ phiếu chạm biên độ giá vào cuối ngày, liệu giá có tăng tốc về phía biên trong 30 phút cuối của giao dịch liên tục hay không? So sánh tốc độ giá tiến về biên trong các ngày chạm biên độ với các ngày không chạm biên độ.3. **Mô hình nhân tố điều chỉnh thanh khoản**: Xây dựng một nhân tố thanh khoản có thể giao dịch (IML: Illiquid-Minus-Liquid) bằng cách phân loại các cổ phiếu thành tam phân vị thanh khoản theo tỷ số Amihud và lập một danh mục mua–bán khống. Bổ sung nhân tố thanh khoản này vào mô hình ba nhân tố Fama-French và kiểm định xem nó có cải thiện việc định giá cổ phiếu Việt Nam hay không.4. **Chạm biên độ nhiều ngày**: Nhận diện các giai đoạn trong đó cùng một cổ phiếu chạm biên độ giá trong hai ngày liên tiếp trở lên. Mức điều chỉnh giá tích lũy trong các giai đoạn chạm biên độ nhiều ngày này là bao nhiêu? Tổng mức điều chỉnh có vượt mức kỳ vọng theo phân phối thay đổi giá một ngày hay không?5. **Giao dịch không đồng bộ và động lượng**: Hiệu ứng động lượng có thể một phần là hệ quả giả tạo của giao dịch không đồng bộ: các cổ phiếu thắng cuộc trong quá khứ có thể đơn giản là các cổ phiếu có giá gần đây hơn. Hãy kiểm tra lại phần bù động lượng sau khi thay lợi nhuận OLS bằng lợi nhuận đã điều chỉnh theo Dimson và sau khi loại các cổ phiếu có xác suất giao dịch dưới 50%.6. **So sánh giữa các sàn**: Khai thác khác biệt về biên độ giá giữa HOSE ($pm$ 7%), HNX ($pm$ 10%) và UPCoM ($pm$ 15%) để kiểm định tác động nhân quả của độ chặt biên độ giá lên lan truyền biến động, tần suất lợi nhuận bằng không và tự tương quan của lợi nhuận. Dùng thiết kế sai biệt trong sai biệt nếu có sàn nào thay đổi biên độ giá trong thời gian mẫu. -->