Trang chủBlogKinh nghiệm TradingMUỐN HỌC QUANT VỚI CHỨNG KHOÁN VIỆT NAM THÌ LẤY DỮ LIỆU Ở ĐÂU?
MUỐN HỌC QUANT VỚI CHỨNG KHOÁN VIỆT NAM THÌ LẤY DỮ LIỆU Ở ĐÂU?
Kinh nghiệm Trading

MUỐN HỌC QUANT VỚI CHỨNG KHOÁN VIỆT NAM THÌ LẤY DỮ LIỆU Ở ĐÂU?

Dữ liệu chứng khoán trong Quant

Ngọc Hải LươngNgọc Hải Lương
4/11/2026
25 phút phút đọc
24 lượt xem

Chưa cần mua dữ liệu đắt tiền hay xây dựng hệ thống phức tạp. Quan trọng là biết mình cần loại dữ liệu nào, lấy từ đâu và kiểm tra thế nào trước khi sử dụng.

Khi bắt đầu học Quant, mình thấy khá nhiều bạn gặp cùng một vấn đề: đã học được một chút Python, biết pandas, NumPy, thậm chí đã xem qua Machine Learning, nhưng đến lúc muốn làm một project với cổ phiếu Việt Nam thì không biết lấy dữ liệu từ đâu. Có bạn tải dữ liệu từ các trang chứng khoán về Excel, có bạn dùng API được chia sẻ trên GitHub, có bạn lấy trực tiếp qua thư viện Python. Dữ liệu đều có ngày, giá đóng cửa, khối lượng giao dịch nên nhìn qua có vẻ sử dụng được. Nhưng khi tính lợi suất hoặc chạy backtest, kết quả giữa các nguồn lại khác nhau. Có trường hợp cổ phiếu đột nhiên giảm vài chục phần trăm do chia cổ tức hoặc phát hành thêm, có trường hợp dữ liệu thiếu phiên, sai đơn vị giá, hoặc những cổ phiếu đã hủy niêm yết hoàn toàn không xuất hiện trong bộ dữ liệu. Những lỗi này có thể khiến một chiến lược nhìn rất tốt trên biểu đồ nhưng thực chất không thể áp dụng ngoài thị trường.

Vì vậy, nếu hỏi mình người mới học Quant nên bắt đầu từ thư viện Python nào, mình sẽ trả lời rằng trước tiên cần hiểu dữ liệu chứng khoán gồm những loại gì, mỗi nguồn giải quyết được bài toán nào và làm sao kiểm tra được dữ liệu trước khi đưa vào mô hình. Đây là kỹ năng cơ bản của Quant Research, nhưng cũng là một trong những kỹ năng quyết định chất lượng nghiên cứu về sau.

PHẦN 1. NGƯỜI MỚI HỌC QUANT NÊN LẤY DỮ LIỆU CHỨNG KHOÁN VIỆT NAM TỪ ĐÂU?

Nếu mới bắt đầu, mình nghĩ chưa cần sử dụng những bộ dữ liệu chuyên nghiệp có chi phí lớn. Để học cách tính lợi suất, biến động giá, tương quan, xây dựng tín hiệu Momentum hay backtest một chiến lược đơn giản, dữ liệu giá và khối lượng giao dịch theo ngày đã đủ để thực hành rất nhiều bài toán. Vấn đề là lựa chọn nguồn phù hợp, biết dữ liệu đó được tổng hợp như thế nào và hiểu giới hạn sử dụng của nguồn. Tại Việt Nam, chúng ta có thể chia các nguồn dữ liệu thành ba nhóm: nguồn công bố chính thức từ thị trường và doanh nghiệp, nguồn tổng hợp hoặc thư viện Python và nguồn dữ liệu thương mại phục vụ nghiên cứu chuyên nghiệp. Không có nguồn nào tốt nhất cho tất cả mục đích. Một người học Python để phân tích 20 cổ phiếu có nhu cầu khác hoàn toàn một nhóm Quant đang xây dựng hệ thống nghiên cứu hàng nghìn tín hiệu với dữ liệu nhiều năm, lịch sử báo cáo tài chính và yêu cầu tái lập kết quả tại từng thời điểm.

Nhóm đầu tiên là các nguồn chính thức như HOSE, HNX, VSDC và công bố thông tin của doanh nghiệp. Đây là nơi rất đáng tham khảo khi cần đối chiếu những sự kiện có thể làm thay đổi cách tính lợi suất, chẳng hạn niêm yết, hủy niêm yết, chia cổ tức, phát hành cổ phiếu, quyền mua hay ngày đăng ký cuối cùng. HNX có các trang dữ liệu giao dịch và thống kê theo ngày, bao gồm giá, khối lượng, giao dịch nhà đầu tư nước ngoài và những thông tin thị trường khác. VSDC công bố thông tin về các sự kiện thực hiện quyền đối với chứng khoán. Với báo cáo tài chính, chúng ta có thể lấy tài liệu gốc trên website công bố thông tin của Sở giao dịch hoặc trang quan hệ nhà đầu tư của doanh nghiệp. Ưu điểm của những nguồn này là giúp kiểm tra thông tin gốc, nhưng hạn chế đối với người mới là việc tải hàng loạt dữ liệu lịch sử không phải lúc nào cũng thuận tiện. Nguồn công bố chính thức cũng không đồng nghĩa có sẵn một API miễn phí, ổn định và không giới hạn để sử dụng cho mọi chương trình Python. Vì vậy, mình thường xem đây là lớp dữ liệu tham chiếu và đối chiếu, đặc biệt khi các nguồn khác trả về những kết quả bất thường.

Nhóm thứ hai phù hợp hơn cho việc học Python là các thư viện và nguồn dữ liệu tổng hợp. Một lựa chọn đáng tìm hiểu là Vnstock, thư viện giúp truy xuất dữ liệu chứng khoán, thông tin doanh nghiệp và một số dữ liệu tài chính thông qua những nguồn bên thứ ba. Với người mới, lợi thế của Vnstock là có thể đưa dữ liệu về pandas DataFrame, sau đó sử dụng ngay cho các thao tác tính toán, trực quan hóa và nghiên cứu. Theo tài liệu cập nhật đầu tháng 11/2026, Vnstock thế hệ 5 cung cấp giao diện thống nhất cho nhiều nhóm dữ liệu và nhiều nguồn như VCI, KBS cùng một số nguồn khác. Tuy nhiên, cần chú ý rằng những phiên bản thư viện trước đây có thể sử dụng cấu trúc hàm khác, một số nguồn đã bị thay thế hoặc ngừng hỗ trợ, và quyền truy cập cũng phụ thuộc vào cấp sử dụng. Do đó, không nên sao chép nguyên một đoạn code trên YouTube từ hai năm trước rồi mặc định rằng nó vẫn chạy đúng. Hãy đọc tài liệu của phiên bản đang cài đặt, kiểm tra giới hạn truy cập, ghi lại tên nguồn và phiên bản thư viện trong project. Quan trọng hơn, Vnstock là công cụ kết nối và chuẩn hóa dữ liệu từ những nguồn bên ngoài; sử dụng thư viện không làm cho dữ liệu tự động trở thành dữ liệu đã được kiểm chứng đầy đủ.

Ngoài Vnstock, SSI FastConnect Data cũng là một nguồn đáng tìm hiểu nếu bạn muốn làm quen với cách lấy dữ liệu qua API có tài liệu kỹ thuật rõ ràng. Tài liệu của SSI mô tả các endpoint cung cấp danh sách chứng khoán, thành phần chỉ số, dữ liệu OHLC theo ngày, dữ liệu intraday và dữ liệu chỉ số. Chẳng hạn, DailyOhlc có thể trả về ngày giao dịch, giá mở cửa, giá cao nhất, thấp nhất, đóng cửa và khối lượng giao dịch. Đây là một cấu trúc khá phù hợp cho những bài thực hành về xây dựng data pipeline. Tuy nhiên, việc truy cập API sử dụng cơ chế xác thực bằng khóa và token, vì vậy cần kiểm tra điều kiện đăng ký, quyền sử dụng và giới hạn dữ liệu trước khi triển khai. Nếu muốn học cách một hệ thống dữ liệu thực tế hoạt động, những vấn đề như xác thực, phân trang, xử lý lỗi, giới hạn truy vấn và lưu kết quả cũng là những bài tập tốt, không kém phần quan trọng so với việc tính toán chỉ báo kỹ thuật.

Nhóm thứ ba là các nguồn dữ liệu thương mại như FiinPro X và những dịch vụ dữ liệu dành cho nhà đầu tư chuyên nghiệp. FiinPro X cung cấp dữ liệu giao dịch, báo cáo tài chính, các chỉ tiêu định giá, dữ liệu doanh nghiệp và chức năng xuất dữ liệu sang Excel. Điểm có giá trị đối với nghiên cứu chuyên sâu không chỉ nằm ở việc có nhiều chỉ tiêu hơn, mà còn ở khả năng khai thác dữ liệu tài chính, so sánh doanh nghiệp, phân ngành và xây dựng bộ dữ liệu lớn hơn. Tuy nhiên, trước khi sử dụng cho research hoặc một sản phẩm thương mại, cần hỏi rõ phạm vi lịch sử, chất lượng điều chỉnh dữ liệu, khả năng truy cập dữ liệu tại thời điểm công bố, quyền sử dụng API và điều kiện lưu trữ hoặc phân phối lại. Một gói dữ liệu tốt cho việc phân tích thủ công trên Excel chưa chắc đã đủ điều kiện hoặc có cấu trúc phù hợp để chạy hệ thống Quant tự động. Với sinh viên mới học, mình không nghĩ nhất thiết phải bỏ tiền mua gói dữ liệu lớn ngay từ đầu. Hãy sử dụng dữ liệu có thể tiếp cận hợp pháp để làm được một project nhỏ, rồi chỉ nâng cấp khi đã xác định rõ dữ liệu hiện tại thiếu những gì.

Nếu cần chọn một phương án bắt đầu tương đối thực tế, mình sẽ ưu tiên lấy dữ liệu lịch sử theo ngày từ một nguồn dễ truy cập, xuất ra CSV hoặc DataFrame, sau đó đối chiếu một số phiên và sự kiện doanh nghiệp với nguồn chính thức. Cách này đủ để học những kiến thức cơ bản nhưng vẫn hình thành thói quen kiểm tra dữ liệu. Không nhất thiết phải kết nối API ngay từ ngày đầu. Nếu chưa biết Python, bạn hoàn toàn có thể bắt đầu bằng file CSV hoặc Excel. Khi đã hiểu cấu trúc dữ liệu, việc chuyển sang Python sẽ dễ dàng hơn rất nhiều.

PHẦN 2. DỮ LIỆU LẤY ĐƯỢC CHƯA CHẮC ĐÃ DÙNG ĐƯỢC: NHỮNG LỖI RẤT DỄ LÀM SAI BACKTEST

Giả sử chúng ta tải dữ liệu lịch sử của FPT, VCB, HPG, MWG và một số cổ phiếu khác trong giai đoạn 2022–2025. Bộ dữ liệu có các cột Date, Open, High, Low, Close và Volume. Nhiều bạn sẽ bắt đầu tính ngay lợi suất bằng công thức Close(t)/Close(t-1)-1, sau đó sử dụng lợi suất để tính Momentum, Volatility hoặc đưa vào mô hình Machine Learning. Về mặt cú pháp, thao tác này rất đơn giản. Nhưng có một câu hỏi phải trả lời trước: Close đang là giá giao dịch thực tế tại phiên đó, giá đã điều chỉnh sau chia tách, hay một chuỗi giá được nhà cung cấp tính lại theo phương pháp riêng? Nếu không biết, chúng ta có thể hiểu sai những biến động lớn của cổ phiếu. Ví dụ, một doanh nghiệp thực hiện chia cổ phiếu thưởng hoặc quyền mua làm giá tham chiếu được điều chỉnh giảm. Nếu dùng giá chưa điều chỉnh để tính lợi suất liên tục qua ngày sự kiện, chương trình có thể coi phần điều chỉnh kỹ thuật là một khoản thua lỗ do thị trường. Ngược lại, nếu sử dụng chuỗi giá đã điều chỉnh nhưng không hiểu phương pháp điều chỉnh, chúng ta có thể tính sai lợi nhuận của chiến lược, đặc biệt khi cần mô phỏng dòng tiền cổ tức và quyền lợi cổ đông.

Đối với nghiên cứu định lượng, mình nghĩ nên lưu riêng giá giao dịch thực tế, giá điều chỉnh nếu có, và thông tin các sự kiện doanh nghiệp liên quan. Giá điều chỉnh phù hợp để xây dựng chuỗi lợi suất có tính liên tục phục vụ một số phép phân tích, nhưng cần phân biệt việc điều chỉnh giá với tính toán Total Return đầy đủ. Nếu muốn đánh giá một chiến lược nắm giữ cổ phiếu trong nhiều năm, lợi nhuận từ cổ tức tiền mặt, cổ tức cổ phiếu, quyền mua và thời điểm thực hiện những quyền lợi đó cần được xử lý nhất quán. Đây là lý do đôi khi hai bộ dữ liệu đều được gọi là giá điều chỉnh nhưng tạo ra kết quả backtest hơi khác nhau. Trước khi kết luận một nguồn sai, cần kiểm tra cách mỗi nguồn xử lý sự kiện quyền, đơn vị giá, lịch sử cập nhật và quy tắc làm tròn. Một vài đồng chênh lệch có thể không quan trọng với phân tích dài hạn, nhưng khác biệt lớn quanh ngày chia cổ tức chắc chắn phải được giải thích.

Vấn đề thứ hai là dữ liệu thiếu và thanh khoản. Ở thị trường Việt Nam, không phải cổ phiếu nào cũng được giao dịch đều đặn mỗi ngày. Đặc biệt với một số mã thanh khoản thấp, chúng ta có thể gặp những phiên không có giao dịch khớp lệnh, giá không thay đổi trong nhiều phiên hoặc dữ liệu bị thiếu khi trích xuất. Nếu một chương trình tự động điền mọi giá thiếu bằng giá phiên trước, lợi suất sẽ có thêm nhiều phiên bằng 0. Kết quả có thể làm volatility của cổ phiếu thấp hơn thực tế hoặc khiến hệ số tương quan bị sai lệch. Nhưng nếu xóa toàn bộ những ngày không có giao dịch, chương trình lại có thể vô tình ghép hai phiên cách xa nhau thành một khoảng thời gian ngắn hơn thực tế. Vì vậy, trước khi tính lợi suất, cần phân biệt ngày thị trường nghỉ giao dịch, ngày cổ phiếu không có khớp lệnh, ngày bị đình chỉ giao dịch và ngày thiếu dữ liệu do lỗi nhà cung cấp. Những trường hợp này có ý nghĩa kinh tế khác nhau và không nên xử lý bằng cùng một thao tác fillna().

Vấn đề thứ ba là danh sách cổ phiếu thay đổi theo thời gian. Đây là một trong những lỗi khiến kết quả nghiên cứu quá khứ đẹp hơn thực tế mà người mới học thường không nhận ra. Giả sử hôm nay chúng ta lấy danh sách 30 cổ phiếu đang thuộc VN30 rồi tải lịch sử giá từ năm 2018 để kiểm tra một chiến lược. Vấn đề là danh sách VN30 năm 2018 không giống danh sách hiện tại. Có những doanh nghiệp sau này mới gia nhập chỉ số, có những doanh nghiệp đã bị loại, và một số mã có thể trải qua các sự kiện ảnh hưởng lớn đến khả năng giao dịch. Nếu chỉ nghiên cứu những cổ phiếu còn tồn tại và đủ điều kiện ở thời điểm hiện tại, chúng ta có thể đang vô tình loại bỏ những doanh nghiệp hoạt động kém trong quá khứ. Đây chính là Survivorship Bias. Để thực hiện backtest nghiêm túc, cần sử dụng danh sách cổ phiếu có thể đầu tư tại từng thời điểm, thay vì dùng danh sách hiện tại cho toàn bộ lịch sử. Với người mới, có thể bắt đầu bằng một danh mục cố định để luyện kỹ năng tính toán, nhưng phải ghi rõ đây là bài tập học dữ liệu chứ chưa phải một backtest có thể dùng để kết luận về hiệu quả chiến lược trong lịch sử.

Vấn đề thứ tư liên quan đến báo cáo tài chính, đặc biệt khi chúng ta nghiên cứu những chỉ tiêu như ROE, EPS, P/E, P/B hoặc tăng trưởng lợi nhuận. Một báo cáo tài chính quý kết thúc ngày 31/03 không có nghĩa toàn bộ thông tin trong báo cáo đã được thị trường biết vào ngày 31/03. Doanh nghiệp thường công bố báo cáo sau thời điểm kết thúc kỳ kế toán. Nếu chương trình gắn dữ liệu lợi nhuận quý I vào ngày 31/03 rồi giả định nhà đầu tư có thể lựa chọn cổ phiếu từ ngày đó, chúng ta đã sử dụng thông tin tương lai. Tình trạng này còn phức tạp hơn khi doanh nghiệp công bố báo cáo điều chỉnh hoặc số liệu sau kiểm toán khác với báo cáo trước đó. Trong Quant Research, đây là lý do dữ liệu tài chính cần quan tâm đến hai loại thời gian: kỳ dữ liệu phản ánh và thời điểm thông tin thực sự được công bố. Một cơ sở dữ liệu chỉ có cột report_quarter mà không có published_at sẽ rất khó sử dụng an toàn cho những chiến lược dựa trên thông tin cơ bản doanh nghiệp. Đối với các bài nghiên cứu nâng cao, còn cần lưu thời điểm hệ thống thu thập và phiên bản của báo cáo, để biết một kết quả được tính từ thông tin gốc hay thông tin đã được điều chỉnh về sau.

Vấn đề cuối cùng là chất lượng nguồn và khả năng tái lập kết quả. Nếu hôm nay chúng ta chạy một backtest rồi ba tháng sau tải lại cùng dữ liệu từ API, kết quả có thể thay đổi vì nhà cung cấp cập nhật lịch sử hoặc điều chỉnh giá. Điều đó không có nghĩa dữ liệu mới luôn sai; đôi khi nguồn đã sửa một lỗi cũ. Tuy nhiên, nếu không lưu bộ dữ liệu đã dùng, chúng ta sẽ không biết kết quả nghiên cứu thay đổi do mô hình hay do dữ liệu. Vì vậy, kể cả khi mới học, mình khuyến khích lưu file gốc, ngày tải, tên nguồn, phiên bản xử lý và các kiểm tra chất lượng cơ bản. Khi dữ liệu được cập nhật, nên có cách xác định những dòng đã thay đổi thay vì âm thầm ghi đè mọi thứ. Những việc này nghe có vẻ giống Data Engineering hơn là Quant, nhưng thực tế phần lớn công việc nghiên cứu định lượng nghiêm túc đều phụ thuộc vào một nền tảng dữ liệu có thể kiểm tra lại.

PHẦN 3. TỰ XÂY BỘ DỮ LIỆU ĐẦU TIÊN BẰNG EXCEL, PYTHON VÀ SQL NHƯ THẾ NÀO?

Nếu là người mới, mình sẽ đề xuất một bài thực hành nhỏ thay vì yêu cầu xây dựng ngay một data warehouse hoàn chỉnh. Hãy chọn khoảng 10–20 cổ phiếu có thanh khoản tương đối tốt, ưu tiên các doanh nghiệp thuộc những ngành khác nhau để dữ liệu có sự đa dạng. Ví dụ, có thể bắt đầu với FPT, VCB, HPG, MWG và một số cổ phiếu khác, lấy dữ liệu lịch sử từ đầu năm 2022 đến cuối năm 2025. Bài tập đầu tiên chỉ cần sử dụng dữ liệu giá và khối lượng theo ngày. Mục tiêu là tạo được một bảng thống nhất với các trường symbol, trade_date, open, high, low, close, volume, source và loaded_at. Nếu có giá điều chỉnh, nên lưu thêm adjusted_close cùng thông tin phương pháp điều chỉnh, không ghi đè trực tiếp vào giá đóng cửa gốc. Sau khi đưa các mã vào cùng một cấu trúc, hãy kiểm tra những trường hợp trùng mã và ngày, giá âm hoặc bằng 0 bất thường, giá cao nhất thấp hơn giá thấp nhất, khối lượng không hợp lệ và các khoảng thời gian thiếu dữ liệu. Với các phiên có giá biến động bất thường, cần mở lại thông tin doanh nghiệp để tìm hiểu có xảy ra chia cổ tức, quyền mua hay sự kiện khác không, thay vì vội xóa dữ liệu vì cho rằng đó là outlier.

Khi đã có bảng dữ liệu sạch tương đối, chúng ta bắt đầu làm những bài toán Quant đơn giản. Đầu tiên là tính lợi suất ngày, lợi suất 20 phiên, volatility 20 phiên, khối lượng giao dịch trung bình và mức giảm lớn nhất của từng cổ phiếu. Sau đó, so sánh kết quả giữa các mã, vẽ biểu đồ và đặt những câu hỏi như cổ phiếu nào biến động mạnh nhất, cổ phiếu nào có mức sụt giảm lớn nhất hoặc nhóm cổ phiếu nào thường biến động cùng chiều với VN-Index. Những phép tính này chưa tạo ra một chiến lược đầu tư hoàn chỉnh, nhưng giúp người học hiểu dữ liệu trước khi xây dựng mô hình. Một vấn đề mình thường gặp là nhiều bạn muốn học Random Forest hoặc XGBoost ngay khi chưa biết dữ liệu của mình có bao nhiêu phiên hợp lệ, có bao nhiêu giá trị thiếu và những biến được tính từ giá điều chỉnh hay giá gốc. Nếu không xử lý được các câu hỏi này, mô hình càng phức tạp càng khó phát hiện sai sót.

Khi chuyển sang Python, pandas sẽ giúp tự động hóa những công việc trước đây phải thực hiện nhiều lần trên Excel. Chúng ta có thể tải dữ liệu từng mã, chuẩn hóa tên cột, ghép thành một bảng, sắp xếp theo mã và ngày rồi tính các chỉ tiêu theo từng cổ phiếu. Tuy nhiên, một lỗi tương đối phổ biến là tính pct_change() trực tiếp trên cả bảng mà chưa nhóm dữ liệu theo mã. Khi đó, chương trình có thể lấy giá cuối cùng của FPT để tính lợi suất cho dòng đầu tiên của HPG, tạo ra một giá trị hoàn toàn vô nghĩa. Cách làm đúng là sắp xếp dữ liệu theo symbol, trade_date, sau đó tính lợi suất riêng trong từng nhóm cổ phiếu. Đây là một ví dụ nhỏ nhưng rất đáng nhớ: code chạy không báo lỗi chưa có nghĩa phép tính đúng về mặt tài chính. Khi dùng AI để hỗ trợ viết code, chúng ta cũng cần kiểm tra các phép tính cơ bản bằng một vài dòng dữ liệu thủ công, bởi AI có thể viết một đoạn chương trình trông hợp lý nhưng lại không hiểu cấu trúc dữ liệu đầu vào.

Sau khi đã quen với CSV và pandas, mình mới khuyến khích chuyển sang học SQL. Nhiều bạn nghĩ SQL chỉ dành cho Data Engineer, nhưng trong thực tế Quant Research, việc lưu trữ và truy vấn dữ liệu là kỹ năng rất hữu ích. Khi dữ liệu tăng từ 20 mã lên vài trăm mã, nhiều năm giao dịch và nhiều bảng báo cáo tài chính, việc sử dụng hàng trăm file Excel riêng lẻ sẽ khó kiểm soát. Với người mới, chỉ cần SQLite là đủ để làm quen, chưa nhất thiết phải triển khai PostgreSQL hay một cơ sở dữ liệu trên cloud. Hãy tạo một bảng daily_prices có các trường mã, ngày giao dịch, giá, khối lượng và nguồn dữ liệu; sau đó sử dụng SQL để truy vấn lịch sử một cổ phiếu, kiểm tra số phiên có dữ liệu, tìm những mã thiếu dữ liệu hoặc lấy danh sách cổ phiếu có thanh khoản bình quân cao nhất trong một khoảng thời gian. Những truy vấn đơn giản như SELECT, WHERE, GROUP BY, JOIN và ORDER BY sẽ đủ để thực hiện nhiều bài nghiên cứu ban đầu.

Chẳng hạn, sau khi lưu dữ liệu vào bảng daily_prices, bạn có thể sử dụng một truy vấn để kiểm tra mỗi cổ phiếu có bao nhiêu bản ghi và khoảng thời gian dữ liệu bao phủ:

SELECT

symbol,

COUNT(*) AS so_phien,

MIN(trade_date) AS tu_ngay,

MAX(trade_date) AS den_ngay

FROM daily_prices

GROUP BY symbol

ORDER BY so_phien DESC;

Điều kiện của ví dụ là mỗi mã chỉ có một bản ghi cho mỗi ngày giao dịch và trường trade_date được lưu thống nhất theo định dạng ngày có thể sắp xếp đúng, chẳng hạn YYYY-MM-DD. Đây chưa phải một quy trình kiểm tra chất lượng đầy đủ, nhưng giúp bạn làm quen với việc dùng SQL để kiểm tra dữ liệu trước khi phân tích. Nếu muốn mở rộng, có thể tạo thêm bảng corporate_actions lưu sự kiện cổ tức, chia tách, quyền mua, bảng securities lưu thông tin mã và thời gian niêm yết, bảng financial_reports lưu báo cáo tài chính cùng thời điểm công bố. Khi đó, SQL không chỉ là công cụ lấy dữ liệu nhanh hơn mà còn giúp kết nối những thông tin khác nhau theo đúng mã, đúng ngày và đúng phiên bản. Với một dự án nghiên cứu thực tế, việc thiết kế đúng cấu trúc dữ liệu từ đầu thường giúp tiết kiệm rất nhiều công sức về sau.

Một project nhỏ để tự kiểm tra khả năng làm việc với dữ liệu

Nếu cần một bài tập có sản phẩm cụ thể, mình sẽ chọn đề tài: “Xây dựng bộ dữ liệu cổ phiếu Việt Nam và kiểm tra chiến lược Momentum 20 phiên.” Trong tuần đầu tiên, chỉ tập trung thu thập dữ liệu của 10–20 mã, đưa về một bảng chuẩn, đối chiếu những phiên bất thường và viết báo cáo chất lượng dữ liệu ngắn. Sang tuần thứ hai, dùng pandas hoặc SQL tạo các biến như lợi suất 1 phiên, 20 phiên, volatility và khối lượng trung bình. Tiếp theo, tại cuối mỗi tháng, thử xếp hạng những cổ phiếu có Momentum 20 phiên cao nhất, lựa chọn một nhóm nhỏ và đo lợi suất trong kỳ tiếp theo. Cần xác định rõ tín hiệu được tính sau khi có dữ liệu đóng cửa và lệnh giả định chỉ được thực hiện tại thời điểm có thể giao dịch tiếp theo, đồng thời đưa phí vào phép tính. Với bộ cổ phiếu cố định, kết quả ban đầu chỉ có ý nghĩa học phương pháp; để nghiên cứu hiệu quả lịch sử một cách nghiêm túc, cần mở rộng sang danh sách cổ phiếu khả dụng tại từng thời điểm và kiểm soát các trường hợp hủy niêm yết hoặc ngừng giao dịch.

Đến cuối project, sản phẩm nên gồm một bộ dữ liệu CSV hoặc SQLite có thể sử dụng lại, một notebook Python tính toán các Features, một bảng kiểm tra những vấn đề dữ liệu đã phát hiện và một báo cáo ngắn về kết quả thử nghiệm. Điều đáng giá không nhất thiết là chiến lược Momentum tạo ra lợi nhuận tốt hơn VN-Index. Nếu chiến lược hoạt động kém nhưng bạn có thể giải thích rõ dữ liệu được lấy từ đâu, kiểm tra như thế nào, các phép tính được thực hiện ra sao và những giới hạn nào có thể ảnh hưởng đến kết quả, thì bạn đã học được những kỹ năng thực tế mà một người làm Quant phải sử dụng. Một project có thể tái lập và giải thích được thường có giá trị học tập cao hơn một notebook phức tạp nhưng không ai biết dữ liệu đầu vào đã được xử lý như thế nào.

Điều mình muốn nhấn mạnh là người mới không cần cố tìm bằng được một nguồn dữ liệu hoàn hảo trước khi bắt đầu. Ngay cả những tổ chức đầu tư chuyên nghiệp cũng phải đối mặt với các vấn đề về dữ liệu thiếu, nguồn không đồng nhất, điều chỉnh lịch sử và chất lượng thông tin. Sự khác biệt nằm ở cách họ nhận diện, ghi nhận và kiểm soát những vấn đề đó. Một nguồn dữ liệu miễn phí, được kiểm tra cẩn thận và sử dụng đúng phạm vi có thể đủ tốt cho việc học. Ngược lại, một bộ dữ liệu trả phí nhưng bị sử dụng sai thời điểm hoặc sai phương pháp vẫn có thể khiến nghiên cứu thất bại.

LỜI KẾT

Nếu mới học Quant tại Việt Nam, mình không nghĩ cần bắt đầu bằng việc mua dữ liệu chuyên nghiệp hay xây dựng ngay một hệ thống tự động lấy dữ liệu thị trường. Hãy bắt đầu từ một bài toán đủ nhỏ, chẳng hạn phân tích lợi suất và volatility của 10–20 cổ phiếu, rồi học cách thu thập, lưu trữ, làm sạch và kiểm tra dữ liệu. Khi đã hiểu các vấn đề cơ bản, hãy sử dụng Python để tự động hóa và SQL để quản lý dữ liệu có cấu trúc. Đến lúc nghiên cứu trên một universe lớn, nhiều năm lịch sử hoặc sử dụng thông tin tài chính theo thời điểm công bố, chúng ta mới cần đầu tư sâu hơn vào dữ liệu point-in-time, danh sách cổ phiếu lịch sử, corporate actions và hệ thống kiểm soát chất lượng.

Một trong những điều quan trọng nhất mình học được khi làm việc với dữ liệu tài chính là dữ liệu có sẵn chưa chắc là dữ liệu đúng, dữ liệu đúng chưa chắc phù hợp với bài toán và dữ liệu phù hợp hôm nay chưa chắc đã tồn tại tại thời điểm mà backtest giả định. Đây chính là lý do công việc Quant không bắt đầu từ việc chọn thuật toán Machine Learning mạnh nhất, mà bắt đầu từ việc hiểu rõ dữ liệu và những giả định đang nằm phía sau mỗi phép tính.

Với những bạn đang học Python hoặc muốn chuyển từ phân tích chứng khoán thông thường sang Quant Research, mình nghĩ hoàn thành được một bộ dữ liệu nhỏ nhưng đáng tin cậy là bước khởi đầu rất tốt. Khi đã có nền tảng này, những bài toán về Backtesting, Factor Investing, Stock Ranking, Portfolio Optimization hay Machine Learning sẽ dễ tiếp cận hơn rất nhiều, bởi chúng ta biết mô hình đang sử dụng thông tin gì và kết quả có thể được kiểm chứng từ đâu.

Mình cũng muốn hỏi thêm mọi người trong nhóm: Khi bắt đầu nghiên cứu chứng khoán Việt Nam bằng Python, các bạn đang lấy dữ liệu từ Excel, Vnstock, API của công ty chứng khoán hay những nguồn khác? Khó khăn lớn nhất là không tìm được dữ liệu, dữ liệu không đầy đủ, chưa biết cách làm sạch hay chưa biết tổ chức dữ liệu để chạy backtest?

Mình muốn tiếp tục chia sẻ những bài thực hành theo từng bước, từ lấy dữ liệu một cổ phiếu, làm sạch bằng pandas, lưu vào SQLite đến xây dựng một backtest đầu tiên có thể tự chạy lại. Nếu mọi người có nhu cầu, chúng ta có thể bắt đầu bằng một project thực tế trên dữ liệu chứng khoán Việt Nam thay vì chỉ học lý thuyết.