Thống kê giá lịch sử
Chứng khoán Việt Nam
Các hàm tra cứu thông tin giá lịch sử tại Vnstock sử dụng dữ liệu trực tiếp từ dữ liệu công khai của công ty chứng khoán cho thị trường Việt Nam. Dữ liệu trả về là dữ liệu thời gian thực trong giờ giao dịch. Dữ liệu trả về dữ liệu của ngày giao dịch gần nhất (thứ 6 nếu không rơi vào ngày lễ) nếu truy xuất dữ liệu vào cuối tuần hoặc đầu giờ ngày thứ 2. Mô tả dữ liệu trả về dưới đây phản ánh dữ liệu trả về từ nguồn dữ liệu mặc định VCI
.
Hiện tại bạn có thể lựa chọn nguồn dữ liệu VCI
hoặc TCBS
để truy xuất thông tin giá lịch sử và dữ liệu khớp lệnh mã chứng khoán (cổ phiếu, hợp đồng tương lai, chứng quyền, trái phiếu) bất kỳ.
Ưu tiên sử dụng nguồn VCI
để đảm bảo độ phủ dữ liệu các lớp tài sản chứng khoán nhiều nhất.
Thông tin nguồn dữ liệu được cài đặt khi khởi tạo đối tượng python trước khi gọi các hàm lấy thông tin từng loại báo cáo cụ thể hoặc chỉ số tài chính.
from vnstock3 import Vnstock
stock = Vnstock().stock(symbol='VCI', source='VCI')
Danh sách các loại chứng khoán được hỗ trợ:
- Cổ phiếu: xem tại mục Liệt kê tất cả mã cổ phiếu
- Chỉ số:
VNINDEX
,HNXINDEX
,UPCOMINDEX
,VN30
,HNX30
- Hợp đồng tương lai: Chấp nhận cả hai kiểu nhập tên là
VN30F1M
vàVN30F2411
- Chứng quyền:
CFPT2314
- Trái phiếu niêm yết:
CII424002
(hiện tại chỉ nguồn VCI hỗ trợ) - Chứng chỉ quỹ - ETF: Tra cứu như với mã cổ phiếu, ví dụ
E1VFVN30
Chi tiết các mã chứng khoán thuộc từng loại kể trên có thể được tra cứu tại mục Danh sách niêm yết - Liệt kê CP theo phân nhóm
Giá lịch sử
Dữ liệu giá lịch sử thể hiện lịch sử giá giao dịch (đã điều chỉnh) của mã chứng khoán bất kỳ. Đây là dữ liệu được sử dụng để biểu diễn đồ thị kỹ thuật với định dạng tiêu chuẩn OHLCVT (Open, High, Low, Close, Volume, Time). Tại Việt Nam, dữ liệu này được biểu diễn thông qua thư viện đồ thị TradingView Advanced Chart (hoặc Trading Platform với một số ít đơn vị sử dụng) và hiển thị trên website giao dịch của công ty chứng khoán.
Gọi hàm
stock.quote.history(start='2020-01-01', end='2024-05-25')
Tham số
symbol
(không bắt buộc): nhập mã chứng khoán cần tra cứu, chấp nhận mã cổ phiếu, hợp đồng tương lai, chứng quyền, chỉ số, trái phiếu. Nếu không sử dụng tham số này thì thông tin mã chứng khoán được kế thừa từ câu lệnh khởi tạo class, ví dụstock = Vnstock().stock(symbol='VCI', source='VCI')
. Nếu khai báo mã chứng khoán mới thì thuộc tínhsymbol
của đối tượng vnstock sẽ được cập nhật theo mã này. Không khuyến khích sử dụng tham số này vì dữ liệu trả vì đôi khi bạn không phân biệt được đang lấy dữ liệu từ mã nào, cần phải kiểm tra lại thuộc tínhname
như dưới đây để xác nhận.start
: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạngYYYY-mm-dd
end
: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạngYYYY-mm-dd
interval
: Khung thời gian lấy mẫu dữ liệu. Mặc định là1D
cho phép trả về dữ liệu lịch sử theo ngày. Các giá trị khác bao gồm:1m
: 1 phút5m
: 5 phút15m
: 15 phút30m
: 30 phút1H
: 1 giờ1W
: 1 tuần1M
: 1 tháng
to_df
: Cho phép kết quả truy vấn trả về là pandas DataFrame hay JSON. Mặc định làTrue
trả về DataFrame, đặt làFalse
nếu muốn nhận kết quả dưới dạng JSON.
Dữ liệu mẫu:
>>> stock.quote.history(start='2020-01-01', end='2024-05-25')
time open high low close volume
0 2020-01-02 9.35 9.35 9.22 9.35 18320
1 2020-01-03 9.35 9.35 9.19 9.35 2450
2 2020-01-06 9.03 9.45 9.03 9.22 22760
3 2020-01-07 9.48 9.48 9.22 9.22 18320
4 2020-01-08 9.03 9.22 9.03 9.22 2640
... ... ... ... ... ... ...
1090 2024-05-20 49.60 50.80 49.35 50.20 9166100
1091 2024-05-21 50.20 50.80 49.60 50.80 5080200
1092 2024-05-22 51.00 51.80 49.90 50.00 8228600
1093 2024-05-23 49.80 50.10 48.10 50.00 6339300
1094 2024-05-24 49.50 50.00 47.00 47.95 9856900
[1095 rows x 6 columns]
Thuộc tính dữ liệu Bạn có thể truy xuất thông tin thuộc tính của dữ liệu trả về với 2 thông tin sau:
name
: Tên mã chứng khoáncategory
: Tên loại tài sản mã chứng khoán đó thuộc về.
>>> df.name
'VCI'
>>> df.category
'stock'
Kiểu dữ liệu
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1095 entries, 0 to 1094
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 time 1095 non-null datetime64[ns]
1 open 1095 non-null float64
2 high 1095 non-null float64
3 low 1095 non-null float64
4 close 1095 non-null float64
5 volume 1095 non-null int64
dtypes: datetime64[ns](1), float64(4), int64(1)
memory usage: 51.5 KB
Dữ liệu giá lịch sử cho đồ thị nến (ohlcv) là dữ liệu sinh ra từ phép lấy mẫu theo tần suất thời gian được chỉ định (ví dụ 1 phút hay 1 ngày) trên cơ sở dữ liệu khớp lệnh (intraday). Phép tổng hợp được sử dụng như sau:
open
: mốc thời gian quan sát sớm nhất. Sử dụng phép tổng hợpfirst()
.close
: mốc thời gian quan sát sau cùng. Sử dụng phép tổng hợplast()
.high
: giá cao nhất. Sử dụng phép tổng hợpmax()
low
: giá thấp nhất. Sử dụng phép tổng hợpmin()
Dữ liệu được trả về từ hàm history()
là dữ liệu đã tổng hợp sẵn, có điều chỉnh khi có sự kiện quyền (chia tách, trả cổ tức cổ phiếu), được cung cấp bởi công ty chứng khoán/dịch vụ cung cấp dữ liệu.
Hiểu bản chất của dữ liệu, giúp bạn tuỳ biến và phân tích một cách linh hoạt. Nếu những nội dung này mới lạ với bạn, khoá học mà dự án Vnstock x LEarn Anything cung cấp sẽ hữu ích để bạn hiểu hơn về dữ liệu trên thị trường chứng khoán và cách sử dụng chúng hiệu quả.
Dữ liệu khớp lệnh
Dữ liệu intraday thể hiện giao dịch khớp lệnh trong phiên có độ chính xác đến hàng giây theo thời gian thực khi truy cứu trong khung giờ giao dịch 9:00 - 15:00 hàng ngày. Dữ liệu này hay được gọi với tên gọi intraday
. Độ lớn của số điểm dữ liệu giao dịch mỗi ngày cho các mã chứng khoán lớn có thể lên đến ~15,000 dòng cho 1 ngày, thông thường dữ liệu này chỉ được cung cấp trong từng ngày, nếu bạn có nhu cầu sử dụng lâu dài sẽ cần lưu trữ lại để phân tích.
Gọi hàm
stock.quote.intraday()
Tham số
symbol
(tuỳ chọn): Mặc định hàm này không cần tham số, thông tin mã chứng khoán được lấy từ thông tinsymbol
bạn đã chỉ định khi khởi tạo đối tượngstock
ở trên. Nhập giá trị khác giá trịsymbol
đã có để chuyển đổi nhanh sang truy xuất dữ liệu mã chứng khoán bất kỳ mà không cần khởi tạo lại đối tượng.page_size
(tùy chọn): Số lượng dữ liệu trả về trong một lần request. Mặc định là 100. Không giới hạn số lượng tối đa. Tăng số này lên để lấy toàn bộ dữ liêu, ví dụ 10_000.last_time
(tùy chọn): Thời gian cắt dữ liệu, dùng để lấy dữ liệu sau thời gian cắt. Mặc định là None.
Dữ liệu mẫu:
>>> stock.quote.intraday(symbol='VCI')
time price volume match_type id
99 2024-05-24 14:29:02 48000.0 40000 Buy 206446786
98 2024-05-24 14:29:04 48000.0 2000 Buy 206447031
96 2024-05-24 14:29:05 48000.0 3000 Buy 206447056
97 2024-05-24 14:29:05 48000.0 400 Buy 206447055
95 2024-05-24 14:29:06 48000.0 10000 Buy 206447096
.. ... ... ... ... ...
4 2024-05-24 14:29:54 48150.0 500 Buy 206451651
3 2024-05-24 14:29:54 48200.0 300 Buy 206451652
2 2024-05-24 14:29:55 48000.0 100 Sell 206451802
1 2024-05-24 14:29:59 48200.0 100 Buy 206452236
0 2024-05-24 14:45:06 47950.0 639200 ATO/ATC 206453858
[100 rows x 5 columns]
Giải thích thuật ngữ
time
: thời gian khớp lệnh. Bắt đầu từ 9:15 đến 14:45 trong ngày giao dịch.price
: Mức giá của giao dịch mua/bán được khớp lệnh.volume
: Khối lượng giao dịch của lệnh mua/bán được khớp.match_type
: Loại giao dịch được mua/bán.id
: mã giao dịch. Thông tin này sử dụng làm mốc để ghép nối dữ liệu nếu thực hiện truy xuất dữ liệu từng phần.
Từ giá trị độ giao dịch được tính toán thông qua giá và khối lượng giao dịch, có thể ước lượng và phân loại nhà đầu tư. Đây cũng là cách một số website chứng khoán sử dụng để phân cấp Cá mập
, Sói già
, Cừu non
.
Kiểu dữ liệu
<class 'pandas.core.frame.DataFrame'>
Index: 100 entries, 99 to 0
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 time 100 non-null datetime64[ns]
1 price 100 non-null float64
2 volume 100 non-null int64
3 match_type 100 non-null object
4 id 100 non-null object
dtypes: datetime64[ns](1), float64(1), int64(1), object(2)
memory usage: 4.7+ KB
Chứng khoán quốc tế
Trước khi gọi hàm và truy xuất dữ liệu theo các cú pháp thuộc từng mục bên dưới, bạn chắc chắn rằng đã gọi Vnstock class từ thư viện vnstock3. Dữ liệu chỉ có khung thời gian cuối ngày, tức mặc định là interval='1D'
.
from vnstock3 import Vnstock
Có 2 hình thức truy xuất dữ liệu từ hàm của Vnstock3 cho nhóm dữ liệu này:
- Gọi theo các hàm từ Vnstock class như dưới đây tại các mục Forex, Crypto, Chỉ số quốc tế. Cách này hạn chế số mã có thể được tra cứu vì danh sách phân loại sẵn để chuyển đổi giữa tên symbol và mã tra cứu từ nguồn dữ liệu không đầy đủ. Tuy nhiên đây là cách dùng tiện lợi và tự nhiên nhất bạn nên dùng. Đối với các mã chứng khoán bạn cần tìm không được hỗ trợ sẵn, hãy làm theo cách thứ 2.
- Gọi theo hàm
quote
từ lõi phần mềm, sử dụng nguồnmsn
.
from vnstock3.explorer.msn.quote import *
quote = Quote(symbol_id='avyufr')
quote.history(start='2020-01-01', end='2024-12-31')
Trong đó, symbol_id
là mã định danh tương ứng từng symbol
được chỉ định bởi MSN, bạn có thể tra cứu mã này với cú pháp:
from vnstock3.explorer.msn.listing import Listing
Listing().search_symbol_id('USD')
Forex (FX)
Gọi hàm
fx = Vnstock().fx(symbol='JPYVND', source='MSN')
fx.quote.history(start='2024-02-28', end='2024-05-25')
Tham số
symbol
: Mã cặp tiền tệ cần tra cứu. Hiện tại hàm hỗ trợ truy xuất dữ liệu trực tiếp cho các cặp tiền tệ sau:USDVND
,JPYVND
,AUDVND
,CNYVND
,KRWVND
,USDJPY
,USDEUR
,USDCAD
,USDCHF
,USDCNY
,USDKRW
,USDSGD
,USDHKD
,USDTRY
,USDINR
,USDDKK
,USDSEK
,USDILS
,USDRUB
,USDMXN
,USDZAR
,EURUSD
,EURVND
,EURJPY
,EURGBP
,EURCHF
,EURCAD
,EURAUD
,EURNZD
,GBPJPY
,GBPVND
,GBPUSD
,GBPAUD
,GBPCHF
,GBPNZD
,GBPCAD
,AUDUSD
,NZDUSD
.start
: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạngYYYY-mm-dd
end
: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạngYYYY-mm-dd
interval
(tuỳ chọn): Khung thời gian lấy mẫu dữ liệu. Chỉ hỗ trợ giá trị "1D" để lấy dữ liệu cuối ngày.
Dữ liệu mẫu:
>>> fx.quote.history(start='2024-02-28', end='2024-05-25')
time open high low close
0 2024-02-28 163.60 163.88 163.20 163.37
1 2024-02-29 163.37 165.13 163.36 164.28
2 2024-03-01 164.28 164.30 163.45 164.12
3 2024-03-04 164.15 164.43 163.76 163.92
4 2024-03-05 163.92 164.92 163.76 164.55
.. ... ... ... ... ...
58 2024-05-20 163.54 163.68 162.80 162.87
59 2024-05-21 162.87 163.37 162.47 163.02
60 2024-05-22 163.00 163.09 162.34 162.40
61 2024-05-23 162.40 162.70 162.01 162.28
62 2024-05-24 162.27 162.37 162.03 162.18
[63 rows x 5 columns]
Kiểu dữ liệu
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 63 entries, 0 to 62
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 time 63 non-null datetime64[ns]
1 open 63 non-null float64
2 high 63 non-null float64
3 low 63 non-null float64
4 close 63 non-null float64
dtypes: datetime64[ns](1), float64(4)
memory usage: 2.6 KB
Crypto
Gọi hàm
crypto = Vnstock().crypto(symbol='BTC', source='MSN')
crypto.quote.history(start='2023-01-01', end='2024-12-31')
Tham số
symbol
: Mã crypto bạn cần tra cứu. Hiện tại hỗ trợ các mã sau:BTC
,ETH
,USDT
,USDC
,BNB
,BUSD
,XRP
,ADA
,SOL
,DOGE
start
: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạngYYYY-mm-dd
end
: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạngYYYY-mm-dd
interval
(tuỳ chọn): Khung thời gian lấy mẫu dữ liệu. Chỉ hỗ trợ giá trị "1D" để lấy dữ liệu cuối ngày.
Dữ liệu mẫu:
>>> crypto.quote.history(start='2023-01-01', end='2024-12-31')
time open high low close volume
151 2023-01-07 4.284546e+08 4.324123e+08 4.253995e+08 4.313937e+08 366798893802898
152 2023-02-06 5.937590e+08 5.960796e+08 5.812771e+08 5.841758e+08 497871354777384
153 2023-03-08 5.707559e+08 5.732777e+08 5.601426e+08 5.654487e+08 579335227686628
154 2023-04-07 7.170032e+08 7.170835e+08 7.058959e+08 7.136673e+08 352144573109365
Kiểu dữ liệu
<class 'pandas.core.frame.DataFrame'>
Index: 17 entries, 151 to 167
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 time 17 non-null datetime64[ns]
1 open 17 non-null float64
2 high 17 non-null float64
3 low 17 non-null float64
4 close 17 non-null float64
5 volume 17 non-null int64
dtypes: datetime64[ns](1), float64(4), int64(1)
memory usage: 952.0 bytes
Chỉ số quốc tế
Gọi hàm
index = Vnstock().world_index(symbol='DJI', source='MSN')
index.quote.history(start='2023-01-01', end='2024-12-31')
-
symbol
: mã chỉ số bạn cần tra cứu. Sử dụng một trong các mã sau:INX
: S&P 500 IndexDJI
: Dow Jones Industrial AverageCOMP
: Nasdaq Composite IndexRUT
: Russell 2000 IndexNYA
: NYSE Composite IndexRUI
: Russell 1000 IndexRUA
: Russell 3000 IndexUKX
: FTSE 100 IndexDAX
: DAX IndexPX1
: CAC 40 IndexN225
: Nikkei 225 Index000001
: Shanghai SE Composite IndexHSI
: Hang Seng IndexSENSEX
: S&P BSE Sensex IndexME00000000
: S&P/BMV IPC
-
start
: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạngYYYY-mm-dd
-
end
: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạngYYYY-mm-dd
-
interval
(tuỳ chọn): Khung thời gian lấy mẫu dữ liệu. Chỉ hỗ trợ giá trị "1D" để lấy dữ liệu cuối ngày.
Dữ liệu mẫu:
>>> index.quote.history(start='2023-01-01', end='2024-12-31')
time open high low close volume
0 2023-01-03 33148.90 33387.52 32850.57 33136.37 358608345
1 2023-01-04 33165.14 33409.10 33033.48 33269.77 383346276
2 2023-01-05 33191.72 33191.72 32812.33 32930.08 342665273
3 2023-01-06 33055.30 33710.66 32997.39 33630.61 365497603
4 2023-01-09 33664.39 33935.11 33487.66 33517.65 327846929
.. ... ... ... ... ... ...
346 2024-05-20 39989.76 40077.40 39787.09 39806.77 275306588
347 2024-05-21 39804.40 39905.80 39778.73 39872.99 318222838
348 2024-05-22 39863.33 39890.91 39559.09 39671.04 260936322
349 2024-05-23 39694.95 39694.95 39025.51 39065.26 338754861
350 2024-05-24 39089.23 39220.31 39020.29 39069.59 254833323
[351 rows x 6 columns]
Kiểu dữ liệu
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 351 entries, 0 to 350
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 time 351 non-null datetime64[ns]
1 open 351 non-null float64
2 high 351 non-null float64
3 low 351 non-null float64
4 close 351 non-null float64
5 volume 351 non-null int64
dtypes: datetime64[ns](1), float64(4), int64(1)
memory usage: 16.6 KB