Nhảy tới nội dung

Thống kê giá lịch sử

Chứng khoán Việt Nam

Gợi ý

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ợ:

Giá lịch sử

Gợi ý

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ố

  • start: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạng YYYY-mm-dd
  • end: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạng YYYY-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út
    • 5m: 5 phút
    • 15m: 15 phút
    • 30m: 30 phút
    • 1H: 1 giờ
    • 1W: 1 tuần
    • 1M: 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án
  • category: 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
Có thể bạn chưa biết

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ợp first().
  • close: mốc thời gian quan sát sau cùng. Sử dụng phép tổng hợp last().
  • high: giá cao nhất. Sử dụng phép tổng hợp max()
  • low: giá thấp nhất. Sử dụng phép tổng hợp min()

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

Gợi ý

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 tin symbol bạn đã chỉ định khi khởi tạo đối tượng stock ở 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.
Có thể bạn chưa biết

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:

  1. 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.
  2. Gọi theo hàm quote từ lõi phần mềm, sử dụng nguồn msn.
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ạng YYYY-mm-dd
  • end: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạng YYYY-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ạng YYYY-mm-dd
  • end: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạng YYYY-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 Index
    • DJI: Dow Jones Industrial Average
    • COMP: Nasdaq Composite Index
    • RUT: Russell 2000 Index
    • NYA: NYSE Composite Index
    • RUI: Russell 1000 Index
    • RUA: Russell 3000 Index
    • UKX: FTSE 100 Index
    • DAX: DAX Index
    • PX1: CAC 40 Index
    • N225: Nikkei 225 Index
    • 000001: Shanghai SE Composite Index
    • HSI: Hang Seng Index
    • SENSEX: S&P BSE Sensex Index
    • ME00000000: S&P/BMV IPC
  • start: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạng YYYY-mm-dd

  • end: Ngày kết thúc của truy vấn dữ liệu lịch sử. Định dạng YYYY-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