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ừ Techcombank Security (TCBS) và SSI.

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

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

Đô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). Nếu tò mò, bạn có thể xem xét thêm cả VNDirect, đây cũng là một website sử dụng hình thức render thông tin dựa vào api dữ liệu cung cấp. Bạn có thể dễ dàng truy cứu các public api này thông qua công cụ của Chrome: Inspect >> Network >> Fetch/XHR.

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é.

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 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.

momo qr thinhvu

Bài viết này hữu ích với bạn chứ?

Đánh giá từ 1 đến 5.

Đánh giá phổ biến 4.8 / 5. Số bình chọn: 21

Chưa có ai đánh giá bài viết này! Hãy là người đầu tiên để lại đánh giá.

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Apache Airflow trên Raspberry Pi Terminal
Phân tích dữ liệu với Python | Bắt đầu với Jupyter Notebook, Google Colaboratory và Rasberry Pi
February 15, 2021
Chuyển âm thanh thành văn bản cover
Chuyển giọng nói thành văn bản miễn phí bằng OpenAI whisper trong 3 bước
November 27, 2022
Hướng dẫn sử dụng Google Colab - Google Colab Tutorial 101
Hướng dẫn sử dụng Google Colab đầy đủ – Python Tutorial
July 29, 2021
15 Comments
  • Reply
    Duy Doan
    December 2, 2022 at 10:51 pm

    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.

    • Reply
      Duy Doan
      December 2, 2022 at 10:51 pm

      Em xin cảm ơn anh Thịnh

    • Reply
      Thinh Vu
      December 3, 2022 at 7:57 pm

      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,

  • Reply
    Xuyên Phạm
    December 8, 2022 at 4:14 pm

    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á

    • Reply
      Thinh Vu
      December 8, 2022 at 5:29 pm

      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.

  • Reply
    Harry Phạm
    December 9, 2022 at 11:38 pm

    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 ạ?

    • Reply
      Thinh Vu
      December 11, 2022 at 8:03 pm

      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é.

  • Reply
    James Hoàng
    January 7, 2023 at 9:48 am

    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?

    • Reply
      Thinh Vu
      January 8, 2023 at 12:04 am

      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.

  • Reply
    James Hoàng
    January 7, 2023 at 9:50 am

    Cảm ơn Admin rất nhiều, Chúc Admin luôn khỏe mạnh!

  • Reply
    Heat
    January 9, 2023 at 9:19 pm

    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 ạ

    • Reply
      Thinh Vu
      January 10, 2023 at 7:29 am

      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é.

  • Reply
    phong
    January 15, 2023 at 11:14 am

    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

    • Reply
      Thinh Vu
      January 16, 2023 at 9:59 am

      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.

    • Reply
      Thinh Vu
      January 26, 2023 at 1:52 pm

      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!

Leave a Reply

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