Tải dữ liệu chứng khoán từ TCBS api

vnstock – Tải dữ liệu chứng khoán với Python qua API

vnstock là gói thư viện Python cho phép tải dữ liệu chứng khoán với cú pháp đơn giản sử dụng dữ liệu đáng tin cậy được cung cấp bởi public api từ các công ty chứng khoán và dịch vụ dữ liệu tại Việt Nam.

Thư viện này được tôi tạo ra lấy cảm hứng từ investingpy (sử dụng nguồn cấp dữ liệu từ investing.com). Phiên bản đầu tiên của vnstock lần đầu tiên được phát hành ngày 27/2/2022.

Version Download Badge Commit Badge License Badge

I. Giới thiệu chung

Lý do ra đời của dự án này cũng thật đặc biệt, tôi rất thích phân tích dữ liệu với Python và thử áp dụng vào việc phân tích đầu tư thực tế để nâng cao kỹ năng kỹ thuật và rèn luyện tư duy. Cho đến hiện tại, khi tìm kiếm trên internet về “api dữ liệu chứng khoán”, “nguồn cấp dữ liệu chứng khoán” hay “tải dữ liệu chứng khoán” thì đa phần những cái tên hiện ra đều khá truyền thống như cophieu68, vietstock, cafef mà đặc thù là bạn có thể xem trên web hoặc tải file excel hoặc csv dùng cho phần mềm Amibroker. Một số dịch vụ khác cung cấp api dữ liệu nhưng cần trả phí hoặc thủ tục đăng ký rắc rối trong khi tôi muốn sử dụng cho mục đích nghiên cứu và tiết kiệm chi phí nhất có thể (không cần trả phí càng tốt). Thêm nữa, để giảm thiểu các thao tác truy xuất dữ liệu và đưa vào model tính toán thông thường với Excel mất thời gian, tôi thích sử dụng Google Sheets kết hợp với Python để tự động hoá các khâu phân tích cơ bản. Tất nhiên với một số phân tích và nhóm dữ liệu nhất định, bạn có thể gọi API để kéo data trực tiếp vào Google Colab đơn giản nhưng khi sử dụng ở nhiều môi trường máy tính khác nhau (desktop lẫn server), hay thay đổi giữa các tài khoản Google khác nhau thì việc tạo ra 1 thư viện giúp đơn giản hoá việc tận dụng lại những đoạn code viết sẵn, workbook trở nên thanh thoát và dễ làm việc hơn nhiều.

Tư tưởng dẫn dắt cho việc xây dựng thư viện tải dữ liệu chứng khoán này là “Đơn giản, dùng tốt và có tính lâu dài”. Bạn có thể tìm thấy mã nguồn mở của thư viện trên Github tại vnstock. Nếu cần bạn có thể đóng góp công sức vào cải tiến thư viện này để có thể sử dụng thuận tiện hơn. Bản thân tôi rất yêu thích và ấn tượng với ý nghĩa của những dự án mã nguồn mở đối với cộng đồng nhất là sự ra đời của Linux. Lần đầu tiên tôi học cách xây dựng 1 thư viện Python qua dự án này và cũng với mong muốn đóng góp một phần nhỏ nhoi vào cộng đồng mã nguồn mở để cổ vũ cho ý tưởng PAY IT FORWARD tôi cho rằng rất có ý nghĩa.

vnstock - Tải dữ liệu chứng khoán với python

II. Đôi điều về nguồn tải dữ liệu chứng khoán từ TCBS và SSI

Qua quá trình sử dụng, tôi phải nói rằng TCBS là 1 trong số hiếm các công ty chứng khoán cung cấp dữ liệu phân tích rất đầy đủ, trực quan, thuận tiện cho việc sử dụng nhất là đối với các nhà đầu tư F0. Ngoài ra TCBS cũng sử dụng hình thức cung cấp dữ liệu lên web thông qua public api, do đó việc tận dụng các api này cho việc lấy dữ liệu trở nên đơn giản hơn rất nhiều so với cách truyền thống là scrape html table hay selenium để tải file. Trong khi đó dữ liệu được truyền qua api và được đọc bằng pandas rất nhanh chóng, hầu hết các trường hợp bạn chỉ cần đâu đó 1-2 giây để có được toàn bộ lịch sử giá của 1 cổ phiếu bất kỳ trong vòng 1 năm.

Với SSI, có khá nhiều dữ liệu phân tích sử dụng nguồn cấp từ Fiin Trade tôi cho rằng rất có giá trị và sử dụng thuận tiện, đôi khi đặc biệt và hữu ích hơn những thông tin do TCBS cung cấp. Dữ liệu từ SSI cung cấp qua thư viện vnstock cũng đến từ public api (tương tự bạn truy cập website thông qua trình duyệt).

Sử dụng thư viện python vnstock tải dữ liệu chứng khoán

Trong phạm vi bài viết này, tôi cung cấp demo và cách tải dữ liệu chứng khoán và lưu file vào Google Drive dưới hình thức đơn giản nhất để các bạn hình dung cách thức hoạt động của thư viện vnstock. Bạn có thể xem hướng dẫn sử dụng các hàm có sẵn trong thư viện tại file README trên github repo chính thức tại đây.

Đối với một số thuật ngữ, code name của dữ liệu lấy trực tiếp từ API tôi chưa có thời gian đổi lại tên cho dễ hiểu, các bạn có thể tìm lại trong danh sách thuật ngữ tại đây.

Bạn có thể sử dụng Google Colab là môi trường chạy Python để thử nghiệm thư viện vnstock và tải dữ liệu chứng khoán mà không cần thông qua các bước cài đặt phức tạp bằng đoạn code mẫu dưới đây. Các bạn có thể click vào nút “Open in Colab” trong phần Github gist preview để mở file với Google Colab. Bạn hãy tạo bản copy của file notebook này và thử nghiệm thêm những hàm thú vị khác nhé.

Tham gia cộng đồng vnstock

Bạn có thể đọc thêm chi tiết về cộng đồng vnstock và góp sức phát triển cộng đồng tại đây.

Tính năng mới InteractiveSheet trong Google Colab làm việc dễ dàng với Google Sheets

Nội dung chínhGiới thiệuLợi ích của InteractiveSheetTính năng nổi bậtCách sử dụng InteractiveSheet trong Google Colab1. Nhúng cửa sổ làm việc Google Sheets vào Google Colab2. Mở file có sẵn theo ID3. Đọc dữ liệu từ Sheets từ 1 WorkSheet cụ thể qua DataFrame4. Tạo Sheets rỗng5. Tạo sheet mới với dữ liệu từ Vnstock6. […]

III. Trang thông tin chính thức

Hiện tại, vnstock có mặt chính thức trên các trang/nền tảng sau. Bạn có thể theo dõi và kết nối để cập nhật những thông tin mới nhất:

IV. Báo lỗi & phản hồi

Trong quá trình sử dụng vnstock, nếu gặp lỗi, các bạn có thể gửi phản hồi trong phần bình luận của bài viết này, tạo New issue trực tiếp trên Github hoặc tham gia cộng đồng Vnstock qua Discord/Facebook để được hỗ trợ. Để tôi có thể dễ dàng sửa lỗi nhanh chóng, bạn vui lòng gửi kèm ảnh chụp màn hình thể hiện câu lệnh bạn thực hiện và lỗi xuất hiện.

Bạn có thể tham gia cộng đồng vnstock qua 2 hình thức sau:

V. Ủng hộ tác giả

Nếu thấy vnstock hữu ích, bạn có thể donate để tôi tiếp tục phát triển thêm và đồng thời chia sẻ nhiều dự án open-source khác tới cộng đồng. Dưới đây là mã QR Momo và tài khoản ngân hàng nhận đóng góp hoặc đơn giản là bạn gửi tặng tôi 1 ly cafe. Cám ơn bạn đã ghé thăm.

VI. Web app cho người dùng phổ thông

Phiên bản vnstock web app cho người dùng phổ thông hỗ trợ các tính năng cơ bản bao gồm xem trước và tải file dữ liệu. 

Giao diện người dùng thân thiện cho phép bạn chọn các thông số cần thiết để tải dữ liệu qua các form và widget được cung cấp bởi nền tảng streamlit. App được xây dựng hoàn toàn bằng Python.


VII. File demo tính năng thư viện vnstock

Để truy cập nhanh và trải nghiệm các tính năng mạnh mẽ của vnstock thông qua file demo, bạn truy cập đường dẫn sau:

4.6/5 - (5 votes)

75 comments

  1. Dear anh Thịnh,

    Xin tự giới thiệu với anh, em là Duy, hiện đang học Master về Fintech. Em đang tìm kiếm cách import giá cổ phiếu vn vào python để phân tích và thấy vnstock rất hữu ích. Tuy nhiên khi em thử trên máy em thì nhận được error như sau:
    – No module named ‘openpyxl’

    vnstock em đọc thấy rất đầy đủ dữ liệu để làm phân tích. Mong anh sớm fix lỗi.

    1. Hi Duy,
      Trong lúc chờ update cho package này, em có thể khắc phục báo lỗi trên bằng cách install package openpyxl với pip trong terminal với câu lệnh “pip install openpyxl” nhé.
      Thân,

  2. Hi anh, mình có cách nào lấy hết dữ liệu các mã trong 1 năm k ạ? em cho vào vòng for mà nó chạy lâu quá

    1. Không có cách nào khác em nhé. Mình nên chia việc lấy dữ liệu thành các job nhỏ cho từng nhóm mã CP thay vì chạy vòng lặp liên tục cho gần 2k mã CP và truy vấn dữ liệu trong 1 năm dễ dẫn đến việc bị chặn truy cập bất thường làm ảnh hưởng performance của API.

  3. Hi anh, em muốn thống kê thông tin khối lượng giao dịch của nhà đầu tư nước ngoài, khối tự doanh của từng cổ phiếu thì dùng câu lệnh ntn ạ?

    1. Cám ơn Harry đã quan tâm đến vnstock. Dữ liệu giao dịch tự doanh có sẵn trên SSI iboard nhưng hiện tại anh chưa cung cấp trong vnstock. Tính năng này anh sẽ cân nhắc bổ sung thêm khi có thời gian nhé.

  4. Cảm ơn Admin, t đã học phân tích dữ liệu được nhiều từ thư viện này. Có một chút chưa rõ, mong Admin giúp đỡ: 1. Có thể lấy được chỉ số VN index được không, ví dụ df=stock_historical_data(‘VNINDEX’,”2021-01-01″,’2022-02-25′). 2. Có thể lấy lịch sử giá theo chu kỳ mỗi tuần được không?

    1. Cám ơn bạn đã quan tâm, mình trả lời 2 câu hỏi trên như sau:
      1. Mình có thể lấy được chỉ số VNIndex nhưng chưa hỗ trợ trong thư viện này. Item này mình có thể bố sung trong thời gian tới
      2. Bạn cần copy hàm stock_historical_data từ source code ra và tùy chỉnh lại link request nếu muốn đổi resolution để xuất data từ day sang week, month, vv. Mình có thể cập nhật hàm này trong phiên bản tiếp theo, cho phép thay đổi resolution dễ hơn. Đoạn code mình nhắc đến như này     data = requests.get(‘https://apipubaws.tcbs.com.vn/stock-insight/v1/stock/bars-long-term?ticker={}&type=stock&resolution=D&from={}&to={}’.format(symbol, fd, td)).json()

      Bạn thấy đổi resolution=day sang week nhé.
      Chúc bạn thành công.

      1. cảm ơn Admin rất nhiều, tớ đã lấy được thông tin theo tuần rồi, lấy được thông tin theo 4 giờ (4H) mà thử lấy theo 30 phút (30m) hay 1 giờ (1h) không được, có lẽ giới hạn chỉ đến mức 4h nhỉ.

  5. Hi anh, hiện tại em thử import package và chạy listing_companies() thì báo lỗi như sau:

    AttributeError: partially initialized module ‘vnstock’ has no attribute ‘listing_companies’ (most likely due to a circular import)

    mong anh chỉ giáo ạ

    1. Hi Hoàng, anh không rõ em chạy lệnh ở môi trường Google Colab hay local và em dùng những câu lệnh nào thì gặp lỗi trên. Anh có thử lại demo notebook trên Colab được đính kèm bài viết thì không gặp lỗi. Để review lỗi kỹ hơn em giúp anh share notebook của mình tới email support@thinhvu.com nhé.

  6. df = stock_historical_data(symbol=’xxx’, start_date=”2021-01-01″, end_date=’2022-09-22′)
    anh cho hỏi muốn xem dữ liệu vnindex chung thì ‘xxx’ gõ ký tự gì
    cám ơn

    1. Chào Phong,
      Hàm stock_historical_data chỉ cho phép lấy dữ liệu lịch sử của một mã chứng khoán bất kỳ. Hiện tại mình chưa hỗ trợ lấy dữ liệu index với vnstock.
      Cám ơn bạn.

    2. Chào Phong, hiện tại vnstock đã hỗ trợ lấy dữ liệu các chỉ số hiện có trên thị trường (VNINDEX, VN30, vv). Em có thể tìm đọc readme trên Github tại mục 2.15.4 nhé. Lưu ý: Để sử dụng cách cài đặt package từ github source để có thể sử dụng các tính năng mới nhất của thư viện. Thân!

  7. Hi anh, anh cho em hỏi 1 chút về listing_companies() vì giờ em xem liệt kê doanh nghiệp giờ có 3229 bản ghi mà mình mới có 1630 thì cập nhật sao ạ? Em cảm ơn

  8. Hi bạn, dường như ở bảng giá, dữ liệu Khối lượng giao dịch không có được cập nhật nữa

        1. Cám ơn Đạt đã phản hồi. Xin lỗi bạn vì tôi không có đủ thông tin để hỗ trợ và tôi không thường xuyên làm việc với vnstock nên rất mất thời gian để đoán bạn đang đề cập đến vấn đề gì. Bạn vui lòng gửi lại ảnh chụp màn hình trong đó thể hiện câu lệnh và báo lỗi để tôi có thể kiểm tra nhé. Thân!

  9. Anh Thịnh cho em hỏi mình xem giá trực tiếp (realtime) bằng vnstock được không ạ? Em cảm ơn anh!

    1. Hi Luân, để xem giá trực tiếp, em tìm mục Intraday Trading Data trong file Readme của Github repo nhé. Dữ liệu này được lấy từ nguồn TCBS hiển thị cho người dùng và thể hiện giá gần nhất realtime.

  10. Chào Bạn, cho t hỏi có thể lấy lịch sử giá theo khung thời gian h1 bằng lệnh historical_data_stock(symbol,start_date,end_date,interval=’1h’) được không? cảm ơn rất nhiều

    1. Hi James, mình có phản hồi như sau:
      1. Mình đoán là bạn đang nói tới hàm stock_historical_data bởi mình không viết bất kỳ hàm nào có tên như bạn mô tả với vnstock
      2. Bạn không thể tự ý chèn parameter interval được vì hàm này không được định nghĩa sẽ dùng tham số này làm gì. Bạn có thể fork repo hoặc copy source code cho mình hàm này để sửa lại link đang dùng để request data. Hiện tại resolution mặc định là D (ngày) nên nếu muốn có dữ liệu hàng giờ bạn có thể đổi thành H (giờ).
      Tham chiếu dòng 71: https://github.com/thinh-vu/vnstock/blob/main/vnstock/stock.py#L53-L71

  11. Chào bạn, t làm theo đổi resolution ở request D thành H để lấy dữ liệu theo giờ mà không được, có lẽ khung thời gian bị giới hạn từ D trở lên. Nếu có cách khác để lấy theo giờ mong bạn giúp đỡ. Cảm ơn bạn rất nhiều, thư viện này rất hữu ích.

    1. Hi James, lâu mình không xem nên nhầm chút, bạn đổi resolution=60 cho giờ nhé. Nếu muốn lấy theo 1 phút, 5 phút, 15 phút thì thay thế D thành lần lượt 1, 5 và 15. Với dữ liệu là ngày, tuần, tháng thì dùng D, W, M. Như vậy các giá trị có thể sử dụng cho resolution ở đây bao gồm: 1, 5, 15, 60, D, W, M.

  12. chào Bạn, t đổi D thành 60 và vẫn có lỗi {‘status’: 400, ‘code’: ‘889004’, ‘message’: “Invalid ‘resolution’ param”, ‘traceId’: ‘4810fa93a7c40746′}. Bạn có thể xem giúp t đoạn code này được không? from datetime import datetime, timedelta
    import time
    import requests
    symbol=’HPG’
    fd = int(time.mktime(time.strptime(‘2023-03-25’, ‘%Y-%m-%d’)))
    td = int(time.mktime(time.strptime(‘2023-03-29’, ‘%Y-%m-%d’)))
    data = requests.get(‘https://apipubaws.tcbs.com.vn/stock-insight/v1/stock/bars-long-term?ticker={}&type=stock&resolution=60&from={}&to={}’.format(symbol, fd, td)).json()
    print (data)

    1. Mình xem lại thì có vẻ như sẽ cần tuỳ chỉnh lại về function và lệnh bên dưới. Việc này cần thêm thời gian nên mình có thể sẽ cập nhật trong bản tiếp theo. Cám ơn bạn đã kiên nhẫn theo dõi!

      1. Cảm ơn Bạn rất nhiều, T đã làm theo hướng dẫn của Bạn và có kết quả rồi!

  13. Mình đang chạy thử python 3.11 trên windows, mình đã install vnstock rồi. Tới lúc import module theo hướng dẫn [from vnstock import *] thì mình gặp phải lỗi như sau, như lỗi này là sao vậy ạ? Xin cảm ơn.

    Traceback (most recent call last):
    File “”, line 1, in
    from vnstock import *
    File “C:\Users\namhp\AppData\Local\Programs\Python\Python311\Lib\site-packages\vnstock\__init__.py”, line 7, in
    from .stock import *
    File “C:\Users\namhp\AppData\Local\Programs\Python\Python311\Lib\site-packages\vnstock\stock.py”, line 4, in
    import pandas as pd
    ModuleNotFoundError: No module named ‘pandas’

    1. Bạn chưa cài đặt pandas cho bản python của mình nên import không thành công vì vnstock sử dụng pandas. Bạn có thể cài đặt Anaconda để có đầy đủ các thư viện cần thiết thay vì dùng pip cài đặt từng thư viện khi mới chỉ có mình python thuần.

    1. Chào Thông,
      Anh không có API document của TCBS vì đây là API riêng của công ty họ, API này dùng cho mục đích cung cấp dữ liệu chứng khoán nhưng không dành cho người dùng với mục đích crawl dữ liệu. Thường khi các công ty phát hiện API bị lạm dụng, có thể họ sẽ nâng cấp bảo mật và dùng các biện pháp chặn bot traffic (đơn giản nhất có lẽ là Capcha với Cloudflare).
      Thân

  14. Bác cho em hỏi là em có đọc thấy hướng dẫn lấy giá của 1 mã CK như sau:
    df = stock_historical_data(“GMD”, “2021-01-01”, “2022-02-25”)
    print(df.head()).
    Nhưng khi in ra thì chỉ được 5 ngày sau ngày bắt đầu. Vậy là có vấn đề gì ạ.

    1. Chào Việt,
      `.head()` function của Pandas DataFrame cho phép hiển thị n dòng đầu tiên của DataFrame, mặc định là 5 dòng. Khi bạn print(df.head()) là bạn đang xem trước dữ liệu với 5 dòng đầu tiên, thực tế dữ liệu của df DataFrame vẫn đầy đủ. Kể cả khi bạn print(df) thì terminal cũng sẽ không hiển thị hết dữ liệu nhưng đối tượng df vẫn sẵn sàng để bạn thao tác với các phép tính. Bạn có thể tìm hiểu thêm về pandas để nắm rõ cách tương tác với các dữ liệu nhận được. Tham khảo thêm tại đây: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.head.html

  15. Em chào anh ạ, em chạy câu lệnh listing_companies() thì gặp lỗi như bên dưới. Em phải làm thế nào ạ? Em cảm ơn anh ạ.
    Traceback (most recent call last):
    File “/Users/phongnguyen/opt/anaconda3/lib/python3.9/site-packages/requests/models.py”, line 971, in json
    return complexjson.loads(self.text, **kwargs)
    File “/Users/phongnguyen/opt/anaconda3/lib/python3.9/json/__init__.py”, line 346, in loads
    return _default_decoder.decode(s)
    File “/Users/phongnguyen/opt/anaconda3/lib/python3.9/json/decoder.py”, line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File “/Users/phongnguyen/opt/anaconda3/lib/python3.9/json/decoder.py”, line 355, in raw_decode
    raise JSONDecodeError(“Expecting value”, s, err.value) from None
    JSONDecodeError: Expecting value

    During handling of the above exception, another exception occurred:
    Traceback (most recent call last):
    File “/Users/phongnguyen/opt/anaconda3/lib/python3.9/site-packages/spyder_kernels/py3compat.py”, line 356, in compat_exec
    exec(code, globals, locals)
    File “/Users/phongnguyen/Library/CloudStorage/OneDrive-NEOMABusinessSchool/Dissertation/untitled2.py”, line 13, in
    listing_companies()
    File “/Users/phongnguyen/opt/anaconda3/lib/python3.9/site-packages/vnstock/stock.py”, line 19, in listing_companies
    r = api_request(url)
    File “/Users/phongnguyen/opt/anaconda3/lib/python3.9/site-packages/vnstock/stock.py”, line 387, in api_request
    r = requests.get(url, headers=headers).json()
    File “/Users/phongnguyen/opt/anaconda3/lib/python3.9/site-packages/requests/models.py”, line 975, in json
    raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
    JSONDecodeError: Expecting value

    1. Hi em, đây là lỗi đã được report, tạm thời em có thể tải file csv đính kèm trong repo để sử dụng trong khi chờ fix lỗi nhé. Thân

  16. Hay quá, tình cờ tìm thấy cái liab này. Rất hay và load data rất nhanh. mặc dù còn nhiều function và module bị lỗi nên không get data được. Nhưng mà chắc chắn những gì Thịnh làm rất là hữu ích.

    1. Cám ơn anh Huy đã chia sẻ những feedback rất hay từ góc độ một người làm về tài chính và thị trường chứng khoán trong buổi gặp trực tiếp. Hy vọng anh sẽ luôn ủng hộ và đồng hành cùng vnstock cũng như chia sẻ những ý kiến giá trị để phát triển vnstock hơn nữa cho cộng đồng nghiên cứu và đầu tư.

  17. Xin chào anh Thịnh,
    1. hiện tại API listing_companies() đang gặp lỗi khi fetch https://fiin-core.ssi.com.vn/Master/GetListOrganization?language=vi, khả năng thì nó bị chặn ko crawl đc từ API này rồi anh.
    2. API stock_intraday_data(symbol, page_num, page_size), trong mô tả không giới hạn page_size, nhưng nếu để giá trị 5000 như gợi ý sẽ gặp lỗi. Kiểm tra từ nguồn ‘https://apipubaws.tcbs.com.vn/stock-insight/v1/intraday/{}/his/paging?page={}&size={}’ thì thấy giới hạn chỉ có 100 items cho api này

    1. Hi Linh, cám ơn em đã chia sẻ thông tin. Anh đã test toàn bộ các hàm và ghi nhận các lỗi trên xảy ra (trên môi trường colab) và sẽ tiến hành nghiên cứu, sửa lỗi trong khoảng 1-2 tuần tới. Cám ơn em đã kiên nhẫn. Với các báo lỗi chi tiết, em có thể báo cáo thông qua Github để tiện các bạn khác được biết và anh đưa vào lộ trình sửa lỗi cho tiện ha. Gửi em link discussion thread: https://github.com/thinh-vu/vnstock/discussions/16 và mục issue https://github.com/thinh-vu/vnstock/issues

    1. Hi 蘇先生,

      An issue has arisen with the function listing_companies() that is known (broken for Google Colab but work well on local machine such as Windows and macOS computers). Please follow up with the issue reported on Github. I will work on a hotfix and have it completed within the next 1 to 2 weeks from now.

  18. Em chào anh ạ, em gặp lỗi khi chạy câu lệnh stock_intraday_data và . Anh có thể hướng dẫn em khắc phục được không ạ? Em cảm ơn ạ.
    —————————————————————————
    KeyError Traceback (most recent call last)
    /var/folders/nv/lrclcff51yv4w8s61j0908x00000gn/T/ipykernel_6194/1239023116.py in
    —-> 1 stock_intraday_data(symbol=’SLS’,
    2 page_num=0,
    3 page_size=5000)

    ~/opt/anaconda3/lib/python3.9/site-packages/vnstock/stock.py in stock_intraday_data(symbol, page_num, page_size)
    144 else: #today is weekday
    145 data = requests.get(‘https://apipubaws.tcbs.com.vn/stock-insight/v1/intraday/{}/his/paging?page={}&size={}’.format(symbol, page_num, page_size)).json()
    –> 146 df = json_normalize(data[‘data’]).rename(columns={‘p’:’price’, ‘v’:’volume’, ‘t’: ‘time’})
    147 return df
    148

    KeyError: ‘data’

    1. Chào Emma, em có thể đọc kỹ document trên Github để tìm hàm mình cần nhé. Để được trợ giúp em vui lòng chia sẻ thêm thông tin mình cần gì vì anh cũng không rõ em muốn lấy hết đánh sách mã hay giá cả nên ko thể trả lời.
      Thân

  19. df = stock_historical_data(symbol=’ACB’, start_date=”2023-05-01″, end_date=’2023-05-31′) dạ chỗ này ạ a , a muốn lấy hết list mã cổ phiếu ạ

  20. Chào Thịnh Vũ, rất cảm ơn bạn vì package rất hữu dụng.
    Mình đang định lấy giá của 1 cổ phiếu và warning nếu giá xuống thấp hơn 1 threadholds nào đó, mình đang xem hàm stock_intraday_data(symbol=’TCB’, page_num=0, page_size=100), thì page_num = 0 đang là setup để lấy những thông tin update nhất đúng ko? Nếu để page_num giá trị > 0 thì là truy xuất lại những giao dịch trước đó?
    Cảm ơn bạn.

    1. Chào Tu.Pham,
      Trong hàm này, thông số page=0 và page_num phục cho mục đích truy xuất dữ liệu để hiển thị lên web (nên có khái niệm trang ở đây). Bạn có thể tăng số page_num lên đến giới hạn cao nhất trong khi để nguyên page=0. Hoặc nếu bạn muốn truy xuất dữ liệu cũ hơn thì thử tăng page lên 1,2, vv nhé.
      Thân!

    1. Chào ton.nguyen,
      Hiện tại vnstock chưa hỗ trợ đầy đủ việc lấy thông tin thị trường và các chỉ số. Anh sẽ bổ sung các tính năng này trong những phiên bản tới. Em có thể theo dõi Fanpage để nhận được cập nhật mới nhất khi phiên bản tiếp theo phát hành nhé. https://www.facebook.com/vnstock.official
      Thân!

  21. Chào Thịnh, cảm ơn bạn đã tạo ra 1 thư viện rất hữu ích để lấy được dữ liệu chứng khoán. Thịnh cho hỏi là mình có thể lấy tổng giá trị giao dịch mua và bán trong ngày của từng mã chứng khoán, cũng như khối lượng mua và bán trong ngày thì mình dùng lệnh gì vậy. Cảm ơn Thịnh!

    1. Chào Nam, hiện tại vnstock chỉ hỗ trợ lấy thông tin lịch sử giá theo dạng OHLC (Open, High, Low, Close) kèm theo khối lượng giao dịch mà chưa cung cấp đầy đủ các thông số như bạn đang cần. Thịnh sẽ cân nhắc bổ sung trong các phiên bản tới. Nam vui lòng tham khảo thêm tài liệu hướng dẫn sử dụng vnstock để hiểu hơn nhé. Thân!

  22. Dear anh Thịnh.Em xin phép sử dụng vnstock của anh để làm 1 bài post phân tích data được không ạ.Em sẽ ghi nguồn đầy đủ ạ

    1. Chào Quý,
      Anh rất sẵn lòng nhé. vnstock được chia sẻ dưới dạng mã nguồn mở theo giấy phép MIT. Em có thể sử dụng cho dự án của mình một cách tự do, ghi nguồn và tuân thủ mục Licensing của dự án.
      Chúc em thành công!

  23. Cảm ơn anh nhiều nha. Chúc anh nhiều sức khoẻ và ngày càng thành công hơn nữa ạ.

  24. Hi Thinh, đầu tiên là rất cảm ơn bạn về thư viện rất hữu ích này. Mình biết lập trình cơ bản nhưng python thì ko rành lắm. Mình đã thử cài thư viện và chạy đoạn code này
    from vnstock import * #import all functions
    company_overview(‘TCB’)
    Nhưng bị báo lỗi “company_overview(‘TCB’) NameError: name ‘company_overview’ is not defined”
    không biết mình có thiếu bước nào không? Nhờ bạn hỗ trợ giúp. Rất cảm ơn bạn

    1. Hi Son,
      Mình không rõ bạn thực hiện những bước nào trước khi chạy hàm nên khó để giải thích cho bạn. Như tài liệu mình cung cấp kèm file README.md ở github repo khá đầy đủ và chi tiết. Bạn nên bắt đầu với file demo mới nhất, chạy bằng Google Colab để đảm bảo mọi thao tác được thực hiện đúng và không yêu cầu các bước setup phức tạp. Ngoài ra bạn có thể tham gia Discord server của vnstock để được hỗ trợ hoặc group thành viên thân thiết trên Facebook nhé. Cám ơn bạn.

  25. Hi Thịnh, Cảm ơn Thịnh và cả nhóm vì đã tạo ra thư viện hữu ích này. Mình muốn hỏi tại sao mình ko lấy dữ liệu lịch sử của các mã hoặc chỉ số từ SSI hoặc TCBS luôn mà phải lấy từ entrade.com.vn. Ngoài ra như bạn ở trên có hỏi là không lấy được dữ liệu của tất cả các mã trong một khoảng thời gian dài. Nguyên nhân do các bên không cho phép hay nguyên nhân kĩ thuật vậy? Theo mình hiểu thì nếu các bên đã mở API với mục đích cho khách hàng có thể giao dịch bằng thuật toán hoăc tần số cao, thì họ nên để khách hàng có thể trích suất được dữ liệu lớn một cách dễ dàng, nếu không bị ràng buộc về pháp lý hoặc giới hạn hạ tâng công nghệ của các công ty chứng khoán.

    1. Chào bạn,
      API mà vnstock sử dụng để cung cấp cho người dùng không phải API chính thức mà các công ty chứng khoán công khai cho khách hàng sử dụng nha bạn. Đây là các API dùng để họ trao đổi thông tin từ hệ thống tới website để hiển thị giao diện người dùng. Mình sử dụng kỹ thuật để tách các API này ra lấy dữ liệu dễ dàng và tự động thay vì thao tác copy với web. Lý do chọn đa dạng nguồn dữ liệu bởi cái nào dễ, ít tốn công sức và không gặp chính sách chặn quyết liệt thì mình dùng vì mình đang xây dựng thư viện này hoàn toàn cá nhân nên cũng giới hạn nhiều về nguồn lực. API của entrade giới hạn bởi họ thiết kế API chỉ cho phép lấy nhiêu đó dữ liệu, mình chỉ cung cấp công cụ để các bạn kết nối tới API do đó không phải giới hạn kỹ thuật về phía vnstock. Thông tin đến bạn!

  26. Chào Thịnh. Cảm ơn bạn đã bỏ thời gian viết phần mềm vn.Stock. Mình đang test phần mềm này. Tuy nhiên khi mình tải data, có rât nhiều ticker báo lỗi: Error in API response {“status”:400,”code”:”BAD_REQUEST”,”message”:”invalid symbol”}
    Minh da check thi day deu la valid symbol. Bạn có thể xem xét vấn đề này không? (Eg: ‘LCC’, ‘LCD’, ‘LCG’,
    ‘LCM’, ‘LCS’, ‘LDG’, ‘LDP’, ‘LDW’, ‘LEC’, ‘LG9’, ‘LGC’, ‘LGL’, ‘LGM’, ‘LHC’, ‘LHG’, ‘LIC’)

    1. Chào Phong,
      Mình đoán là gặp lỗi khi sử dụng các hàm có nguồn từ SSI tuy nhiên mình không đủ thông tin để kiểm tra do bạn mô tả còn rất mơ hồ, ko rõ là lỗi với hàm nào, trường hợp bạn chạy như thế nào thì gặp lỗi. Bạn giúp mình tham gia Discord để trao đổi thêm https://discord.gg/WRSFWsDhAh hoặc bạn log bug trực tiếp trên Github https://github.com/thinh-vu/vnstock/issues giúp mình nhé. Cám ơn bạn!

  27. Cảm ơn Thịnh Vũ đã chia sẻ thư viện hữu ích này!
    Nhờ bạn hỗ trợ code để lấy data ohlcv của VN30F1M cho các khung thời gian khác nhau 5m, 15m, 1h.. trong thời gian đang giao dịch, cảm ơn bạn nhiều!

Leave a Reply

Your email address will not be published. Required fields are marked *