Trang chủBlogKinh nghiệm TradingCác loại dữ liệu trong giao dịch thuật toán: Không phải cứ nhiều dữ liệu là chiến lược tốt hơn
Các loại dữ liệu trong giao dịch thuật toán: Không phải cứ nhiều dữ liệu là chiến lược tốt hơn
Kinh nghiệm Trading

Các loại dữ liệu trong giao dịch thuật toán: Không phải cứ nhiều dữ liệu là chiến lược tốt hơn

Các loại dữ liệu trong giao dịch thuật toán

Ngọc Hải LươngNgọc Hải Lương
18/8/2026
14 phút phút đọc
18 lượt xem

Phần 1. Giao dịch thuật toán bắt đầu từ dữ liệu, nhưng dữ liệu không chỉ có giá đóng cửa và khối lượng

Khi mới tiếp cận giao dịch thuật toán, dữ liệu thường được hiểu khá đơn giản: lấy Open, High, Low, Close và Volume, sau đó tính MA, RSI, Momentum rồi backtest. Đây là điểm bắt đầu hợp lý vì OHLCV đủ để xây dựng rất nhiều chiến lược trend following, breakout hay mean reversion. Nhưng khi strategy đi từ một ý tưởng đơn giản sang giao dịch intraday hoặc execution thực tế, lượng thông tin cần thiết bắt đầu khác đi. Bài viết của QM Capital về chủ đề này cũng đề cập những dữ liệu cơ bản như thời gian khớp lệnh, giá và khối lượng khớp lệnh, cùng giá và khối lượng chờ mua/bán.

bc7faaa2-096b-4e8f-a4d1-646d86d43ad7.png

Nhóm dễ hiểu nhất là dữ liệu giá lịch sử. Với dữ liệu ngày, mỗi phiên thường có Open – High – Low – Close – Volume. Từ đây có thể tính return, volatility, MA20, MA50, RSI, ATR, breakout 20 phiên hay Relative Strength. Ví dụ một chiến lược đơn giản chỉ cần kiểm tra cổ phiếu đang trên MA50, vừa vượt đỉnh 20 phiên và volume cao hơn trung bình. Với loại strategy này, việc sở hữu từng giao dịch xảy ra trong ngày chưa chắc tạo thêm nhiều giá trị. Một file dữ liệu ngày sạch, điều chỉnh đúng và đủ dài đôi khi hữu ích hơn một kho tick data rất lớn nhưng không biết dùng để làm gì.

Khi chuyển sang intraday, dữ liệu cần chi tiết hơn. Một cây nến 5 phút có thể cho biết trong khoảng thời gian đó giá mở cửa ở 50.000, cao nhất 50.500, thấp nhất 49.800 và đóng cửa 50.400. Nhưng nó không cho biết bên trong 5 phút đó giá đã di chuyển theo trình tự nào. Có thể giá rơi xuống 49.800 trước rồi mới bật mạnh lên 50.500, cũng có thể giá lên 50.500 trước rồi mới bị bán xuống. Với swing trading, khác biệt này thường không quá lớn; với scalping hay execution, nó có thể ảnh hưởng trực tiếp đến việc Stop Loss hay Take Profit được kích hoạt trước.

Chi tiết hơn nữa là trade data hay tick data. Mỗi giao dịch có thể được ghi nhận theo dạng thời gian, giá và khối lượng. Ví dụ:

09:30:01.120   50.100   1.000
09:30:01.450   50.100     500
09:30:02.030   50.200   2.000
09:30:02.510   50.150     700

Dữ liệu này cho phép nghiên cứu tốc độ giao dịch, volume theo từng mức giá, biến động rất ngắn hạn hoặc market microstructure. Nhưng đổi lại số lượng dữ liệu tăng lên rất nhanh. Một strategy giữ cổ phiếu 20 ngày gần như không cần độ chi tiết tới mili giây. Trong khi một bot intraday giữ vị thế vài chục giây có thể cần chính loại dữ liệu đó.

Một nhóm khác rất quan trọng là quote data, tức giá chờ mua và giá chờ bán. Giả sử trên thị trường:

Best Bid : 49.900
Best Ask : 50.000
Spread   : 100

Nếu backtest giả định cứ có tín hiệu là mua được tại 49.900 hoặc tại giá Close gần nhất, kết quả có thể quá lạc quan. Người muốn mua ngay thường phải giao dịch gần Ask, còn người muốn bán ngay thường phải giao dịch gần Bid. Khoảng cách Bid–Ask tạo thành một phần của chi phí thực thi. Strategy giao dịch càng nhiều thì chi phí này càng quan trọng.

Sâu hơn nữa là order book. Thay vì chỉ nhìn mức Bid và Ask tốt nhất, dữ liệu này cho thấy nhiều tầng lệnh mua bán đang chờ trên thị trường. Ví dụ có 20.000 đơn vị chờ mua ở một mức giá nhưng chỉ 2.000 đơn vị chờ bán phía trên sẽ tạo một cấu trúc khác với trường hợp ngược lại. Order book có thể được dùng để nghiên cứu liquidity, imbalance hoặc market impact, nhưng cũng là loại dữ liệu khó xử lý hơn rất nhiều. Khối lượng chờ có thể được thêm, hủy hoặc thay đổi nhanh; việc nhìn thấy một lượng lệnh lớn không có nghĩa toàn bộ lượng lệnh đó cuối cùng sẽ được khớp.

Ngoài market data còn có fundamental data như doanh thu, lợi nhuận, ROE, nợ, dòng tiền, valuation; macro data như lãi suất, CPI, tỷ giá; flow data như giao dịch khối ngoại; hoặc alternative data như sentiment từ tin tức. Một strategy có thể chỉ cần giá và volume, nhưng một model stock selection dài hạn lại có thể kết hợp Momentum với ROE, Earnings Growth và valuation. Điều quan trọng không phải thu thập càng nhiều dữ liệu càng tốt, mà là dữ liệu đó phải liên quan tới giả thuyết đầu tư đang được kiểm tra.

Phần 2. Strategy khác nhau cần dữ liệu khác nhau, lấy dữ liệu quá chi tiết đôi khi chỉ làm bài toán khó hơn

Giả sử muốn xây một chiến lược Momentum trên cổ phiếu Việt Nam với thời gian giữ vị thế khoảng một tháng. Ý tưởng có thể rất đơn giản: mỗi tuần chọn những cổ phiếu có return 60 ngày cao, Relative Strength tốt so với VN-Index và thanh khoản đủ lớn. Với bài toán này, dữ liệu ngày đã đủ để xây gần như toàn bộ strategy. Return 60 ngày, volatility 20 ngày, Average Daily Value, MA50 và Relative Strength đều có thể tính từ OHLCV. Việc mua thêm tick data hoặc toàn bộ order book nhiều năm chưa chắc làm strategy tốt hơn mà chỉ tăng chi phí lưu trữ, xử lý và kiểm tra dữ liệu.

Ngược lại, một strategy scalping VN30F1M giữ lệnh vài chục giây lại hoàn toàn khác. Nếu chỉ có nến 5 phút, rất nhiều thông tin đã bị nén lại. Strategy có thể cần tick data để biết giá di chuyển thế nào trong từng giây, Bid–Ask để ước lượng spread và order book để quan sát liquidity. Backtest bằng nến 5 phút có thể cho kết quả đẹp vì giả định vào được đúng giá, nhưng khi live trading mới phát hiện phần lớn lợi nhuận bị mất bởi spread và slippage. Vì vậy cùng gọi là “giao dịch thuật toán”, nhưng dữ liệu cho swing trading và dữ liệu cho intraday execution có thể khác nhau rất xa.

Có thể hình dung khá đơn giản:

Đầu tư / Swing dài ngày
→ OHLCV ngày + Fundamental + Market Data cơ bản

Intraday theo phút
→ OHLCV intraday + Volume + Bid/Ask

Scalping
→ Tick Data + Bid/Ask + Execution Data

Market Making / Microstructure
→ Order Book + Trades + Latency + Fill Data

Không có loại dữ liệu nào mặc định tốt nhất. Dữ liệu tốt nhất là dữ liệu vừa đủ để trả lời bài toán.

Một phần thường bị đánh giá thấp hơn số lượng dữ liệu là chất lượng dữ liệu. Hai người có thể cùng backtest một chiến lược MA50 nhưng cho kết quả khác nhau chỉ vì bộ dữ liệu khác nhau. Một người sử dụng giá chưa điều chỉnh khi xảy ra corporate action, người khác sử dụng adjusted price. Một bộ dữ liệu thiếu các cổ phiếu đã hủy niêm yết trong quá khứ có thể tạo survivorship bias. Một model fundamental còn dễ gặp lỗi hơn nếu lấy số liệu báo cáo tài chính theo kỳ kế toán nhưng không quan tâm ngày thông tin thực sự được công bố.

Giả sử doanh nghiệp công bố báo cáo quý II vào ngày 20/08. Nếu dataset ghi ROE quý II cho toàn bộ dữ liệu từ ngày 30/06, backtest từ tháng 7 đã vô tình được sử dụng thông tin mà nhà đầu tư tại thời điểm đó chưa biết. Model có thể trông rất thông minh nhưng thực chất đang nhìn tương lai. Với dữ liệu tài chính, một biến thường có ít nhất hai mốc cần phân biệt: kỳ dữ liệu phản ánh và ngày dữ liệu thực sự có thể được sử dụng.

Timestamp cũng là vấn đề tương tự trong intraday. Nếu signal được tạo bằng giá Close của nến 10:00–10:05 thì trader chỉ biết hoàn chỉnh giá Close đó sau khi nến kết thúc. Backtest không thể vừa sử dụng Close 10:05 để tạo tín hiệu vừa giả định đã mua được chính xác tại Close 10:05 mà không xem xét latency và cách khớp lệnh. Sai lệch chỉ một bước thời gian nhỏ cũng có thể làm một backtest intraday đẹp hơn đáng kể.

Dữ liệu càng chi tiết thì vấn đề càng nhiều. Tick có thể trùng, mất bản ghi hoặc tới không đúng thứ tự. Quote có thể thay đổi liên tục. Order book cần xử lý thêm các sự kiện thêm lệnh, sửa lệnh, hủy lệnh và khớp lệnh. Alternative data lại có vấn đề về text cleaning, sentiment classification và lịch sử dữ liệu. Vì vậy việc đi thẳng tới “Big Data” chưa chắc là nâng cấp. Với nhiều strategy, một bộ OHLCV sạch và một hypothesis rõ ràng vẫn đáng giá hơn hàng terabyte dữ liệu nhưng không có câu hỏi nghiên cứu cụ thể.

Một sai lầm khác là tạo quá nhiều feature chỉ vì có nhiều dữ liệu. Từ OHLCV có thể dễ dàng tạo hàng trăm indicator: RSI 7, RSI 14, RSI 21, MA10, MA20, MA30, Bollinger Bands, MACD, ATR, ROC, Momentum… Sau đó thêm fundamental, foreign flow, macro và sentiment, model có thể nhanh chóng có vài trăm biến. Nhưng nhiều biến trong số đó thực chất đo những thứ rất giống nhau. MA20, Momentum20 và Distance from MA20 đều chứa nhiều thông tin liên quan đến xu hướng giá gần đây. Thêm nhiều biến tương quan không đồng nghĩa model nhận được nhiều thông tin độc lập hơn.

Trong Quant, dữ liệu vì vậy nên đi sau giả thuyết. Nếu giả thuyết là “cổ phiếu có Relative Strength tốt thường tiếp tục outperform”, dữ liệu cần thiết trước tiên là giá cổ phiếu và benchmark. Nếu giả thuyết là “volume bất thường làm breakout đáng tin hơn”, cần price và volume. Nếu muốn nghiên cứu execution cost, lúc đó Bid–Ask và order book mới bắt đầu trở nên cần thiết. Cách tiếp cận này giữ cho nghiên cứu đơn giản, dễ kiểm tra và giảm khả năng biến một bài toán đầu tư thành bài toán xử lý dữ liệu không cần thiết.

Phần 3. Một quy trình thực tế: bắt đầu từ câu hỏi đầu tư rồi mới chọn dữ liệu và xây strategy

Giả sử muốn nghiên cứu một strategy khá phổ biến: cổ phiếu vừa breakout khỏi đỉnh 60 phiên với volume lớn có tiếp tục tăng tốt hơn thị trường hay không. Chưa cần fundamental, news sentiment hay order book. Dữ liệu tối thiểu chỉ cần Date, Open, High, Low, Close và Volume. Từ đó tính High 60 phiên trước và Volume trung bình 20 phiên:

df["high60"] = df["high"].rolling(60).max().shift(1)
df["vol_ma20"] = df["volume"].rolling(20).mean()

df["breakout"] = (
    (df["close"] > df["high60"]) &
    (df["volume"] > 1.5 * df["vol_ma20"])
)

Sau đó đo return 5, 20 và 60 phiên sau tín hiệu. Chỉ riêng bài test này đã có thể trả lời được khá nhiều: breakout có edge hay không, volume có tạo thêm giá trị không, tín hiệu hoạt động tốt hơn ở nhóm vốn hóa nào và có phụ thuộc vào trạng thái VN-Index hay không.

Nếu kết quả cho thấy strategy có tiềm năng, lúc đó mới thêm dữ liệu. Chẳng hạn bổ sung Relative Strength để loại những cổ phiếu chỉ tăng theo toàn thị trường, thêm Average Trading Value để loại các mã quá kém thanh khoản hoặc thêm market regime để phân biệt bull và bear market. Mỗi dữ liệu mới nên giải quyết một vấn đề cụ thể. Relative Strength giải quyết câu chuyện sức mạnh tương đối; liquidity data giải quyết khả năng thực thi; regime data giải quyết việc cùng một signal có thể hoạt động khác nhau trong các môi trường thị trường khác nhau.

Quy trình có thể giữ khá đơn giản:

Ý tưởng đầu tư
→ Xác định dữ liệu tối thiểu
→ Làm sạch dữ liệu
→ Tạo feature
→ Backtest
→ Kiểm tra Out-of-Sample
→ Thêm chi phí giao dịch
→ Paper Trading
→ Live nhỏ

Không nhất thiết bước đầu tiên phải là “tìm dataset lớn nhất có thể”.

Một ví dụ khác là Mean Reversion. Nếu muốn kiểm tra cổ phiếu giảm mạnh trong vài phiên có khả năng hồi hay không, chỉ cần return, volatility và có thể thêm RSI. Sau đó mới kiểm tra xem kết quả thay đổi thế nào khi tách VN-Index > MA200VN-Index < MA200. Nếu tín hiệu chỉ hoạt động trong bull market, market regime đã bổ sung thông tin thực sự. Đây là cách data nên được thêm vào: từng lớp một và mỗi lớp phải chứng minh được giá trị.

Với intraday, quy trình tương tự nhưng phải thêm execution. Giả sử backtest chiến lược cho lợi nhuận trung bình 0,15% mỗi trade. Nếu spread, slippage và phí tổng cộng khoảng 0,10%, edge thực tế chỉ còn 0,05%. Khi đó Bid–Ask data quan trọng hơn việc thêm một indicator mới. Strategy có thể dự báo hướng giá khá tốt nhưng vẫn không kiếm được tiền vì chi phí giao dịch ăn hết lợi thế. Dữ liệu execution lúc này không phải phần phụ mà trở thành một phần của strategy.

Khi model đã chạy live, lại xuất hiện một nhóm dữ liệu mới: dữ liệu vận hành. Hệ thống nên lưu signal được tạo lúc nào, order được gửi lúc nào, giá mong muốn, giá thực tế, khối lượng khớp, slippage và P&L. Chẳng hạn:

Signal Price     : 50.000
Expected Entry   : 50.050
Actual Fill      : 50.180
Slippage         : +130

Nếu backtest vẫn tốt nhưng live performance giảm, chính dữ liệu này giúp xác định lỗi nằm ở model hay execution. Nếu signal vẫn đúng hướng nhưng giá khớp liên tục xấu, vấn đề không nằm ở dự báo mà ở cách giao dịch.

Một hệ thống tốt vì vậy không chỉ lưu market data mà còn phải lưu dữ liệu của chính quá trình giao dịch. Sau một vài nghìn lệnh, execution data có thể cho biết strategy thường bị trượt giá mạnh ở thời điểm nào, loại cổ phiếu nào khó khớp, position size nào bắt đầu tạo market impact và loại order nào cho fill tốt hơn. Đây là phần dữ liệu chỉ xuất hiện sau khi strategy đi vào vận hành, nhưng lại rất quan trọng nếu muốn scale vốn.

Với người mới học Quant, không cần bắt đầu bằng order book hay alternative data. Một lộ trình dễ hơn là OHLCV → technical features → benchmark/Relative Strength → fundamental → intraday data → Bid/Ask → order book. Chỉ nên bước sang lớp dữ liệu phức tạp hơn khi strategy thực sự cần nó.

Dữ liệu trong giao dịch thuật toán cuối cùng không phải cuộc thi xem ai có nhiều dòng dữ liệu hơn. Một strategy giữ vị thế một tháng có thể chỉ cần vài cột dữ liệu ngày nhưng vẫn có logic tốt. Một strategy giữ lệnh 30 giây có thể cần hàng triệu bản ghi và vẫn thất bại nếu giả định execution sai. Giá trị của dữ liệu nằm ở việc nó giúp trả lời đúng một câu hỏi đầu tư, không nằm ở kích thước của dataset.

Bắt đầu bằng một hypothesis rõ, lấy lượng dữ liệu vừa đủ để kiểm tra, sau đó chỉ thêm dữ liệu khi nó thực sự giải quyết một vấn đề mới. Cách này đơn giản hơn, dễ backtest hơn và cũng giúp hiểu rõ strategy đang kiếm tiền nhờ đâu thay vì để một kho dữ liệu lớn che mất logic đầu tư ban đầu.