From b768458b9c0a5fd0da37f9dd1d7ce5c53615d317 Mon Sep 17 00:00:00 2001 From: thinh-vu Date: Sat, 2 Nov 2024 01:27:06 +0700 Subject: [PATCH] =?UTF-8?q?Ph=C3=A1t=20h=C3=A0nh=20phi=C3=AAn=20b=E1=BA=A3?= =?UTF-8?q?n=20v3.0.9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 12292 -> 14340 bytes docs/.DS_Store | Bin 6148 -> 6148 bytes docs/1_vietnam_stock_vnstock3.ipynb | 1826 ++++++++++-- docs/tcbs/1_vietnam_stock_vnstock3_tcbs.ipynb | 2638 ++++++++++++----- tests/explorer/vci/test_financial.py | 395 +++ vnstock3/core/utils/parser.py | 9 +- vnstock3/explorer/tcbs/const.py | 4 +- vnstock3/explorer/tcbs/quote.py | 14 +- vnstock3/explorer/vci/const.py | 3 +- vnstock3/explorer/vci/financial.py | 23 +- vnstock3/explorer/vci/quote.py | 6 +- vnstock3/explorer/vci/trading.py | 4 +- 12 files changed, 3930 insertions(+), 992 deletions(-) create mode 100644 tests/explorer/vci/test_financial.py diff --git a/.DS_Store b/.DS_Store index e619f826c3aabb452c4f7bbf6d03bfd8c4eb17d4..39afb27e12488a5b9c040163217178463d1ef144 100644 GIT binary patch delta 896 zcmZokXem%&U|?W$DortDU@!nOIe-{M3-B;7uy8RjDDX^F&}X#S7~sh^`KIDBMzhHc zO6i&6SA>CTm>E(SQW?r}^Icq$a`KZPx*Hs3W*u`xmQBGUTaaNGoSdIq094PwARz!E zS%8=k!~i;md-FzVahA>MJa#OM3Y*geBsiIFPMF*vDaFRX(9ktIYw`j~8C3`qY$q#2 z3D8BwK(ZLcWG02p4<)r3nORS5pUf|49>v2L^2iQj(Z4XcSz$^& zFVOG;hDx~W;~A0}5`j2_AvGr*DTEl<3xQ6-qZ-+9yf3!Tg~kP59Vsrhu;?RB3$hOw z7!o!ME9Njl5=I2A62@kGWno5Uh3?$Vp(-NGn>8gu8R?i33RomrLFo~gHMoISES%Mo`K1*=-YZ`ZbS97^HrZF2iwz<$IaXSki7jFBLrKxi z)1^yT7$qk2C`iS!z5q(IFz7L)Gh{N9AbS@mUI{V>RUYACZ1TtsW6@Wb+^jHV^L51x zMn;p#4(#bP3);>9m4z9Z^ diff --git a/docs/.DS_Store b/docs/.DS_Store index 0a908747eedbe6825c11e3dc041682cf925e104f..fc0f02f34826615b85af4e3a78555251a61be44d 100644 GIT binary patch delta 25 gcmZoMXffE}%*NCzI@y&iigCim!gR*X>>Pjj0cgkw9{>OV delta 25 gcmZoMXffE}%*Ld6e6lNB6r;h$!gR*X>>Pjj0cnH?4FCWD diff --git a/docs/1_vietnam_stock_vnstock3.ipynb b/docs/1_vietnam_stock_vnstock3.ipynb index 668f3a70..bbebd655 100644 --- a/docs/1_vietnam_stock_vnstock3.ipynb +++ b/docs/1_vietnam_stock_vnstock3.ipynb @@ -16,16 +16,6 @@ "# Mục lục" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1. Chứng khoán Việt Nam [tại đây](https://colab.research.google.com/github/thinh-vu/vnstock/blob/main/docs/1_vietnam_stock_vnstock3.ipynb)\n", - "2. Chứng khoán quốc tế: Forex, Crypto, Chỉ số [tại đây](https://colab.research.google.com/github/thinh-vu/vnstock/blob/main/docs/2_international_market.ipynb)\n", - "3. Dữ liệu Thị trường, hàng hoá [tại đây](https://colab.research.google.com/github/thinh-vu/vnstock/blob/main/docs/3_commodities_vnstock3.ipynb)\n", - "4. Biểu diễn dữ liệu trực quan từ Vnstock3 [tại đây](https://colab.research.google.com/github/thinh-vu/vnstock/blob/main/docs/5_visualization_data_exploration_vnstock3.ipynb)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -49,6 +39,16 @@ "!pip install -U vnstock3" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Chứng khoán Việt Nam [tại đây](https://colab.research.google.com/github/thinh-vu/vnstock/blob/main/docs/1_vietnam_stock_vnstock3.ipynb)\n", + "2. Chứng khoán quốc tế: Forex, Crypto, Chỉ số [tại đây](https://colab.research.google.com/github/thinh-vu/vnstock/blob/main/docs/2_international_market.ipynb)\n", + "3. Dữ liệu Thị trường, hàng hoá [tại đây](https://colab.research.google.com/github/thinh-vu/vnstock/blob/main/docs/3_commodities_vnstock3.ipynb)\n", + "4. Biểu diễn dữ liệu trực quan từ Vnstock3 [tại đây](https://colab.research.google.com/github/thinh-vu/vnstock/blob/main/docs/5_visualization_data_exploration_vnstock3.ipynb)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -67,22 +67,7 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - " Khi tiếp tục sử dụng Vnstock3, bạn xác nhận rằng bạn đã đọc, hiểu và đồng ý với Chính sách quyền riêng tư và Điều khoản, điều kiện về giấy phép sử dụng Vnstock3.\n", - "\n", - " Chi tiết:\n", - "\n", - " - Giấy phép sử dụng phần mềm: https://vnstocks.com/docs/tai-lieu/giay-phep-su-dung\n", - " - Chính sách quyền riêng tư: https://vnstocks.com/docs/tai-lieu/chinh-sach-quyen-rieng-tu\n", - " \n" - ] - } - ], + "outputs": [], "source": [ "## Nạp toàn bộ thư viện\n", "# from vnstock3 import *\n", @@ -116,7 +101,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-10-14 22:18:00,511 - vnstock3.common.data.data_explorer - WARNING - Thông tin niêm yết & giao dịch sẽ được truy xuất từ TCBS\n" + "2024-11-02 00:22:41 - vnstock3.common.data.data_explorer - WARNING - Thông tin niêm yết & giao dịch sẽ được truy xuất từ TCBS\n" ] } ], @@ -368,7 +353,7 @@ " ...\n", " \n", " \n", - " 2551\n", + " 2558\n", " AAS\n", " 8425599\n", " STOCK\n", @@ -379,7 +364,7 @@ " Công ty Cổ phần Chứng khoán SmartInvest\n", " \n", " \n", - " 2552\n", + " 2559\n", " AAM\n", " 8424957\n", " STOCK\n", @@ -390,7 +375,7 @@ " Công ty Cổ Phần Thủy Sản MeKong\n", " \n", " \n", - " 2553\n", + " 2560\n", " AAH\n", " 13216673\n", " STOCK\n", @@ -401,7 +386,7 @@ " Công ty Cổ phần Hợp Nhất\n", " \n", " \n", - " 2554\n", + " 2561\n", " AAA\n", " 8424464\n", " STOCK\n", @@ -412,7 +397,7 @@ " Công ty Cổ phần Nhựa An Phát Xanh\n", " \n", " \n", - " 2555\n", + " 2562\n", " A32\n", " 8425330\n", " STOCK\n", @@ -424,7 +409,7 @@ " \n", " \n", "\n", - "

2556 rows × 8 columns

\n", + "

2563 rows × 8 columns

\n", "" ], "text/plain": [ @@ -435,11 +420,11 @@ "3 YBC 8425710 STOCK UPCOM \n", "4 XPH 8425864 STOCK UPCOM \n", "... ... ... ... ... \n", - "2551 AAS 8425599 STOCK UPCOM \n", - "2552 AAM 8424957 STOCK HSX \n", - "2553 AAH 13216673 STOCK UPCOM \n", - "2554 AAA 8424464 STOCK HSX \n", - "2555 A32 8425330 STOCK UPCOM \n", + "2558 AAS 8425599 STOCK UPCOM \n", + "2559 AAM 8424957 STOCK HSX \n", + "2560 AAH 13216673 STOCK UPCOM \n", + "2561 AAA 8424464 STOCK HSX \n", + "2562 A32 8425330 STOCK UPCOM \n", "\n", " en_organ_name \\\n", "0 Ho Chi Minh City Medical Import Export Joint S... \n", @@ -448,11 +433,11 @@ "3 YenBai Cement and Minerals Joint Stock Company \n", "4 Hanoi Soap Joint Stock Company \n", "... ... \n", - "2551 Smart Invest Securities Joint Stock Company \n", - "2552 Mekong Fisheries Joint Stock Company \n", - "2553 Hop Nhat Joint Stock Company \n", - "2554 An Phat Bioplastics Joint Stock Company \n", - "2555 32 Joint Stock Company \n", + "2558 Smart Invest Securities Joint Stock Company \n", + "2559 Mekong Fisheries Joint Stock Company \n", + "2560 Hop Nhat Joint Stock Company \n", + "2561 An Phat Bioplastics Joint Stock Company \n", + "2562 32 Joint Stock Company \n", "\n", " en_organ_short_name organ_short_name \\\n", "0 YTECO XNK Y tế TP.HCM \n", @@ -461,11 +446,11 @@ "3 YenBai Cement and Minerals Xi măng và Khoáng sản Yên Bái \n", "4 Hanoi Soap Xà phòng Hà Nội \n", "... ... ... \n", - "2551 SmartInvest Securities Chứng khoán SmartInvest \n", - "2552 Mekong Fisheries Thủy sản Mekong \n", - "2553 Hop Nhat Coal Than Hợp Nhất \n", - "2554 An Phat Bioplastics An Phát Bioplastics \n", - "2555 32 Company Công ty 32 \n", + "2558 SmartInvest Securities Chứng khoán SmartInvest \n", + "2559 Mekong Fisheries Thủy sản Mekong \n", + "2560 Hop Nhat Coal Than Hợp Nhất \n", + "2561 An Phat Bioplastics An Phát Bioplastics \n", + "2562 32 Company Công ty 32 \n", "\n", " organ_name \n", "0 Công ty Cổ phần Xuất nhập khẩu Y tế Thành phố ... \n", @@ -474,13 +459,13 @@ "3 Công ty Cổ phần Xi măng và Khoáng sản Yên Bái \n", "4 Công ty Cổ phần Xà phòng Hà Nội \n", "... ... \n", - "2551 Công ty Cổ phần Chứng khoán SmartInvest \n", - "2552 Công ty Cổ Phần Thủy Sản MeKong \n", - "2553 Công ty Cổ phần Hợp Nhất \n", - "2554 Công ty Cổ phần Nhựa An Phát Xanh \n", - "2555 Công ty Cổ phần 32 \n", + "2558 Công ty Cổ phần Chứng khoán SmartInvest \n", + "2559 Công ty Cổ Phần Thủy Sản MeKong \n", + "2560 Công ty Cổ phần Hợp Nhất \n", + "2561 Công ty Cổ phần Nhựa An Phát Xanh \n", + "2562 Công ty Cổ phần 32 \n", "\n", - "[2556 rows x 8 columns]" + "[2563 rows x 8 columns]" ] }, "execution_count": 4, @@ -545,88 +530,88 @@ " \n", " \n", " 0\n", - " A32\n", - " Công ty Cổ phần 32\n", - " 32 Joint Stock Company\n", - " Hàng cá nhân\n", - " Personal Goods\n", - " Hàng cá nhân & Gia dụng\n", - " Personal & Household Goods\n", - " Giầy dép\n", - " Footwear\n", + " ATB\n", + " Công ty Cổ phần An Thịnh\n", + " An Thinh Joint Stock Company\n", + " Xây dựng và Vật liệu\n", + " Construction & Materials\n", + " Xây dựng và Vật liệu\n", + " Construction & Materials\n", + " Xây dựng\n", + " Heavy Construction\n", " CT\n", - " 3000\n", - " 3700\n", - " 3760\n", - " 3765\n", + " 2000\n", + " 2300\n", + " 2350\n", + " 2357\n", " \n", " \n", " 1\n", - " ATG\n", - " Công ty Cổ phần An Trường An\n", - " An Truong An Joint Stock Company\n", - " Khai khoáng\n", - " Mining\n", - " Tài nguyên Cơ bản\n", - " Basic Resources\n", - " Khai khoáng\n", - " General Mining\n", + " BNW\n", + " Công ty Cổ phần Nước sạch Bắc Ninh\n", + " Bac Ninh Clean Water Joint Stock Company\n", + " Nước & Khí đốt\n", + " Gas, Water & Multi-utilities\n", + " Điện, nước & xăng dầu khí đốt\n", + " Utilities\n", + " Nước\n", + " Water\n", " CT\n", - " 1000\n", - " 1700\n", - " 1770\n", - " 1775\n", + " 7000\n", + " 7500\n", + " 7570\n", + " 7577\n", " \n", " \n", " 2\n", - " ATS\n", - " Công ty Cổ phần Tập đoàn Đầu tư ATS\n", - " ATS Investment Group Joint Stock Company\n", - " Du lịch & Giải trí\n", - " Travel & Leisure\n", - " Du lịch và Giải trí\n", - " Travel & Leisure\n", - " Nhà hàng và quán bar\n", - " Restaurants & Bars\n", + " BRR\n", + " Công ty Cổ phần Cao su Bà Rịa\n", + " BaRia Rubber Joint Stock Company\n", + " Hóa chất\n", + " Chemicals\n", + " Hóa chất\n", + " Chemicals\n", + " Nhựa, cao su & sợi\n", + " Commodity Chemicals\n", " CT\n", - " 5000\n", - " 5700\n", - " 5750\n", - " 5757\n", + " 1000\n", + " 1300\n", + " 1350\n", + " 1353\n", " \n", " \n", " 3\n", - " BAF\n", - " Công ty Cổ phần Nông nghiệp BAF Việt Nam\n", - " BAF Vietnam Agriculture Joint Stock Company\n", - " Sản xuất thực phẩm\n", - " Food Producers\n", - " Thực phẩm và đồ uống\n", - " Food & Beverage\n", - " Nuôi trồng nông & hải sản\n", - " Farming & Fishing\n", + " DHG\n", + " Công ty Cổ phần Dược Hậu Giang\n", + " DHG Pharmaceutical Joint Stock Company\n", + " Dược phẩm\n", + " Pharmaceuticals & Biotechnology\n", + " Y tế\n", + " Health Care\n", + " Dược phẩm\n", + " Pharmaceuticals\n", " CT\n", - " 3000\n", - " 3500\n", - " 3570\n", - " 3573\n", + " 4000\n", + " 4500\n", + " 4570\n", + " 4577\n", " \n", " \n", " 4\n", - " BCV\n", - " Công ty cổ phần Du lịch và Thương mại Bằng Gia...\n", - " Vimico - Cao Bang Bang Giang Travel And Tradin...\n", - " Du lịch & Giải trí\n", - " Travel & Leisure\n", - " Du lịch và Giải trí\n", - " Travel & Leisure\n", - " Khách sạn\n", - " Hotels\n", + " BTS\n", + " Công ty Cổ phần Xi măng VICEM Bút Sơn\n", + " VICEM But Son Cement Joint Stock Company\n", + " Xây dựng và Vật liệu\n", + " Construction & Materials\n", + " Xây dựng và Vật liệu\n", + " Construction & Materials\n", + " Vật liệu xây dựng & Nội thất\n", + " Building Materials & Fixtures\n", " CT\n", - " 5000\n", - " 5700\n", - " 5750\n", - " 5753\n", + " 2000\n", + " 2300\n", + " 2350\n", + " 2353\n", " \n", " \n", " ...\n", @@ -646,58 +631,58 @@ " ...\n", " \n", " \n", - " 1586\n", - " BCO\n", - " Công ty Cổ phần Xây dựng Bình Phước\n", - " Binh Phuoc Construction Joint Stock Company\n", + " 1584\n", + " XMC\n", + " Công ty cổ phần Đầu tư và Xây dựng Xuân Mai\n", + " Xuan Mai Investment and Construction Corporation\n", " Xây dựng và Vật liệu\n", " Construction & Materials\n", " Xây dựng và Vật liệu\n", " Construction & Materials\n", - " Xây dựng\n", - " Heavy Construction\n", + " Vật liệu xây dựng & Nội thất\n", + " Building Materials & Fixtures\n", " CT\n", " 2000\n", " 2300\n", " 2350\n", - " 2357\n", + " 2353\n", " \n", " \n", - " 1587\n", - " DFC\n", - " Công ty Cổ phần Xích líp Đông Anh\n", - " Dong Anh C&F Joint Stock Company\n", - " Kim loại\n", - " Industrial Metals & Mining\n", + " 1585\n", + " YBC\n", + " Công ty Cổ phần Xi măng và Khoáng sản Yên Bái\n", + " YenBai Cement and Minerals Joint Stock Company\n", + " Xây dựng và Vật liệu\n", + " Construction & Materials\n", + " Xây dựng và Vật liệu\n", + " Construction & Materials\n", + " Vật liệu xây dựng & Nội thất\n", + " Building Materials & Fixtures\n", + " CT\n", + " 2000\n", + " 2300\n", + " 2350\n", + " 2353\n", + " \n", + " \n", + " 1586\n", + " YBM\n", + " Công ty Cổ phần Khoáng sản Công nghiệp Yên Bái\n", + " Yen Bai Industry Mineral Joint Stock Company\n", + " Khai khoáng\n", + " Mining\n", " Tài nguyên Cơ bản\n", " Basic Resources\n", - " Thép và sản phẩm thép\n", - " Steel\n", + " Khai khoáng\n", + " General Mining\n", " CT\n", " 1000\n", " 1700\n", - " 1750\n", - " 1757\n", - " \n", - " \n", - " 1588\n", - " XPH\n", - " Công ty Cổ phần Xà phòng Hà Nội\n", - " Hanoi Soap Joint Stock Company\n", - " Hàng cá nhân\n", - " Personal Goods\n", - " Hàng cá nhân & Gia dụng\n", - " Personal & Household Goods\n", - " Hàng cá nhân\n", - " Personal Products\n", - " CT\n", - " 3000\n", - " 3700\n", - " 3760\n", - " 3767\n", + " 1770\n", + " 1775\n", " \n", " \n", - " 1589\n", + " 1587\n", " YEG\n", " Công ty Cổ phần Tập đoàn Yeah1\n", " Yeah1 Group Corporation\n", @@ -714,7 +699,7 @@ " 5553\n", " \n", " \n", - " 1590\n", + " 1588\n", " YTC\n", " Công ty Cổ phần Xuất nhập khẩu Y tế Thành phố ...\n", " Ho Chi Minh City Medical Import Export Joint S...\n", @@ -732,89 +717,89 @@ " \n", " \n", "\n", - "

1591 rows × 14 columns

\n", + "

1589 rows × 14 columns

\n", "" ], "text/plain": [ " symbol organ_name \\\n", - "0 A32 Công ty Cổ phần 32 \n", - "1 ATG Công ty Cổ phần An Trường An \n", - "2 ATS Công ty Cổ phần Tập đoàn Đầu tư ATS \n", - "3 BAF Công ty Cổ phần Nông nghiệp BAF Việt Nam \n", - "4 BCV Công ty cổ phần Du lịch và Thương mại Bằng Gia... \n", + "0 ATB Công ty Cổ phần An Thịnh \n", + "1 BNW Công ty Cổ phần Nước sạch Bắc Ninh \n", + "2 BRR Công ty Cổ phần Cao su Bà Rịa \n", + "3 DHG Công ty Cổ phần Dược Hậu Giang \n", + "4 BTS Công ty Cổ phần Xi măng VICEM Bút Sơn \n", "... ... ... \n", - "1586 BCO Công ty Cổ phần Xây dựng Bình Phước \n", - "1587 DFC Công ty Cổ phần Xích líp Đông Anh \n", - "1588 XPH Công ty Cổ phần Xà phòng Hà Nội \n", - "1589 YEG Công ty Cổ phần Tập đoàn Yeah1 \n", - "1590 YTC Công ty Cổ phần Xuất nhập khẩu Y tế Thành phố ... \n", + "1584 XMC Công ty cổ phần Đầu tư và Xây dựng Xuân Mai \n", + "1585 YBC Công ty Cổ phần Xi măng và Khoáng sản Yên Bái \n", + "1586 YBM Công ty Cổ phần Khoáng sản Công nghiệp Yên Bái \n", + "1587 YEG Công ty Cổ phần Tập đoàn Yeah1 \n", + "1588 YTC Công ty Cổ phần Xuất nhập khẩu Y tế Thành phố ... \n", "\n", " en_organ_name \\\n", - "0 32 Joint Stock Company \n", - "1 An Truong An Joint Stock Company \n", - "2 ATS Investment Group Joint Stock Company \n", - "3 BAF Vietnam Agriculture Joint Stock Company \n", - "4 Vimico - Cao Bang Bang Giang Travel And Tradin... \n", + "0 An Thinh Joint Stock Company \n", + "1 Bac Ninh Clean Water Joint Stock Company \n", + "2 BaRia Rubber Joint Stock Company \n", + "3 DHG Pharmaceutical Joint Stock Company \n", + "4 VICEM But Son Cement Joint Stock Company \n", "... ... \n", - "1586 Binh Phuoc Construction Joint Stock Company \n", - "1587 Dong Anh C&F Joint Stock Company \n", - "1588 Hanoi Soap Joint Stock Company \n", - "1589 Yeah1 Group Corporation \n", - "1590 Ho Chi Minh City Medical Import Export Joint S... \n", + "1584 Xuan Mai Investment and Construction Corporation \n", + "1585 YenBai Cement and Minerals Joint Stock Company \n", + "1586 Yen Bai Industry Mineral Joint Stock Company \n", + "1587 Yeah1 Group Corporation \n", + "1588 Ho Chi Minh City Medical Import Export Joint S... \n", "\n", " icb_name3 en_icb_name3 \\\n", - "0 Hàng cá nhân Personal Goods \n", - "1 Khai khoáng Mining \n", - "2 Du lịch & Giải trí Travel & Leisure \n", - "3 Sản xuất thực phẩm Food Producers \n", - "4 Du lịch & Giải trí Travel & Leisure \n", + "0 Xây dựng và Vật liệu Construction & Materials \n", + "1 Nước & Khí đốt Gas, Water & Multi-utilities \n", + "2 Hóa chất Chemicals \n", + "3 Dược phẩm Pharmaceuticals & Biotechnology \n", + "4 Xây dựng và Vật liệu Construction & Materials \n", "... ... ... \n", - "1586 Xây dựng và Vật liệu Construction & Materials \n", - "1587 Kim loại Industrial Metals & Mining \n", - "1588 Hàng cá nhân Personal Goods \n", - "1589 Truyền thông Media \n", - "1590 Thiết bị và Dịch vụ Y tế Health Care Equipment & Services \n", - "\n", - " icb_name2 en_icb_name2 \\\n", - "0 Hàng cá nhân & Gia dụng Personal & Household Goods \n", - "1 Tài nguyên Cơ bản Basic Resources \n", - "2 Du lịch và Giải trí Travel & Leisure \n", - "3 Thực phẩm và đồ uống Food & Beverage \n", - "4 Du lịch và Giải trí Travel & Leisure \n", - "... ... ... \n", - "1586 Xây dựng và Vật liệu Construction & Materials \n", - "1587 Tài nguyên Cơ bản Basic Resources \n", - "1588 Hàng cá nhân & Gia dụng Personal & Household Goods \n", - "1589 Truyền thông Media \n", - "1590 Y tế Health Care \n", - "\n", - " icb_name4 en_icb_name4 com_type_code \\\n", - "0 Giầy dép Footwear CT \n", - "1 Khai khoáng General Mining CT \n", - "2 Nhà hàng và quán bar Restaurants & Bars CT \n", - "3 Nuôi trồng nông & hải sản Farming & Fishing CT \n", - "4 Khách sạn Hotels CT \n", - "... ... ... ... \n", - "1586 Xây dựng Heavy Construction CT \n", - "1587 Thép và sản phẩm thép Steel CT \n", - "1588 Hàng cá nhân Personal Products CT \n", - "1589 Giải trí & Truyền thông Broadcasting & Entertainment CT \n", - "1590 Dụng cụ y tế Medical Supplies CT \n", - "\n", - " icb_code1 icb_code2 icb_code3 icb_code4 \n", - "0 3000 3700 3760 3765 \n", - "1 1000 1700 1770 1775 \n", - "2 5000 5700 5750 5757 \n", - "3 3000 3500 3570 3573 \n", - "4 5000 5700 5750 5753 \n", - "... ... ... ... ... \n", - "1586 2000 2300 2350 2357 \n", - "1587 1000 1700 1750 1757 \n", - "1588 3000 3700 3760 3767 \n", - "1589 5000 5500 5550 5553 \n", - "1590 4000 4500 4530 4537 \n", - "\n", - "[1591 rows x 14 columns]" + "1584 Xây dựng và Vật liệu Construction & Materials \n", + "1585 Xây dựng và Vật liệu Construction & Materials \n", + "1586 Khai khoáng Mining \n", + "1587 Truyền thông Media \n", + "1588 Thiết bị và Dịch vụ Y tế Health Care Equipment & Services \n", + "\n", + " icb_name2 en_icb_name2 \\\n", + "0 Xây dựng và Vật liệu Construction & Materials \n", + "1 Điện, nước & xăng dầu khí đốt Utilities \n", + "2 Hóa chất Chemicals \n", + "3 Y tế Health Care \n", + "4 Xây dựng và Vật liệu Construction & Materials \n", + "... ... ... \n", + "1584 Xây dựng và Vật liệu Construction & Materials \n", + "1585 Xây dựng và Vật liệu Construction & Materials \n", + "1586 Tài nguyên Cơ bản Basic Resources \n", + "1587 Truyền thông Media \n", + "1588 Y tế Health Care \n", + "\n", + " icb_name4 en_icb_name4 \\\n", + "0 Xây dựng Heavy Construction \n", + "1 Nước Water \n", + "2 Nhựa, cao su & sợi Commodity Chemicals \n", + "3 Dược phẩm Pharmaceuticals \n", + "4 Vật liệu xây dựng & Nội thất Building Materials & Fixtures \n", + "... ... ... \n", + "1584 Vật liệu xây dựng & Nội thất Building Materials & Fixtures \n", + "1585 Vật liệu xây dựng & Nội thất Building Materials & Fixtures \n", + "1586 Khai khoáng General Mining \n", + "1587 Giải trí & Truyền thông Broadcasting & Entertainment \n", + "1588 Dụng cụ y tế Medical Supplies \n", + "\n", + " com_type_code icb_code1 icb_code2 icb_code3 icb_code4 \n", + "0 CT 2000 2300 2350 2357 \n", + "1 CT 7000 7500 7570 7577 \n", + "2 CT 1000 1300 1350 1353 \n", + "3 CT 4000 4500 4570 4577 \n", + "4 CT 2000 2300 2350 2353 \n", + "... ... ... ... ... ... \n", + "1584 CT 2000 2300 2350 2353 \n", + "1585 CT 2000 2300 2350 2353 \n", + "1586 CT 1000 1700 1770 1775 \n", + "1587 CT 5000 5500 5550 5553 \n", + "1588 CT 4000 4500 4530 4537 \n", + "\n", + "[1589 rows x 14 columns]" ] }, "execution_count": 5, @@ -1059,6 +1044,13 @@ "#### Giá lịch sử" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Cổ phiếu" + ] + }, { "cell_type": "code", "execution_count": 8, @@ -1245,6 +1237,1386 @@ "print(f'Loại tài sản: {df.category}')" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Hợp đồng tương lai" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02024-01-021138.51141.81131.01133.5167307
12024-01-031127.21149.81126.71148.3173569
22024-01-041146.01171.01145.51156.5260804
32024-01-051156.11166.11154.21166.0199452
42024-01-081166.11173.31160.61162.0182329
.....................
2032024-10-281330.01332.41327.21332.0130507
2042024-10-291334.01341.01334.01339.4164121
2052024-10-301341.61342.71331.51342.0186935
2062024-10-311339.01347.81333.71343.5202412
2072024-11-011340.41340.41326.11330.4215897
\n", + "

208 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2024-01-02 1138.5 1141.8 1131.0 1133.5 167307\n", + "1 2024-01-03 1127.2 1149.8 1126.7 1148.3 173569\n", + "2 2024-01-04 1146.0 1171.0 1145.5 1156.5 260804\n", + "3 2024-01-05 1156.1 1166.1 1154.2 1166.0 199452\n", + "4 2024-01-08 1166.1 1173.3 1160.6 1162.0 182329\n", + ".. ... ... ... ... ... ...\n", + "203 2024-10-28 1330.0 1332.4 1327.2 1332.0 130507\n", + "204 2024-10-29 1334.0 1341.0 1334.0 1339.4 164121\n", + "205 2024-10-30 1341.6 1342.7 1331.5 1342.0 186935\n", + "206 2024-10-31 1339.0 1347.8 1333.7 1343.5 202412\n", + "207 2024-11-01 1340.4 1340.4 1326.1 1330.4 215897\n", + "\n", + "[208 rows x 6 columns]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='VN30F1M', start='2024-01-02', end='2024-11-01', interval='1D')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02024-09-201331.91338.71315.01331.5496
12024-09-231332.01333.31326.61327.3253
22024-09-241327.31335.81323.91335.1254
32024-09-251334.81350.81334.81344.1511
42024-09-261346.81366.51346.81358.2575
52024-09-271359.71363.01353.11357.0241
62024-09-301354.91360.31351.21357.8324
72024-10-011362.31375.01359.91363.0379
82024-10-021354.51362.31353.91361.3299
92024-10-031362.01377.91351.61355.0714
102024-10-041354.21354.61344.01345.0616
112024-10-071349.91351.31335.91340.6567
122024-10-081341.51350.31339.41345.0524
132024-10-091347.51360.01345.21360.0820
142024-10-101365.01374.81361.01366.2836
152024-10-111368.51368.91357.21368.0940
162024-10-141379.81379.81361.61363.57235
172024-10-151365.01374.11359.81361.919903
182024-10-161360.11365.31358.01362.925411
192024-10-171365.01369.51353.81369.055333
202024-10-181374.61377.91363.81365.9257597
212024-10-211364.01369.91362.51363.9165731
222024-10-221360.01363.31350.01352.2195827
232024-10-231353.01355.41345.11354.0210171
242024-10-241352.51354.11336.11338.0233341
252024-10-251338.51339.81326.01327.2226084
262024-10-281330.01332.41327.21332.0130507
272024-10-291334.01341.01334.01339.4164121
282024-10-301341.61342.71331.51342.0186935
292024-10-311339.01347.81333.71343.5202412
302024-11-011340.41340.41326.11330.4215897
\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2024-09-20 1331.9 1338.7 1315.0 1331.5 496\n", + "1 2024-09-23 1332.0 1333.3 1326.6 1327.3 253\n", + "2 2024-09-24 1327.3 1335.8 1323.9 1335.1 254\n", + "3 2024-09-25 1334.8 1350.8 1334.8 1344.1 511\n", + "4 2024-09-26 1346.8 1366.5 1346.8 1358.2 575\n", + "5 2024-09-27 1359.7 1363.0 1353.1 1357.0 241\n", + "6 2024-09-30 1354.9 1360.3 1351.2 1357.8 324\n", + "7 2024-10-01 1362.3 1375.0 1359.9 1363.0 379\n", + "8 2024-10-02 1354.5 1362.3 1353.9 1361.3 299\n", + "9 2024-10-03 1362.0 1377.9 1351.6 1355.0 714\n", + "10 2024-10-04 1354.2 1354.6 1344.0 1345.0 616\n", + "11 2024-10-07 1349.9 1351.3 1335.9 1340.6 567\n", + "12 2024-10-08 1341.5 1350.3 1339.4 1345.0 524\n", + "13 2024-10-09 1347.5 1360.0 1345.2 1360.0 820\n", + "14 2024-10-10 1365.0 1374.8 1361.0 1366.2 836\n", + "15 2024-10-11 1368.5 1368.9 1357.2 1368.0 940\n", + "16 2024-10-14 1379.8 1379.8 1361.6 1363.5 7235\n", + "17 2024-10-15 1365.0 1374.1 1359.8 1361.9 19903\n", + "18 2024-10-16 1360.1 1365.3 1358.0 1362.9 25411\n", + "19 2024-10-17 1365.0 1369.5 1353.8 1369.0 55333\n", + "20 2024-10-18 1374.6 1377.9 1363.8 1365.9 257597\n", + "21 2024-10-21 1364.0 1369.9 1362.5 1363.9 165731\n", + "22 2024-10-22 1360.0 1363.3 1350.0 1352.2 195827\n", + "23 2024-10-23 1353.0 1355.4 1345.1 1354.0 210171\n", + "24 2024-10-24 1352.5 1354.1 1336.1 1338.0 233341\n", + "25 2024-10-25 1338.5 1339.8 1326.0 1327.2 226084\n", + "26 2024-10-28 1330.0 1332.4 1327.2 1332.0 130507\n", + "27 2024-10-29 1334.0 1341.0 1334.0 1339.4 164121\n", + "28 2024-10-30 1341.6 1342.7 1331.5 1342.0 186935\n", + "29 2024-10-31 1339.0 1347.8 1333.7 1343.5 202412\n", + "30 2024-11-01 1340.4 1340.4 1326.1 1330.4 215897" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='VN30F2411', start='2024-01-02', end='2024-11-01', interval='1D')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Chỉ số" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02024-01-021138.011139.711128.691131.72842255467
12024-01-031131.971144.171128.321144.17719932658
22024-01-041145.491160.081144.321150.721181354559
32024-01-051151.431155.841149.081154.68803268328
42024-01-081157.541162.561155.481160.19905408420
.....................
2032024-10-281252.721255.181250.941254.77482689840
2042024-10-291258.031262.381257.431261.78875048711
2052024-10-301261.781264.841255.071258.63536846200
2062024-10-311258.631267.881255.551264.48614271168
2072024-11-011264.481264.671254.331254.89580509631
\n", + "

208 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2024-01-02 1138.01 1139.71 1128.69 1131.72 842255467\n", + "1 2024-01-03 1131.97 1144.17 1128.32 1144.17 719932658\n", + "2 2024-01-04 1145.49 1160.08 1144.32 1150.72 1181354559\n", + "3 2024-01-05 1151.43 1155.84 1149.08 1154.68 803268328\n", + "4 2024-01-08 1157.54 1162.56 1155.48 1160.19 905408420\n", + ".. ... ... ... ... ... ...\n", + "203 2024-10-28 1252.72 1255.18 1250.94 1254.77 482689840\n", + "204 2024-10-29 1258.03 1262.38 1257.43 1261.78 875048711\n", + "205 2024-10-30 1261.78 1264.84 1255.07 1258.63 536846200\n", + "206 2024-10-31 1258.63 1267.88 1255.55 1264.48 614271168\n", + "207 2024-11-01 1264.48 1264.67 1254.33 1254.89 580509631\n", + "\n", + "[208 rows x 6 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='VNINDEX', start='2024-01-02', end='2024-11-01', interval='1D')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02024-01-02230.69232.40229.70229.9959394600
12024-01-03230.37231.64229.87231.6457900400
22024-01-04231.63233.66231.63232.56111741500
32024-01-05232.56233.35231.69232.7659577900
42024-01-08232.76234.88232.38233.3382783300
.....................
2032024-10-28223.94225.21222.73224.5935406400
2042024-10-29224.59226.06224.25225.5637139600
2052024-10-30225.22226.57224.63225.8840530500
2062024-10-31225.99226.81224.62226.3635990900
2072024-11-01226.35226.39224.56225.4138209700
\n", + "

208 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2024-01-02 230.69 232.40 229.70 229.99 59394600\n", + "1 2024-01-03 230.37 231.64 229.87 231.64 57900400\n", + "2 2024-01-04 231.63 233.66 231.63 232.56 111741500\n", + "3 2024-01-05 232.56 233.35 231.69 232.76 59577900\n", + "4 2024-01-08 232.76 234.88 232.38 233.33 82783300\n", + ".. ... ... ... ... ... ...\n", + "203 2024-10-28 223.94 225.21 222.73 224.59 35406400\n", + "204 2024-10-29 224.59 226.06 224.25 225.56 37139600\n", + "205 2024-10-30 225.22 226.57 224.63 225.88 40530500\n", + "206 2024-10-31 225.99 226.81 224.62 226.36 35990900\n", + "207 2024-11-01 226.35 226.39 224.56 225.41 38209700\n", + "\n", + "[208 rows x 6 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='HNXINDEX', start='2024-01-02', end='2024-11-01', interval='1D')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02024-01-0287.0588.0687.0087.5834702000
12024-01-0387.6287.9287.2687.8031183200
22024-01-0487.8088.1587.3187.7343019000
32024-01-0587.7588.1887.3087.9338998900
42024-01-0887.9388.5587.5487.7931658800
.....................
2032024-10-2891.8392.1591.8292.1517695900
2042024-10-2992.1592.4091.9392.3219235800
2052024-10-3092.3392.8292.0792.4624912600
2062024-10-3192.4792.5692.0592.3828369100
2072024-11-0192.3992.5191.6391.9635940600
\n", + "

208 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2024-01-02 87.05 88.06 87.00 87.58 34702000\n", + "1 2024-01-03 87.62 87.92 87.26 87.80 31183200\n", + "2 2024-01-04 87.80 88.15 87.31 87.73 43019000\n", + "3 2024-01-05 87.75 88.18 87.30 87.93 38998900\n", + "4 2024-01-08 87.93 88.55 87.54 87.79 31658800\n", + ".. ... ... ... ... ... ...\n", + "203 2024-10-28 91.83 92.15 91.82 92.15 17695900\n", + "204 2024-10-29 92.15 92.40 91.93 92.32 19235800\n", + "205 2024-10-30 92.33 92.82 92.07 92.46 24912600\n", + "206 2024-10-31 92.47 92.56 92.05 92.38 28369100\n", + "207 2024-11-01 92.39 92.51 91.63 91.96 35940600\n", + "\n", + "[208 rows x 6 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='UPCOMINDEX', start='2024-01-02', end='2024-11-01', interval='1D')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Chứng quyền" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02024-01-021.951.951.901.9013300
12024-01-031.851.891.851.8911800
22024-01-041.961.991.941.9450800
32024-01-051.951.951.951.95500
42024-01-081.931.991.931.975700
.....................
2032024-10-285.705.835.705.76246500
2042024-10-295.775.885.775.8261800
2052024-10-305.875.935.875.9048700
2062024-10-316.066.065.885.93626800
2072024-11-015.755.825.655.77302400
\n", + "

208 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2024-01-02 1.95 1.95 1.90 1.90 13300\n", + "1 2024-01-03 1.85 1.89 1.85 1.89 11800\n", + "2 2024-01-04 1.96 1.99 1.94 1.94 50800\n", + "3 2024-01-05 1.95 1.95 1.95 1.95 500\n", + "4 2024-01-08 1.93 1.99 1.93 1.97 5700\n", + ".. ... ... ... ... ... ...\n", + "203 2024-10-28 5.70 5.83 5.70 5.76 246500\n", + "204 2024-10-29 5.77 5.88 5.77 5.82 61800\n", + "205 2024-10-30 5.87 5.93 5.87 5.90 48700\n", + "206 2024-10-31 6.06 6.06 5.88 5.93 626800\n", + "207 2024-11-01 5.75 5.82 5.65 5.77 302400\n", + "\n", + "[208 rows x 6 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='CFPT2314', start='2024-01-02', end='2024-11-01', interval='1D')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Trái phiếu niêm yết" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02024-04-11120.0139.5120.0135.0186701
12024-04-12132.5135.1125.0130.2111161
22024-04-15130.2130.3123.0123.561607
32024-04-16123.0123.0117.0117.031563
42024-04-17114.2119.0110.9117.011721
.....................
1362024-10-28122.5122.5121.3121.33713
1372024-10-29122.9122.9121.5122.05542
1382024-10-30122.5123.0122.0122.07309
1392024-10-31122.0122.5122.0122.054799
1402024-11-01122.0122.9122.0122.91922
\n", + "

141 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2024-04-11 120.0 139.5 120.0 135.0 186701\n", + "1 2024-04-12 132.5 135.1 125.0 130.2 111161\n", + "2 2024-04-15 130.2 130.3 123.0 123.5 61607\n", + "3 2024-04-16 123.0 123.0 117.0 117.0 31563\n", + "4 2024-04-17 114.2 119.0 110.9 117.0 11721\n", + ".. ... ... ... ... ... ...\n", + "136 2024-10-28 122.5 122.5 121.3 121.3 3713\n", + "137 2024-10-29 122.9 122.9 121.5 122.0 5542\n", + "138 2024-10-30 122.5 123.0 122.0 122.0 7309\n", + "139 2024-10-31 122.0 122.5 122.0 122.0 54799\n", + "140 2024-11-01 122.0 122.9 122.0 122.9 1922\n", + "\n", + "[141 rows x 6 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='CII424002', start='2024-01-02', end='2024-11-01', interval='1D')" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/docs/tcbs/1_vietnam_stock_vnstock3_tcbs.ipynb b/docs/tcbs/1_vietnam_stock_vnstock3_tcbs.ipynb index 0fc179bc..7591fdaa 100644 --- a/docs/tcbs/1_vietnam_stock_vnstock3_tcbs.ipynb +++ b/docs/tcbs/1_vietnam_stock_vnstock3_tcbs.ipynb @@ -67,68 +67,1420 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, + "outputs": [], + "source": [ + "## Nạp toàn bộ thư viện\n", + "# from vnstock3 import *\n", + "\n", + "## Nạp Wrapper làm việc chính (UI chính của thư viện)\n", + "from vnstock3 import Vnstock" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# II. Truy xuất dữ liệu - CK Việt Nam" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Khởi tạo đối tượng stock để dùng cho tất cả thao tác truy xuất dữ liệu chứng khoán về sau. Luồng công việc minh hoạ dưới đây giả định bạn bắt đầu với 1 mã chứng khoán cần phân tích, mặc định là VN30F1M. Bạn có thể thay đổi sang mã bất kỳ bằng cách nhập tham số `symbol` tại hàm chức năng thay vì khởi tạo lại đối tượng. Ví dụ, mã `VN30F1M` được gán khi tạo đối tượng, nhưng khi gọi dữ liệu giá lịch sử, bạn có thể cập nhật mã mới là `ACB` thay vì khởi tạo lại đối tượng một cách bất tiện: `stock.quote.history(symbol='ACB', start='2020-01-01', end='2024-12-31')`\n", + "\n", + "* Chọn nguồn dữ liệu thuộc danh sách được hỗ trợ: VCI, TCBS cho chứng khoán trong nước, MSN cho dữ liệu chứng khoán quốc tế và sàn HOSE." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from vnstock3 import Vnstock\n", + "stock = Vnstock().stock(symbol='ACB', source='TCBS')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Listing: Liệt kê danh sách chứng khoán" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Bạn có thể sử dụng tính năng liệt kê danh sách niêm yết các mã chứng khoán từ nguồn VCI do nguồn TCBS không có sẵn dữ liệu tương ứng. Chi tiết: [tại đây](https://vnstocks.com/docs/huong-dan/thong-tin-niem-yet)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Quote: Giá chứng khoán" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Giá lịch sử" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Cổ phiếu" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02023-06-2218.2718.4018.1918.197976555
12023-06-2318.2318.4018.1418.4011435894
22023-06-2618.6518.9018.4818.6911788268
32023-06-2718.9418.9418.6518.655623455
42023-06-2818.6518.8218.5618.738233359
.....................
2452024-06-1724.6024.6024.2524.556375848
2462024-06-1824.7024.7024.4024.555729760
2472024-06-1924.5524.7024.2524.657618993
2482024-06-2024.5524.8524.4024.8010178313
2492024-06-2124.8524.8524.5024.555126289
\n", + "

250 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2023-06-22 18.27 18.40 18.19 18.19 7976555\n", + "1 2023-06-23 18.23 18.40 18.14 18.40 11435894\n", + "2 2023-06-26 18.65 18.90 18.48 18.69 11788268\n", + "3 2023-06-27 18.94 18.94 18.65 18.65 5623455\n", + "4 2023-06-28 18.65 18.82 18.56 18.73 8233359\n", + ".. ... ... ... ... ... ...\n", + "245 2024-06-17 24.60 24.60 24.25 24.55 6375848\n", + "246 2024-06-18 24.70 24.70 24.40 24.55 5729760\n", + "247 2024-06-19 24.55 24.70 24.25 24.65 7618993\n", + "248 2024-06-20 24.55 24.85 24.40 24.80 10178313\n", + "249 2024-06-21 24.85 24.85 24.50 24.55 5126289\n", + "\n", + "[250 rows x 6 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = stock.quote.history(start='2024-01-01', end='2024-06-21', interval='1D')\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\n", - " Khi tiếp tục sử dụng Vnstock3, bạn xác nhận rằng bạn đã đọc, hiểu và đồng ý với Chính sách quyền riêng tư và Điều khoản, điều kiện về giấy phép sử dụng Vnstock3.\n", - "\n", - " Chi tiết:\n", - "\n", - " - Giấy phép sử dụng phần mềm: https://vnstocks.com/docs/tai-lieu/giay-phep-su-dung\n", - " - Chính sách quyền riêng tư: https://vnstocks.com/docs/tai-lieu/chinh-sach-quyen-rieng-tu\n", - " \n" + "Mã chứng khoán: ACB\n", + "Loại tài sản: stock\n" ] } ], "source": [ - "## Nạp toàn bộ thư viện\n", - "# from vnstock3 import *\n", - "\n", - "## Nạp Wrapper làm việc chính (UI chính của thư viện)\n", - "from vnstock3 import Vnstock" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# II. Truy xuất dữ liệu - CK Việt Nam" + "# Tất cả dataframe dữ liệu sẽ được gán thuộc tính tên và loại tài sản tương ứng\n", + "print(f'Mã chứng khoán: {df.name}')\n", + "print(f'Loại tài sản: {df.category}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Hợp đồng tương lai" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02023-11-021057.51087.01054.91087.0304457
12023-11-031092.11094.71084.71087.0283751
22023-11-061095.91106.01095.51106.0245465
32023-11-071102.21102.81094.11095.4225214
42023-11-081094.71136.61086.51134.0338840
.....................
2452024-10-281330.01332.31327.21332.0130396
2462024-10-291334.01341.01334.01339.4163921
2472024-10-301341.61342.71331.51342.0186935
2482024-10-311339.01347.81333.71343.5202412
2492024-11-011340.41340.41326.61330.4215622
\n", + "

250 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2023-11-02 1057.5 1087.0 1054.9 1087.0 304457\n", + "1 2023-11-03 1092.1 1094.7 1084.7 1087.0 283751\n", + "2 2023-11-06 1095.9 1106.0 1095.5 1106.0 245465\n", + "3 2023-11-07 1102.2 1102.8 1094.1 1095.4 225214\n", + "4 2023-11-08 1094.7 1136.6 1086.5 1134.0 338840\n", + ".. ... ... ... ... ... ...\n", + "245 2024-10-28 1330.0 1332.3 1327.2 1332.0 130396\n", + "246 2024-10-29 1334.0 1341.0 1334.0 1339.4 163921\n", + "247 2024-10-30 1341.6 1342.7 1331.5 1342.0 186935\n", + "248 2024-10-31 1339.0 1347.8 1333.7 1343.5 202412\n", + "249 2024-11-01 1340.4 1340.4 1326.6 1330.4 215622\n", + "\n", + "[250 rows x 6 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='VN30F1M', start='2024-01-02', end='2024-11-01', interval='1D')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02023-11-021057.51087.01054.91087.0304457
12023-11-031092.11094.71084.71087.0283751
22023-11-061095.91106.01095.51106.0245465
32023-11-071102.21102.81094.11095.4225214
42023-11-081094.71136.61086.51134.0338840
.....................
2452024-10-281330.01332.31327.21332.0130396
2462024-10-291334.01341.01334.01339.4163921
2472024-10-301341.61342.71331.51342.0186935
2482024-10-311339.01347.81333.71343.5202412
2492024-11-011340.41340.41326.61330.4215622
\n", + "

250 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2023-11-02 1057.5 1087.0 1054.9 1087.0 304457\n", + "1 2023-11-03 1092.1 1094.7 1084.7 1087.0 283751\n", + "2 2023-11-06 1095.9 1106.0 1095.5 1106.0 245465\n", + "3 2023-11-07 1102.2 1102.8 1094.1 1095.4 225214\n", + "4 2023-11-08 1094.7 1136.6 1086.5 1134.0 338840\n", + ".. ... ... ... ... ... ...\n", + "245 2024-10-28 1330.0 1332.3 1327.2 1332.0 130396\n", + "246 2024-10-29 1334.0 1341.0 1334.0 1339.4 163921\n", + "247 2024-10-30 1341.6 1342.7 1331.5 1342.0 186935\n", + "248 2024-10-31 1339.0 1347.8 1333.7 1343.5 202412\n", + "249 2024-11-01 1340.4 1340.4 1326.6 1330.4 215622\n", + "\n", + "[250 rows x 6 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='VN30F2411', start='2024-01-02', end='2024-11-01', interval='1D')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Chỉ số" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02023-11-011029.001039.661020.011039.66539972091
12023-11-021048.621075.471045.141075.47667009654
22023-11-031081.351082.231071.111076.78649923945
32023-11-061082.211089.661081.011089.66508936305
42023-11-071086.681089.891079.421080.29480141780
.....................
2452024-10-251260.941261.721251.751252.72480454993
2462024-10-281252.761255.181250.941254.77368249767
2472024-10-291258.031262.381257.431261.78454099020
2482024-10-301263.571264.841255.071258.63429794790
2492024-10-311260.231267.881255.551264.48409737985
\n", + "

250 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2023-11-01 1029.00 1039.66 1020.01 1039.66 539972091\n", + "1 2023-11-02 1048.62 1075.47 1045.14 1075.47 667009654\n", + "2 2023-11-03 1081.35 1082.23 1071.11 1076.78 649923945\n", + "3 2023-11-06 1082.21 1089.66 1081.01 1089.66 508936305\n", + "4 2023-11-07 1086.68 1089.89 1079.42 1080.29 480141780\n", + ".. ... ... ... ... ... ...\n", + "245 2024-10-25 1260.94 1261.72 1251.75 1252.72 480454993\n", + "246 2024-10-28 1252.76 1255.18 1250.94 1254.77 368249767\n", + "247 2024-10-29 1258.03 1262.38 1257.43 1261.78 454099020\n", + "248 2024-10-30 1263.57 1264.84 1255.07 1258.63 429794790\n", + "249 2024-10-31 1260.23 1267.88 1255.55 1264.48 409737985\n", + "\n", + "[250 rows x 6 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='VNINDEX', start='2024-01-02', end='2024-11-01', interval='1D')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02023-11-01205.74209.68203.33209.6595200830
12023-11-02209.83218.38208.06217.97116214718
22023-11-03217.97219.44216.42217.7591410974
32023-11-06217.77219.59215.54219.5976203308
42023-11-07217.73221.57217.73218.2988848102
.....................
2452024-10-25224.69225.48224.12224.6336318726
2462024-10-28223.94225.21222.73224.5935431585
2472024-10-29224.59226.06224.25225.5637164309
2482024-10-30225.22226.57224.63225.8840564851
2492024-10-31225.99226.81224.62226.3636067438
\n", + "

250 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2023-11-01 205.74 209.68 203.33 209.65 95200830\n", + "1 2023-11-02 209.83 218.38 208.06 217.97 116214718\n", + "2 2023-11-03 217.97 219.44 216.42 217.75 91410974\n", + "3 2023-11-06 217.77 219.59 215.54 219.59 76203308\n", + "4 2023-11-07 217.73 221.57 217.73 218.29 88848102\n", + ".. ... ... ... ... ... ...\n", + "245 2024-10-25 224.69 225.48 224.12 224.63 36318726\n", + "246 2024-10-28 223.94 225.21 222.73 224.59 35431585\n", + "247 2024-10-29 224.59 226.06 224.25 225.56 37164309\n", + "248 2024-10-30 225.22 226.57 224.63 225.88 40564851\n", + "249 2024-10-31 225.99 226.81 224.62 226.36 36067438\n", + "\n", + "[250 rows x 6 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='HNXINDEX', start='2024-01-02', end='2024-11-01', interval='1D')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02023-11-0180.9481.7080.7281.7035442907
12023-11-0281.7083.9781.6983.9745099960
22023-11-0383.9784.3383.6484.1639278480
32023-11-0684.1785.0584.1785.0527605093
42023-11-0785.0685.1884.3484.6131644159
.....................
2452024-10-2592.0692.0991.4691.8243155884
2462024-10-2891.8392.1591.8292.1520380568
2472024-10-2992.1592.4091.9392.3222619774
2482024-10-3092.3392.8292.0792.4626581490
2492024-10-3192.4792.5692.0592.3830400557
\n", + "

250 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2023-11-01 80.94 81.70 80.72 81.70 35442907\n", + "1 2023-11-02 81.70 83.97 81.69 83.97 45099960\n", + "2 2023-11-03 83.97 84.33 83.64 84.16 39278480\n", + "3 2023-11-06 84.17 85.05 84.17 85.05 27605093\n", + "4 2023-11-07 85.06 85.18 84.34 84.61 31644159\n", + ".. ... ... ... ... ... ...\n", + "245 2024-10-25 92.06 92.09 91.46 91.82 43155884\n", + "246 2024-10-28 91.83 92.15 91.82 92.15 20380568\n", + "247 2024-10-29 92.15 92.40 91.93 92.32 22619774\n", + "248 2024-10-30 92.33 92.82 92.07 92.46 26581490\n", + "249 2024-10-31 92.47 92.56 92.05 92.38 30400557\n", + "\n", + "[250 rows x 6 columns]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock.quote.history(symbol='UPCOMINDEX', start='2024-01-02', end='2024-11-01', interval='1D')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "* Khởi tạo đối tượng stock để dùng cho tất cả thao tác truy xuất dữ liệu chứng khoán về sau. Luồng công việc minh hoạ dưới đây giả định bạn bắt đầu với 1 mã chứng khoán cần phân tích, mặc định là VN30F1M. Bạn có thể thay đổi sang mã bất kỳ bằng cách nhập tham số `symbol` tại hàm chức năng thay vì khởi tạo lại đối tượng. Ví dụ, mã `VN30F1M` được gán khi tạo đối tượng, nhưng khi gọi dữ liệu giá lịch sử, bạn có thể cập nhật mã mới là `ACB` thay vì khởi tạo lại đối tượng một cách bất tiện: `stock.quote.history(symbol='ACB', start='2020-01-01', end='2024-12-31')`\n", - "\n", - "* Chọn nguồn dữ liệu thuộc danh sách được hỗ trợ: VCI, TCBS cho chứng khoán trong nước, MSN cho dữ liệu chứng khoán quốc tế và sàn HOSE." + "##### Chứng quyền" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosevolume
02023-11-021.761.821.761.8244300
12023-11-031.921.921.841.8828000
22023-11-061.881.891.861.8744300
32023-11-071.861.861.861.86800
42023-11-081.871.981.851.98169300
.....................
2452024-10-285.705.835.705.76246500
2462024-10-295.775.885.775.8261800
2472024-10-305.875.935.875.9048700
2482024-10-316.066.065.885.93626800
2492024-11-015.755.825.655.77302400
\n", + "

250 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time open high low close volume\n", + "0 2023-11-02 1.76 1.82 1.76 1.82 44300\n", + "1 2023-11-03 1.92 1.92 1.84 1.88 28000\n", + "2 2023-11-06 1.88 1.89 1.86 1.87 44300\n", + "3 2023-11-07 1.86 1.86 1.86 1.86 800\n", + "4 2023-11-08 1.87 1.98 1.85 1.98 169300\n", + ".. ... ... ... ... ... ...\n", + "245 2024-10-28 5.70 5.83 5.70 5.76 246500\n", + "246 2024-10-29 5.77 5.88 5.77 5.82 61800\n", + "247 2024-10-30 5.87 5.93 5.87 5.90 48700\n", + "248 2024-10-31 6.06 6.06 5.88 5.93 626800\n", + "249 2024-11-01 5.75 5.82 5.65 5.77 302400\n", + "\n", + "[250 rows x 6 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "from vnstock3 import Vnstock\n", - "stock = Vnstock().stock(symbol='ACB', source='TCBS')" + "stock.quote.history(symbol='CFPT2314', start='2024-01-02', end='2024-11-01', interval='1D')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Listing: Liệt kê danh sách chứng khoán" + "#### Intraday: dữ liệu khớp lệnh" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 12, "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timepricevolumematch_type
02024-11-02 14:45:0024900.03655800ATO/ATC
12024-11-02 14:29:4825100.0400Sell
22024-11-02 14:29:4825100.01700Sell
32024-11-02 14:29:4825100.01900Sell
42024-11-02 14:29:3225100.0200Sell
...............
952024-11-02 14:25:0225250.0100Buy
962024-11-02 14:25:0225250.0300Buy
972024-11-02 14:25:0225250.01000Buy
982024-11-02 14:25:0225250.02000Buy
992024-11-02 14:25:0225250.09800Buy
\n", + "

100 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " time price volume match_type\n", + "0 2024-11-02 14:45:00 24900.0 3655800 ATO/ATC\n", + "1 2024-11-02 14:29:48 25100.0 400 Sell\n", + "2 2024-11-02 14:29:48 25100.0 1700 Sell\n", + "3 2024-11-02 14:29:48 25100.0 1900 Sell\n", + "4 2024-11-02 14:29:32 25100.0 200 Sell\n", + ".. ... ... ... ...\n", + "95 2024-11-02 14:25:02 25250.0 100 Buy\n", + "96 2024-11-02 14:25:02 25250.0 300 Buy\n", + "97 2024-11-02 14:25:02 25250.0 1000 Buy\n", + "98 2024-11-02 14:25:02 25250.0 2000 Buy\n", + "99 2024-11-02 14:25:02 25250.0 9800 Buy\n", + "\n", + "[100 rows x 4 columns]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "Bạn có thể sử dụng tính năng liệt kê danh sách niêm yết các mã chứng khoán từ nguồn VCI do nguồn TCBS không có sẵn dữ liệu tương ứng. Chi tiết: [tại đây](https://vnstocks.com/docs/huong-dan/thong-tin-niem-yet)" + "# Dữ liệu khớp lệnh trong ngày giao dịch realtime hoặc ngày gần nhất (ngoài giờ giao dịch)\n", + "stock.quote.intraday(symbol='ACB', show_log=False)" ] }, { @@ -147,7 +1499,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -198,26 +1550,26 @@ " \n", " 0\n", " ACB\n", - " 25000.0\n", - " -970900.0\n", - " -43.7\n", - " 0.0\n", - " -1.6\n", - " -1.0\n", - " 2.6\n", - " 38.1\n", + " 25400.0\n", + " -66400.0\n", + " -25.3\n", + " 1.0\n", + " 0.8\n", + " -1.9\n", + " 5.2\n", + " 42.0\n", " 26250.0\n", " ...\n", - " 1.5\n", - " 0.238528\n", - " 2.9\n", - " 267200.0\n", - " 1498000.0\n", - " 30387.0\n", - " 25000.0\n", - " -0.44\n", - " -0.9\n", - " 23.4\n", + " 1.4\n", + " 0.223101\n", + " 3.1\n", + " 488600.0\n", + " 27900.0\n", + " 30521.0\n", + " 25300.0\n", + " 0.33\n", + " 0.1\n", + " 20.7\n", " \n", " \n", " 1\n", @@ -274,34 +1626,34 @@ ], "text/plain": [ " Mã CP Giá KLGD ròng(CM) %KLGD ròng (CM) Phiên +/- \\\n", - "0 ACB 25000.0 -970900.0 -43.7 0.0 \n", + "0 ACB 25400.0 -66400.0 -25.3 1.0 \n", "1 FPT NaN NaN NaN NaN \n", "2 VNM NaN NaN NaN NaN \n", "\n", " % thay đổi giá 3D % thay đổi giá 1M % thay đổi giá 3M % thay đổi giá 1Y \\\n", - "0 -1.6 -1.0 2.6 38.1 \n", + "0 0.8 -1.9 5.2 42.0 \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN \n", "\n", " Đỉnh 1M ... P/B ROE TCRating Khối lượng Dư bán \\\n", - "0 26250.0 ... 1.5 0.238528 2.9 267200.0 \n", + "0 26250.0 ... 1.4 0.223101 3.1 488600.0 \n", "1 NaN ... NaN NaN NaN NaN \n", "2 NaN ... NaN NaN NaN NaN \n", "\n", " Khối lượng Dư mua TCBS định giá Khớp nhiều nhất Đ.góp VNINDEX \\\n", - "0 1498000.0 30387.0 25000.0 -0.44 \n", + "0 27900.0 30521.0 25300.0 0.33 \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN \n", "\n", " %Giá - %VNI (1M) %Giá - %VNI (1Y) \n", - "0 -0.9 23.4 \n", + "0 0.1 20.7 \n", "1 NaN NaN \n", "2 NaN NaN \n", "\n", "[3 rows x 28 columns]" ] }, - "execution_count": 3, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -312,7 +1664,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -336,7 +1688,6 @@ " \n", " \n", " \n", - " \n", " 0\n", " 1\n", " 2\n", @@ -345,463 +1696,238 @@ " \n", " \n", " \n", - " listing\n", - " symbol\n", + " Mã CP\n", " VCB\n", " ACB\n", " TCB\n", " BID\n", " \n", " \n", - " ceiling\n", - " 97900\n", - " 27900\n", - " 26150\n", - " 52800\n", - " \n", - " \n", - " floor\n", - " 85100\n", - " 24300\n", - " 22750\n", - " 45950\n", - " \n", - " \n", - " ref_price\n", - " 91500\n", - " 26100\n", - " 24450\n", - " 49400\n", - " \n", - " \n", - " stock_type\n", - " STOCK\n", - " STOCK\n", - " STOCK\n", - " STOCK\n", - " \n", - " \n", - " exchange\n", - " HSX\n", - " HSX\n", - " HSX\n", - " HSX\n", - " \n", - " \n", - " last_trading_date\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " listed_share\n", - " 5589091262\n", - " 4466657912\n", - " 7045021622\n", - " 5700435900\n", - " \n", - " \n", - " type\n", - " STOCK\n", - " STOCK\n", - " STOCK\n", - " STOCK\n", - " \n", - " \n", - " id\n", - " 8424561\n", - " 8424512\n", - " 8424683\n", - " 8424583\n", - " \n", - " \n", - " organ_name\n", - " Ngân hàng Thương mại Cổ phần Ngoại thương Việt...\n", - " Ngân hàng Thương mại Cổ phần Á Châu\n", - " Ngân hàng Thương mại Cổ phần Kỹ thương Việt Nam\n", - " Ngân hàng Thương mại Cổ phần Đầu tư và Phát tr...\n", - " \n", - " \n", - " prior_close_price\n", - " 91500\n", - " 26100\n", - " 24450\n", - " 49400\n", - " \n", - " \n", - " benefit\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " match\n", - " match_price\n", - " 91400\n", - " 25950\n", - " 24350\n", - " 49400\n", + " Giá\n", + " 93600.0\n", + " 25400.0\n", + " 23900.0\n", + " 47750.0\n", " \n", " \n", - " match_vol\n", - " 151300\n", - " 735400\n", - " 702700\n", - " 191700\n", + " KLGD ròng(CM)\n", + " -26500\n", + " -66400\n", + " 0\n", + " 0\n", " \n", " \n", - " accumulated_volume\n", - " 930700\n", - " 9026900\n", - " 11945500\n", - " 1161900\n", + " %KLGD ròng (CM)\n", + " -7.8\n", + " -25.3\n", + " 0.0\n", + " 0.0\n", " \n", " \n", - " accumulated_value\n", - " 85340\n", - " 235214\n", - " 292054\n", - " 57573\n", + " Phiên +/-\n", + " 1\n", + " 1\n", + " -1\n", + " 3\n", " \n", " \n", - " avg_match_price\n", - " 91694.423552\n", - " 26057.007389\n", - " 24448.87196\n", - " 49550.735864\n", + " % thay đổi giá 3D\n", + " 1.7\n", + " 0.8\n", + " 0.6\n", + " 0.4\n", " \n", " \n", - " highest\n", - " 92200\n", - " 26250\n", - " 24600\n", - " 49750\n", + " % thay đổi giá 1M\n", + " 1.2\n", + " -1.9\n", + " -1.2\n", + " -4.7\n", " \n", " \n", - " lowest\n", - " 91300\n", - " 25950\n", - " 24350\n", - " 49400\n", + " % thay đổi giá 3M\n", + " 7.0\n", + " 5.2\n", + " 4.1\n", + " 2.0\n", " \n", " \n", - " match_type\n", - " unknown\n", - " unknown\n", - " unknown\n", - " unknown\n", + " % thay đổi giá 1Y\n", + " 9.0\n", + " 42.0\n", + " 75.4\n", + " 31.2\n", " \n", " \n", - " foreign_sell_volume\n", - " 470400\n", - " 0\n", - " 548700\n", - " 120440\n", + " Đỉnh 1M\n", + " 93600\n", + " 26250\n", + " 24900\n", + " 50300\n", " \n", " \n", - " foreign_buy_volume\n", - " 490000\n", - " 0\n", - " 3399000\n", - " 1900\n", + " Đỉnh 3M\n", + " 93600\n", + " 26250\n", + " 24900\n", + " 50600\n", " \n", " \n", - " current_room\n", - " 370320715\n", - " 0\n", - " 42987568\n", - " 733831959\n", + " Đỉnh 1Y\n", + " 97400\n", + " 26250\n", + " 24900\n", + " 54400\n", " \n", " \n", - " total_room\n", - " 1676727378\n", - " 1339997373\n", - " 1584143561\n", - " 1710130770\n", + " Đáy 1M\n", + " 91000\n", + " 24900\n", + " 23500\n", + " 47500\n", " \n", " \n", - " total_accumulated_value\n", - " 85340.07\n", - " 235214.605\n", - " 292054.95\n", - " 57573.18\n", + " Đáy 3M\n", + " 86900\n", + " 23200\n", + " 20850\n", + " 46000\n", " \n", " \n", - " total_accumulated_volume\n", - " 9307\n", - " 90269\n", - " 119455\n", - " 11619\n", + " Đáy 1Y\n", + " 80300\n", + " 17976\n", + " 13432\n", + " 35496\n", " \n", " \n", - " reference_price\n", - " 91500\n", - " 26100\n", - " 24450\n", - " 49400\n", + " %Đỉnh 1Y\n", + " -3.9\n", + " -3.2\n", + " -4.0\n", + " -12.2\n", " \n", " \n", - " bid_ask\n", - " bid_1_price\n", - " 91400\n", - " 25950\n", - " 24350\n", - " 49400\n", + " %Đáy 1Y\n", + " 16.6\n", + " 41.3\n", + " 77.9\n", + " 34.5\n", " \n", " \n", - " bid_1_volume\n", - " 5600\n", - " 319700\n", - " 689500\n", - " 27900\n", + " P/E\n", + " 15.1\n", + " 7.0\n", + " 7.5\n", + " 11.6\n", " \n", " \n", - " bid_2_price\n", - " 91300\n", - " 25900\n", - " 24300\n", - " 49350\n", + " P/B\n", + " 2.7\n", + " 1.4\n", + " 1.2\n", + " 2.0\n", " \n", " \n", - " bid_2_volume\n", - " 9300\n", - " 377800\n", - " 489500\n", - " 72200\n", + " ROE\n", + " 0.198216\n", + " 0.223101\n", + " 0.168094\n", + " 0.18905\n", " \n", " \n", - " bid_3_price\n", - " 91200\n", - " 25850\n", - " 24250\n", - " 49300\n", + " TCRating\n", + " 3.4\n", + " 3.1\n", + " 3.3\n", + " 2.7\n", " \n", " \n", - " bid_3_volume\n", - " 33700\n", - " 108600\n", - " 201300\n", - " 62800\n", + " Khối lượng Dư bán\n", + " 9000\n", + " 488600\n", + " 434600\n", + " 5500\n", " \n", " \n", - " ask_1_price\n", - " 91500\n", - " 26000\n", - " 24400\n", - " 49450\n", + " Khối lượng Dư mua\n", + " 75900\n", + " 27900\n", + " 1155700\n", + " 333700\n", " \n", " \n", - " ask_1_volume\n", - " 6000\n", - " 8200\n", - " 37100\n", - " 11600\n", + " TCBS định giá\n", + " 54958\n", + " 30521\n", + " 30602\n", + " 37718\n", " \n", " \n", - " ask_2_price\n", - " 91700\n", - " 26050\n", - " 24450\n", - " 49500\n", + " Khớp nhiều nhất\n", + " 93600\n", + " 25300\n", + " 23900\n", + " 47750\n", " \n", " \n", - " ask_2_volume\n", - " 4500\n", - " 15000\n", - " 199400\n", - " 2100\n", + " Đ.góp VNINDEX\n", + " 2.58\n", + " 0.33\n", + " -0.17\n", + " 0.07\n", " \n", " \n", - " ask_3_price\n", - " 91800\n", - " 26100\n", - " 24500\n", - " 49550\n", + " %Giá - %VNI (1M)\n", + " 3.2\n", + " 0.1\n", + " 0.8\n", + " -2.6\n", " \n", " \n", - " ask_3_volume\n", - " 13400\n", - " 59200\n", - " 298100\n", - " 1300\n", + " %Giá - %VNI (1Y)\n", + " -12.3\n", + " 20.7\n", + " 54.1\n", + " 9.9\n", " \n", " \n", "\n", "" ], "text/plain": [ - " 0 \\\n", - "listing symbol VCB \n", - " ceiling 97900 \n", - " floor 85100 \n", - " ref_price 91500 \n", - " stock_type STOCK \n", - " exchange HSX \n", - " last_trading_date \n", - " listed_share 5589091262 \n", - " type STOCK \n", - " id 8424561 \n", - " organ_name Ngân hàng Thương mại Cổ phần Ngoại thương Việt... \n", - " prior_close_price 91500 \n", - " benefit \n", - "match match_price 91400 \n", - " match_vol 151300 \n", - " accumulated_volume 930700 \n", - " accumulated_value 85340 \n", - " avg_match_price 91694.423552 \n", - " highest 92200 \n", - " lowest 91300 \n", - " match_type unknown \n", - " foreign_sell_volume 470400 \n", - " foreign_buy_volume 490000 \n", - " current_room 370320715 \n", - " total_room 1676727378 \n", - " total_accumulated_value 85340.07 \n", - " total_accumulated_volume 9307 \n", - " reference_price 91500 \n", - "bid_ask bid_1_price 91400 \n", - " bid_1_volume 5600 \n", - " bid_2_price 91300 \n", - " bid_2_volume 9300 \n", - " bid_3_price 91200 \n", - " bid_3_volume 33700 \n", - " ask_1_price 91500 \n", - " ask_1_volume 6000 \n", - " ask_2_price 91700 \n", - " ask_2_volume 4500 \n", - " ask_3_price 91800 \n", - " ask_3_volume 13400 \n", - "\n", - " 1 \\\n", - "listing symbol ACB \n", - " ceiling 27900 \n", - " floor 24300 \n", - " ref_price 26100 \n", - " stock_type STOCK \n", - " exchange HSX \n", - " last_trading_date \n", - " listed_share 4466657912 \n", - " type STOCK \n", - " id 8424512 \n", - " organ_name Ngân hàng Thương mại Cổ phần Á Châu \n", - " prior_close_price 26100 \n", - " benefit \n", - "match match_price 25950 \n", - " match_vol 735400 \n", - " accumulated_volume 9026900 \n", - " accumulated_value 235214 \n", - " avg_match_price 26057.007389 \n", - " highest 26250 \n", - " lowest 25950 \n", - " match_type unknown \n", - " foreign_sell_volume 0 \n", - " foreign_buy_volume 0 \n", - " current_room 0 \n", - " total_room 1339997373 \n", - " total_accumulated_value 235214.605 \n", - " total_accumulated_volume 90269 \n", - " reference_price 26100 \n", - "bid_ask bid_1_price 25950 \n", - " bid_1_volume 319700 \n", - " bid_2_price 25900 \n", - " bid_2_volume 377800 \n", - " bid_3_price 25850 \n", - " bid_3_volume 108600 \n", - " ask_1_price 26000 \n", - " ask_1_volume 8200 \n", - " ask_2_price 26050 \n", - " ask_2_volume 15000 \n", - " ask_3_price 26100 \n", - " ask_3_volume 59200 \n", - "\n", - " 2 \\\n", - "listing symbol TCB \n", - " ceiling 26150 \n", - " floor 22750 \n", - " ref_price 24450 \n", - " stock_type STOCK \n", - " exchange HSX \n", - " last_trading_date \n", - " listed_share 7045021622 \n", - " type STOCK \n", - " id 8424683 \n", - " organ_name Ngân hàng Thương mại Cổ phần Kỹ thương Việt Nam \n", - " prior_close_price 24450 \n", - " benefit \n", - "match match_price 24350 \n", - " match_vol 702700 \n", - " accumulated_volume 11945500 \n", - " accumulated_value 292054 \n", - " avg_match_price 24448.87196 \n", - " highest 24600 \n", - " lowest 24350 \n", - " match_type unknown \n", - " foreign_sell_volume 548700 \n", - " foreign_buy_volume 3399000 \n", - " current_room 42987568 \n", - " total_room 1584143561 \n", - " total_accumulated_value 292054.95 \n", - " total_accumulated_volume 119455 \n", - " reference_price 24450 \n", - "bid_ask bid_1_price 24350 \n", - " bid_1_volume 689500 \n", - " bid_2_price 24300 \n", - " bid_2_volume 489500 \n", - " bid_3_price 24250 \n", - " bid_3_volume 201300 \n", - " ask_1_price 24400 \n", - " ask_1_volume 37100 \n", - " ask_2_price 24450 \n", - " ask_2_volume 199400 \n", - " ask_3_price 24500 \n", - " ask_3_volume 298100 \n", - "\n", - " 3 \n", - "listing symbol BID \n", - " ceiling 52800 \n", - " floor 45950 \n", - " ref_price 49400 \n", - " stock_type STOCK \n", - " exchange HSX \n", - " last_trading_date \n", - " listed_share 5700435900 \n", - " type STOCK \n", - " id 8424583 \n", - " organ_name Ngân hàng Thương mại Cổ phần Đầu tư và Phát tr... \n", - " prior_close_price 49400 \n", - " benefit \n", - "match match_price 49400 \n", - " match_vol 191700 \n", - " accumulated_volume 1161900 \n", - " accumulated_value 57573 \n", - " avg_match_price 49550.735864 \n", - " highest 49750 \n", - " lowest 49400 \n", - " match_type unknown \n", - " foreign_sell_volume 120440 \n", - " foreign_buy_volume 1900 \n", - " current_room 733831959 \n", - " total_room 1710130770 \n", - " total_accumulated_value 57573.18 \n", - " total_accumulated_volume 11619 \n", - " reference_price 49400 \n", - "bid_ask bid_1_price 49400 \n", - " bid_1_volume 27900 \n", - " bid_2_price 49350 \n", - " bid_2_volume 72200 \n", - " bid_3_price 49300 \n", - " bid_3_volume 62800 \n", - " ask_1_price 49450 \n", - " ask_1_volume 11600 \n", - " ask_2_price 49500 \n", - " ask_2_volume 2100 \n", - " ask_3_price 49550 \n", - " ask_3_volume 1300 " + " 0 1 2 3\n", + "Mã CP VCB ACB TCB BID\n", + "Giá 93600.0 25400.0 23900.0 47750.0\n", + "KLGD ròng(CM) -26500 -66400 0 0\n", + "%KLGD ròng (CM) -7.8 -25.3 0.0 0.0\n", + "Phiên +/- 1 1 -1 3\n", + "% thay đổi giá 3D 1.7 0.8 0.6 0.4\n", + "% thay đổi giá 1M 1.2 -1.9 -1.2 -4.7\n", + "% thay đổi giá 3M 7.0 5.2 4.1 2.0\n", + "% thay đổi giá 1Y 9.0 42.0 75.4 31.2\n", + "Đỉnh 1M 93600 26250 24900 50300\n", + "Đỉnh 3M 93600 26250 24900 50600\n", + "Đỉnh 1Y 97400 26250 24900 54400\n", + "Đáy 1M 91000 24900 23500 47500\n", + "Đáy 3M 86900 23200 20850 46000\n", + "Đáy 1Y 80300 17976 13432 35496\n", + "%Đỉnh 1Y -3.9 -3.2 -4.0 -12.2\n", + "%Đáy 1Y 16.6 41.3 77.9 34.5\n", + "P/E 15.1 7.0 7.5 11.6\n", + "P/B 2.7 1.4 1.2 2.0\n", + "ROE 0.198216 0.223101 0.168094 0.18905\n", + "TCRating 3.4 3.1 3.3 2.7\n", + "Khối lượng Dư bán 9000 488600 434600 5500\n", + "Khối lượng Dư mua 75900 27900 1155700 333700\n", + "TCBS định giá 54958 30521 30602 37718\n", + "Khớp nhiều nhất 93600 25300 23900 47750\n", + "Đ.góp VNINDEX 2.58 0.33 -0.17 0.07\n", + "%Giá - %VNI (1M) 3.2 0.1 0.8 -2.6\n", + "%Giá - %VNI (1Y) -12.3 20.7 54.1 9.9" ] }, - "execution_count": 13, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -819,7 +1945,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -844,7 +1970,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -910,7 +2036,7 @@ " \n", " \n", " stock_rating\n", - " 2.9\n", + " 3.4\n", " \n", " \n", " delta_in_week\n", @@ -918,11 +2044,11 @@ " \n", " \n", " delta_in_month\n", - " 0.018\n", + " 0.042\n", " \n", " \n", " delta_in_year\n", - " -0.065\n", + " -0.143\n", " \n", " \n", " short_name\n", @@ -955,17 +2081,17 @@ "issue_share 5589.1\n", "established_year 2008\n", "no_employees 23992\n", - "stock_rating 2.9\n", + "stock_rating 3.4\n", "delta_in_week 0.017\n", - "delta_in_month 0.018\n", - "delta_in_year -0.065\n", + "delta_in_month 0.042\n", + "delta_in_year -0.143\n", "short_name Vietcombank\n", "website https://vietcombank.com.vn\n", "industry_id 289\n", "industry_id_v2 8355" ] }, - "execution_count": 37, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -984,7 +2110,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -1055,7 +2181,7 @@ "business_strategies Ngân hàng số 1 tại Việt Nam, một trong 100 ng..." ] }, - "execution_count": 36, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1074,7 +2200,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -1129,7 +2255,7 @@ "2 Khác 0.0207" ] }, - "execution_count": 9, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -1147,7 +2273,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -1187,7 +2313,7 @@ " Mua\n", " 5000.0\n", " 80900.0\n", - " 0.133\n", + " 0.156\n", " \n", " \n", " 1\n", @@ -1196,7 +2322,7 @@ " Bán\n", " -2523.0\n", " 64175.0\n", - " 0.429\n", + " 0.457\n", " \n", " \n", " 2\n", @@ -1205,7 +2331,7 @@ " Bán\n", " -15000.0\n", " 63913.0\n", - " 0.435\n", + " 0.463\n", " \n", " \n", " 3\n", @@ -1214,7 +2340,7 @@ " Mua\n", " 10000.0\n", " 43434.0\n", - " 1.111\n", + " 1.153\n", " \n", " \n", " 4\n", @@ -1223,7 +2349,7 @@ " Bán\n", " -10000.0\n", " 54974.0\n", - " 0.668\n", + " 0.701\n", " \n", " \n", "\n", @@ -1238,14 +2364,14 @@ "4 2019-11-29 None Bán -10000.0 54974.0 \n", "\n", " deal_ratio \n", - "0 0.133 \n", - "1 0.429 \n", - "2 0.435 \n", - "3 1.111 \n", - "4 0.668 " + "0 0.156 \n", + "1 0.457 \n", + "2 0.463 \n", + "3 1.153 \n", + "4 0.701 " ] }, - "execution_count": 35, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -1264,7 +2390,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -1331,7 +2457,7 @@ "4 Ngân Hàng TNHH MTV Ngoại Thương Việt Nam Tại Lào 1.0" ] }, - "execution_count": 34, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -1350,7 +2476,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -1423,7 +2549,7 @@ "11 Đỗ Thị Mai Hương Thành viên Ban kiểm soát 0.0" ] }, - "execution_count": 33, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1442,7 +2568,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -1609,7 +2735,7 @@ "4 1753-01-01 00:00:00 Ngân hàng Thương mại Cổ phần Ngoại thương Việt... " ] }, - "execution_count": 32, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1628,7 +2754,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -1667,6 +2793,45 @@ " \n", " \n", " 0\n", + " 51.1\n", + " 52.0\n", + " 93600.0\n", + " 1900.0\n", + " 0.021\n", + " 0.017\n", + " 11366151\n", + " VCB: Đường dẫn và Giải trình biến động lợi nh...\n", + " TCBS\n", + " 2024-10-31 15:22:00\n", + " \n", + " \n", + " 1\n", + " 51.1\n", + " 52.0\n", + " 93600.0\n", + " 1900.0\n", + " 0.021\n", + " 0.017\n", + " 11364938\n", + " Ông Nguyễn Mỹ Hào xin từ nhiệm vị trí Thành vi...\n", + " TCBS\n", + " 2024-10-31 00:08:00\n", + " \n", + " \n", + " 2\n", + " 54.5\n", + " 59.0\n", + " 91700.0\n", + " -300.0\n", + " -0.003\n", + " -0.003\n", + " 11364219\n", + " VCB: Thông báo nhận được đơn từ nhiệm Thành v...\n", + " TCBS\n", + " 2024-10-30 14:34:00\n", + " \n", + " \n", + " 3\n", " 58.2\n", " 69.0\n", " NaN\n", @@ -1679,7 +2844,7 @@ " 2024-10-19 10:45:00\n", " \n", " \n", - " 1\n", + " 4\n", " 56.8\n", " 70.0\n", " 92400.0\n", @@ -1691,80 +2856,41 @@ " TCBS\n", " 2024-10-18 17:42:00\n", " \n", - " \n", - " 2\n", - " 50.7\n", - " 63.0\n", - " 91400.0\n", - " 0.0\n", - " 0.000\n", - " 0.028\n", - " 11347901\n", - " VCB: Nghị quyết HĐQT về việc phê duyệt phương...\n", - " TCBS\n", - " 2024-10-15 16:37:00\n", - " \n", - " \n", - " 3\n", - " 61.2\n", - " 65.0\n", - " 92600.0\n", - " -100.0\n", - " -0.001\n", - " 0.018\n", - " 11337404\n", - " VCB: HĐQT phê duyệt giới hạn tín dụng đối với...\n", - " TCBS\n", - " 2024-10-03 17:56:00\n", - " \n", - " \n", - " 4\n", - " 58.4\n", - " 71.0\n", - " 90600.0\n", - " -900.0\n", - " -0.010\n", - " -0.002\n", - " 11325137\n", - " VCB: HĐQT phê duyệt điều chỉnh giới hạn tín d...\n", - " TCBS\n", - " 2024-09-20 17:26:00\n", - " \n", " \n", "\n", "" ], "text/plain": [ " rsi rs price price_change price_change_ratio \\\n", - "0 58.2 69.0 NaN NaN NaN \n", - "1 56.8 70.0 92400.0 200.0 0.002 \n", - "2 50.7 63.0 91400.0 0.0 0.000 \n", - "3 61.2 65.0 92600.0 -100.0 -0.001 \n", - "4 58.4 71.0 90600.0 -900.0 -0.010 \n", + "0 51.1 52.0 93600.0 1900.0 0.021 \n", + "1 51.1 52.0 93600.0 1900.0 0.021 \n", + "2 54.5 59.0 91700.0 -300.0 -0.003 \n", + "3 58.2 69.0 NaN NaN NaN \n", + "4 56.8 70.0 92400.0 200.0 0.002 \n", "\n", " price_change_ratio_1m id \\\n", - "0 NaN 11352312 \n", - "1 0.015 11352092 \n", - "2 0.028 11347901 \n", - "3 0.018 11337404 \n", - "4 -0.002 11325137 \n", + "0 0.017 11366151 \n", + "1 0.017 11364938 \n", + "2 -0.003 11364219 \n", + "3 NaN 11352312 \n", + "4 0.015 11352092 \n", "\n", " title source \\\n", - "0 Đề nghị bổ sung hơn 20.000 tỷ đồng cho Vietcom... TCBS \n", - "1 VCB: Thông tin về việc nhận chuyển giao bắt b... TCBS \n", - "2 VCB: Nghị quyết HĐQT về việc phê duyệt phương... TCBS \n", - "3 VCB: HĐQT phê duyệt giới hạn tín dụng đối với... TCBS \n", - "4 VCB: HĐQT phê duyệt điều chỉnh giới hạn tín d... TCBS \n", + "0 VCB: Đường dẫn và Giải trình biến động lợi nh... TCBS \n", + "1 Ông Nguyễn Mỹ Hào xin từ nhiệm vị trí Thành vi... TCBS \n", + "2 VCB: Thông báo nhận được đơn từ nhiệm Thành v... TCBS \n", + "3 Đề nghị bổ sung hơn 20.000 tỷ đồng cho Vietcom... TCBS \n", + "4 VCB: Thông tin về việc nhận chuyển giao bắt b... TCBS \n", "\n", " publish_date \n", - "0 2024-10-19 10:45:00 \n", - "1 2024-10-18 17:42:00 \n", - "2 2024-10-15 16:37:00 \n", - "3 2024-10-03 17:56:00 \n", - "4 2024-09-20 17:26:00 " + "0 2024-10-31 15:22:00 \n", + "1 2024-10-31 00:08:00 \n", + "2 2024-10-30 14:34:00 \n", + "3 2024-10-19 10:45:00 \n", + "4 2024-10-18 17:42:00 " ] }, - "execution_count": 31, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1783,7 +2909,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -1942,7 +3068,7 @@ "14 01/12/08 2008 0.120 cash" ] }, - "execution_count": 15, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -1960,7 +3086,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -1977,7 +3103,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -2179,7 +3305,7 @@ "2019 3191 " ] }, - "execution_count": 28, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -2191,7 +3317,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -2407,7 +3533,7 @@ "2023-Q3 0 9626 " ] }, - "execution_count": 29, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -2426,7 +3552,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -2600,7 +3726,7 @@ "2019 693 -0.169 1023.0 " ] }, - "execution_count": 27, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -2612,7 +3738,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -2837,7 +3963,7 @@ "2023-Q3 0.531 373.0 " ] }, - "execution_count": 26, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -2856,7 +3982,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -2950,7 +4076,7 @@ "2019 -9 -9 0 -341 623.0" ] }, - "execution_count": 25, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -2962,7 +4088,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -3187,7 +4313,7 @@ "2023-Q3 0.531 373.0 " ] }, - "execution_count": 23, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -3206,7 +4332,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -3222,236 +4348,252 @@ " vertical-align: top;\n", " }\n", "\n", - " .dataframe thead tr th {\n", - " text-align: left;\n", + " .dataframe thead th {\n", + " text-align: right;\n", " }\n", "\n", "\n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
MetaChỉ tiêu định giáprice_to_earningprice_to_bookvalue_before_ebitdaroeroadays_receivabledays_payableearning_per_sharebook_value_per_shareequity_on_total_asset...Chỉ tiêu hiệu quả hoạt độngChỉ tiêu cơ cấu nguồn vốncash_on_capitalizerevenue_on_work_capitalcapex_on_fixed_assetrevenue_on_assetpost_tax_on_pre_taxebit_on_revenuepre_tax_on_ebitpayable_on_equityebitda_on_stock_changebook_value_per_share_change
periodCPNămKỳP/BVốn hóa (Tỷ đồng)Số CP lưu hành (Triệu CP)P/EP/SP/Cash FlowEPS (VND)...Vòng quay TSCĐSố ngày thu tiền bình quânSố ngày tồn kho bình quânSố ngày thanh toán bình quânChu kỳ tiềnVòng quay hàng tồn kho(Vay NH+DH)/VCSHNợ/VCSHTSCĐ / Vốn CSHVốn CSH/Vốn điều lệ
0VCI202352.1782321605625000000043750000032.6409806.494037-3.6863851124.353507202338.12.521.30.0710.0311061.030856128310.427...105.3856050.00.030.1408700.00.01.2181521.3408760.0031781.2831370.0380.3-0.3370.10.90.5200.41.3-0.3250.135
1VCI202252.8662481861762076775043549990121.4247275.8986664.9754611995.357941202211.51.510.90.1330.056788.0791512113060.456...172.2257810.00.078.7158590.00.00.9739421.1927210.0036171.1306900.2490.5-0.9520.20.80.5330.61.2-0.502-0.244
2VCI202151.18349377422500000003330000005.1659142.088510-2.0645934500.655782202115.63.68.40.2710.120568.0953425149520.393...269.2131520.00.094.5859360.00.00.9726101.5430470.0020111.1387660.0780.6-0.4890.20.80.5920.81.50.2710.440
3VCI202052.6663091205568000000016560000015.6788756.970247-21.0934694643.190154202012.12.110.20.1790.098914.0391765103820.539...142.4029090.00.039.2699000.00.00.5962930.8539050.0031810.7870720.0620.4-0.9610.20.80.6560.80.90.111-0.147
4VCI201920196.31.13.20.1800.101NaN52.418360979824000000016440000014.1351916.358594-28.7225504216.4268692081121660.559...109.5444830.00.04.8200250.00.00.3581250.7876760.0024450.7052780.264NaN-0.8920.21.20.6560.80.8-0.3030.112
\n", - "

5 rows × 37 columns

\n", + "

5 rows × 34 columns

\n", "" ], "text/plain": [ - " Meta Chỉ tiêu định giá \\\n", - " CP Năm Kỳ P/B Vốn hóa (Tỷ đồng) Số CP lưu hành (Triệu CP) \n", - "0 VCI 2023 5 2.178232 16056250000000 437500000 \n", - "1 VCI 2022 5 2.866248 18617620767750 435499901 \n", - "2 VCI 2021 5 1.183493 7742250000000 333000000 \n", - "3 VCI 2020 5 2.666309 12055680000000 165600000 \n", - "4 VCI 2019 5 2.418360 9798240000000 164400000 \n", - "\n", - " ... \\\n", - " P/E P/S P/Cash Flow EPS (VND) ... \n", - "0 32.640980 6.494037 -3.686385 1124.353507 ... \n", - "1 21.424727 5.898666 4.975461 1995.357941 ... \n", - "2 5.165914 2.088510 -2.064593 4500.655782 ... \n", - "3 15.678875 6.970247 -21.093469 4643.190154 ... \n", - "4 14.135191 6.358594 -28.722550 4216.426869 ... \n", - "\n", - " Chỉ tiêu hiệu quả hoạt động \\\n", - " Vòng quay TSCĐ Số ngày thu tiền bình quân \n", - "0 105.385605 0.0 \n", - "1 172.225781 0.0 \n", - "2 269.213152 0.0 \n", - "3 142.402909 0.0 \n", - "4 109.544483 0.0 \n", - "\n", - " \\\n", - " Số ngày tồn kho bình quân Số ngày thanh toán bình quân Chu kỳ tiền \n", - "0 0.0 30.140870 0.0 \n", - "1 0.0 78.715859 0.0 \n", - "2 0.0 94.585936 0.0 \n", - "3 0.0 39.269900 0.0 \n", - "4 0.0 4.820025 0.0 \n", - "\n", - " Chỉ tiêu cơ cấu nguồn vốn \\\n", - " Vòng quay hàng tồn kho (Vay NH+DH)/VCSH Nợ/VCSH TSCĐ / Vốn CSH \n", - "0 0.0 1.218152 1.340876 0.003178 \n", - "1 0.0 0.973942 1.192721 0.003617 \n", - "2 0.0 0.972610 1.543047 0.002011 \n", - "3 0.0 0.596293 0.853905 0.003181 \n", - "4 0.0 0.358125 0.787676 0.002445 \n", - "\n", - " \n", - " Vốn CSH/Vốn điều lệ \n", - "0 1.283137 \n", - "1 1.130690 \n", - "2 1.138766 \n", - "3 0.787072 \n", - "4 0.705278 \n", - "\n", - "[5 rows x 37 columns]" + " price_to_earning price_to_book value_before_ebitda roe roa \\\n", + "period \n", + "2023 38.1 2.5 21.3 0.071 0.031 \n", + "2022 11.5 1.5 10.9 0.133 0.056 \n", + "2021 15.6 3.6 8.4 0.271 0.120 \n", + "2020 12.1 2.1 10.2 0.179 0.098 \n", + "2019 6.3 1.1 3.2 0.180 0.101 \n", + "\n", + " days_receivable days_payable earning_per_share \\\n", + "period \n", + "2023 1061.0 30 856 \n", + "2022 788.0 79 1512 \n", + "2021 568.0 95 3425 \n", + "2020 914.0 39 1765 \n", + "2019 NaN 5 2081 \n", + "\n", + " book_value_per_share equity_on_total_asset ... cash_on_capitalize \\\n", + "period ... \n", + "2023 12831 0.427 ... 0.038 \n", + "2022 11306 0.456 ... 0.249 \n", + "2021 14952 0.393 ... 0.078 \n", + "2020 10382 0.539 ... 0.062 \n", + "2019 12166 0.559 ... 0.264 \n", + "\n", + " revenue_on_work_capital capex_on_fixed_asset revenue_on_asset \\\n", + "period \n", + "2023 0.3 -0.337 0.1 \n", + "2022 0.5 -0.952 0.2 \n", + "2021 0.6 -0.489 0.2 \n", + "2020 0.4 -0.961 0.2 \n", + "2019 NaN -0.892 0.2 \n", + "\n", + " post_tax_on_pre_tax ebit_on_revenue pre_tax_on_ebit \\\n", + "period \n", + "2023 0.9 0.520 0.4 \n", + "2022 0.8 0.533 0.6 \n", + "2021 0.8 0.592 0.8 \n", + "2020 0.8 0.656 0.8 \n", + "2019 1.2 0.656 0.8 \n", + "\n", + " payable_on_equity ebitda_on_stock_change book_value_per_share_change \n", + "period \n", + "2023 1.3 -0.325 0.135 \n", + "2022 1.2 -0.502 -0.244 \n", + "2021 1.5 0.271 0.440 \n", + "2020 0.9 0.111 -0.147 \n", + "2019 0.8 -0.303 0.112 \n", + "\n", + "[5 rows x 34 columns]" ] }, - "execution_count": 31, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Bỏ .head() để hiển thị toàn bộ dữ liệu\n", - "stock.finance.ratio(period='year', lang='vi', dropna=True).head()" + "stock.finance.ratio(period='year', dropna=True).head()" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -3527,16 +4669,16 @@ " 2024-Q3\n", " 3\n", " 2024\n", - " 24.3\n", + " 23.9\n", " 2.3\n", - " 16.5\n", + " 16.2\n", " 0.102\n", " 0.044\n", " 874.0\n", " 9\n", " 1419\n", " ...\n", - " 0.125\n", + " 0.128\n", " 0.4\n", " -0.952\n", " 0.2\n", @@ -3651,7 +4793,7 @@ "text/plain": [ " quarter year price_to_earning price_to_book value_before_ebitda \\\n", "period \n", - "2024-Q3 3 2024 24.3 2.3 16.5 \n", + "2024-Q3 3 2024 23.9 2.3 16.2 \n", "2024-Q2 2 2024 25.9 2.3 17.7 \n", "2024-Q1 1 2024 38.2 2.9 20.6 \n", "2023-Q4 4 2023 38.1 2.5 21.3 \n", @@ -3667,7 +4809,7 @@ "\n", " cash_on_capitalize revenue_on_work_capital capex_on_fixed_asset \\\n", "period \n", - "2024-Q3 0.125 0.4 -0.952 \n", + "2024-Q3 0.128 0.4 -0.952 \n", "2024-Q2 0.188 0.4 -0.935 \n", "2024-Q1 0.050 0.4 -0.615 \n", "2023-Q4 0.038 0.3 -0.337 \n", @@ -3700,7 +4842,7 @@ "[5 rows x 36 columns]" ] }, - "execution_count": 24, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } diff --git a/tests/explorer/vci/test_financial.py b/tests/explorer/vci/test_financial.py new file mode 100644 index 00000000..5acc3cd8 --- /dev/null +++ b/tests/explorer/vci/test_financial.py @@ -0,0 +1,395 @@ +import pytest +import requests +from unittest.mock import patch, Mock +import pandas as pd +from vnstock3.explorer.vci.financial import Finance + +# Sample test data and responses +SAMPLE_SYMBOL = "VCI" +INVALID_SYMBOL = "INVALID" +VALID_PERIOD = "quarter" +INVALID_PERIOD = "monthly" +VALID_LANG = "en" +INVALID_LANG = "es" +MOCK_RESPONSE_SUCCESS = { + "data": { + "CompanyFinancialRatio": { + "ratio": [ + { + "ticker": "VCI", + "yearReport": 2024, + "lengthReport": 2, + "updateDate": 1723720470520, + "revenue": 915851554761, + "revenueGrowth": 0.8285294983832435, + "netProfit": 279206679897, + "netProfitGrowth": 1.3884923400448321, + "ebitMargin": 0.5703190020388252, + "roe": 0.0982906278, + "roic": 0.0770835043, + "roa": 0.0405568385, + "pe": 26.7562409736, + "pb": 2.3702445783, + "eps": 486.02526264232523, + "currentRatio": 1.6922135652, + "cashRatio": 0.3611365994, + "quickRatio": 1.6922135652, + "interestCoverage": -2.7628770892994985, + "ae": 2.608265404033926, + "netProfitMargin": 0.3048601909835285, + "grossMargin": 0.6076481496831961, + "ev": 20996859494000, + "issueShare": 574469480, + "ps": 6.5727089573, + "pcf": -4.9553190578, + "bvps": 15420.3495852956, + "evPerEbitda": 17.8983507339, + "BSA1": 23009916452730, + "BSA2": 3903157759657, + "BSA5": 17775135464006, + "BSA8": 931122579216, + "BSA10": 1144858551, + "BSA159": 0, + "BSA16": 0, + "BSA22": 372374861200, + "BSA23": 95455335905, + "BSA24": 0, + "BSA162": 0, + "BSA27": 0, + "BSA29": 32024143832, + "BSA43": 0, + "BSA46": 0, + "BSA50": 8879984392, + "BSA209": 0, + "BSA53": 23105371788635, + "BSA54": 14246851580952, + "BSA55": 13597525115321, + "BSA56": 12392104000000, + "BSA58": 1753351687, + "BSA67": 649326465631, + "BSA71": 0, + "BSA173": 0, + "BSA78": 8858520207683, + "BSA79": 8858520207683, + "BSA80": 4419000000000, + "BSA175": 4419000000000, + "BSA86": 0, + "BSA90": 1784460323370, + "BSA96": 23105371788635, + "CFA21": 0, + "CFA22": 0, + "at": 0.1663347355, + "fat": 129.5286323278, + "acp": "null", + "dso": 0, + "dpo": 76.7351129739, + "ccc": "null", + "de": 1.608265404, + "le": 1.3988909783, + "ebitda": 1647403505089, + "ebit": 522327544727, + "dividend": 0.0273597811, + "RTQ10": 1.608265404, + "charterCapitalRatio": 2.004643631519122, + "RTQ4": 0, + "epsTTM": 1366.0364337454, + "charterCapital": 4419000000000, + "fae": 0.003615066972949437, + "RTQ17": 0, + "CFA26": -12703945273, + "CFA6": 0, + "CFA9": 134650217917, + "BSA85": 0, + "CFA36": 1040594399692, + "BSB98": 0, + "BSB101": 0, + "BSA89": 0, + "CFA34": 2204238269300, + "CFA14": -181036532844, + "ISB34": 0, + "ISB27": 0, + "ISA23": 0, + "ISS152": 0, + "ISA102": 0, + "CFA27": 52800000000, + "CFA12": -28947341078, + "CFA28": 0, + "BSA18": 400500649851, + "BSB102": 0, + "BSB110": 0, + "BSB108": 310000000000, + "CFA23": 0, + "ISB41": 0, + "BSB103": 0, + "BSA40": 0, + "BSB99": 0, + "CFA16": 0, + "CFA18": 671029035938, + "CFA3": 0, + "ISB30": 0, + "BSA33": 0, + "ISB29": 0, + "CFS200": -275508242880, + "ISA2": 0, + "CFA24": 0, + "BSB105": 0, + "CFA37": 0, + "ISS141": 15645475012, + "BSA95": 0, + "CFA10": 0, + "ISA4": -359336052126, + "BSA82": 0, + "CFA25": 0, + "BSB111": 0, + "ISI64": 0, + "BSB117": 0, + "ISA20": 279206679897, + "CFA19": -12703945273, + "ISA6": 0, + "ISA3": 915851554761, + "BSB100": 0, + "ISB31": 0, + "ISB38": 0, + "ISB26": 0, + "BSA210": 0, + "CFA20": 0, + "CFA35": 2862563359965, + "ISA17": -64821621464, + "ISS148": -189052038091, + "BSB115": 0, + "ISA9": 0, + "CFA4": 0, + "ISA7": 0, + "CFA5": 0, + "ISA22": 279206679897, + "CFA8": -15155990142, + "CFA33": 0, + "CFA29": 5196444000000, + "BSA30": 25038030423, + "BSA84": 2565263355461, + "BSA44": 0, + "BSB107": 0, + "ISB37": 0, + "ISA8": 0, + "BSB109": 0, + "ISA19": -64559441640, + "ISB36": 0, + "ISA13": -11399791, + "ISA1": 915851554761, + "BSB121": 0, + "ISA14": 2826585413, + "BSB112": 0, + "ISA21": 0, + "ISA10": -34187957908, + "CFA11": 0, + "ISA12": 2837985204, + "BSA15": 0, + "BSB104": 0, + "BSA92": 0, + "BSB106": 0, + "BSA94": 0, + "ISA18": 262179824, + "CFA17": 0, + "ISI87": 0, + "BSB114": 0, + "ISA15": 0, + "BSB116": 0, + "ISB28": 0, + "BSB97": 0, + "CFA15": -37710331505, + "ISA11": 340939536124, + "ISB33": 0, + "BSA47": 0, + "ISB40": 0, + "ISB39": 0, + "CFA7": 189052038091, + "CFA13": 5230954410, + "ISS146": -197033483615, + "ISB25": 0, + "BSA45": 0, + "BSB118": 0, + "CFA1": 343766121537, + "CFS191": 0, + "ISB35": 0, + "CFB65": 0, + "CFA31": 0, + "BSB113": 0, + "ISB32": 0, + "ISA16": 343766121537, + "CFS210": 685938398293, + "BSA48": 0, + "BSA36": 6986113409, + "ISI97": 0, + "CFA30": -3043897000000, + "CFA2": 2559060545, + "CFB80": 0, + "CFA38": 3903157759657, + "CFA32": -1108730700, + "ISA5": 556515502635, + "BSA49": 53224683273, + "CFB64": 0, + "__typename": "CompanyFinancialRatio" + }, + ], + "period": [ + "2024-2", + "2024-1", + "2023-4", + "2023-3", + "2023-2", + "2023-1", + "2022-4", + "2022-3", + "2022-2", + "2022-1", + "2021-4", + "2021-3", + "2021-2", + "2021-1", + "2020-4", + "2020-3", + "2020-2", + "2020-1", + "2019-4", + "2019-3", + "2019-2", + "2019-1", + "2018-4", + "2018-3", + "2018-2", + "2018-1", + "2017-4", + "2017-3", + "2017-2", + "2017-1", + "2016-4", + "2016-3", + "2016-2", + "2016-1", + "2015-4", + "2015-3", + "2015-2", + "2015-1", + "2014-4", + "2014-3", + "2014-2", + "2014-1", + "2013-4", + "2013-3", + "2013-2", + "2013-1" + ], + "__typename": "CompanyFinancialRatioPeriod" + } + } +} + +@pytest.fixture +def finance_instance(): + """Fixture to create a Finance instance for tests.""" + return Finance(symbol=SAMPLE_SYMBOL, period=VALID_PERIOD, get_all=True, show_log=False) + +# Initialization Tests +def test_finance_init_valid_symbol(finance_instance): + """Test initialization with a valid symbol.""" + assert finance_instance.symbol == SAMPLE_SYMBOL.upper() + assert finance_instance.period is not None + +def test_finance_init_invalid_period(): + """Test initialization with an invalid period.""" + with pytest.raises(ValueError, match="Kỳ báo cáo tài chính không hợp lệ"): + Finance(symbol=SAMPLE_SYMBOL, period=INVALID_PERIOD) + +# Test API Call and Mocking +@patch("requests.post") +def test_get_report_successful_response(mock_post, finance_instance): + """Test _get_report method with a successful API response.""" + mock_post.return_value = Mock(status_code=200, json=lambda: MOCK_RESPONSE_SUCCESS) + df, _ = finance_instance._get_report(period=VALID_PERIOD, lang=VALID_LANG, show_log=False) + assert isinstance(df, pd.DataFrame) + assert not df.empty + +@patch("requests.post") +def test_get_report_failed_response(mock_post, finance_instance): + """Test _get_report method handling of a failed API response.""" + mock_post.return_value = Mock(status_code=400, text="Bad Request") + with pytest.raises(Exception): + finance_instance._get_report(period=VALID_PERIOD, lang=VALID_LANG, show_log=False) + +# Method-specific Tests +@patch("vnstock3.explorer.vci.financial.Company._fetch_data") +def test_get_company_type_valid_company(mock_fetch_data, finance_instance): + """Test _get_company_type method with a valid company symbol.""" + mock_fetch_data.return_value = {"CompanyListingInfo": {"icbName4": "CT"}} + assert finance_instance._get_company_type() == "CT" + +@patch("vnstock3.explorer.vci.financial.Company._fetch_data") +def test_get_company_type_invalid_symbol(mock_fetch_data, finance_instance): + """Test _get_company_type method with an invalid symbol.""" + mock_fetch_data.return_value = {"CompanyListingInfo": {"icbName4": None}} + with pytest.raises(KeyError): + finance_instance._get_company_type() + +# Duplicate Column Handling +def test_duplicated_columns_handling(finance_instance): + """Test handling of duplicated columns in the DataFrame.""" + sample_df = pd.DataFrame({ + 'name': ['Revenue', 'Revenue', 'Net Profit'], + 'field_name': ['rev', 'rev', 'net_profit'] + }) + resolved_df = finance_instance.duplicated_columns_handling(sample_df) + assert resolved_df['name'].iloc[1] == "Revenue - rev" + +# Data Extraction Tests +@patch("requests.post") +def test_balance_sheet_extraction(mock_post, finance_instance): + """Test balance sheet extraction method with mocked data.""" + mock_post.return_value = Mock(status_code=200, json=lambda: MOCK_RESPONSE_SUCCESS) + df = finance_instance.balance_sheet(period=VALID_PERIOD, lang=VALID_LANG) + assert isinstance(df, pd.DataFrame) + assert not df.empty + +@patch("requests.post") +def test_income_statement_extraction(mock_post, finance_instance): + """Test income statement extraction method with mocked data.""" + mock_post.return_value = Mock(status_code=200, json=lambda: MOCK_RESPONSE_SUCCESS) + df = finance_instance.income_statement(period=VALID_PERIOD, lang=VALID_LANG) + assert isinstance(df, pd.DataFrame) + assert not df.empty + +@patch("requests.post") +def test_cash_flow_extraction(mock_post, finance_instance): + """Test cash flow extraction method with mocked data.""" + mock_post.return_value = Mock(status_code=200, json=lambda: MOCK_RESPONSE_SUCCESS) + df = finance_instance.cash_flow(period=VALID_PERIOD, lang=VALID_LANG) + assert isinstance(df, pd.DataFrame) + assert not df.empty + +@patch("requests.post") +def test_ratio_extraction(mock_post, finance_instance): + """Test ratio extraction method with mocked data.""" + mock_post.return_value = Mock(status_code=200, json=lambda: MOCK_RESPONSE_SUCCESS) + df = finance_instance.ratio(period=VALID_PERIOD, lang=VALID_LANG) + assert isinstance(df, pd.DataFrame) + assert not df.empty + +# Error Handling Tests +def test_invalid_language(finance_instance): + """Test _get_report method with an invalid language.""" + with pytest.raises(ValueError, match="Invalid language specified"): + finance_instance._get_report(period=VALID_PERIOD, lang=INVALID_LANG) + +def test_process_report_invalid_report_key(finance_instance): + """Test _process_report method with an invalid report key.""" + with pytest.raises(ValueError, match="Báo cáo không hợp lệ"): + finance_instance._process_report("Invalid Key") + +# Edge Case Tests +@patch("requests.post") +def test_large_dataset_handling(mock_post, finance_instance): + """Test the module's ability to handle a large dataset.""" + large_response = {"data": {"CompanyFinancialRatio": {"ratio": [{"fieldName": "field_" + str(i), "value": i} for i in range(10000)]}}} + mock_post.return_value = Mock(status_code=200, json=lambda: large_response) + df = finance_instance.ratio(period=VALID_PERIOD, lang=VALID_LANG) + assert isinstance(df, pd.DataFrame) + assert len(df.columns) > 0 diff --git a/vnstock3/core/utils/parser.py b/vnstock3/core/utils/parser.py index 73f81f24..58bab212 100644 --- a/vnstock3/core/utils/parser.py +++ b/vnstock3/core/utils/parser.py @@ -49,15 +49,18 @@ def get_asset_type(symbol: str) -> str: - 'coveredWarr' nếu mã chứng khoán là mã chứng quyền. """ symbol = symbol.upper() - if symbol in ['VN30', 'HNX30', 'VNINDEX', 'HNXINDEX', 'UPCOM']: + if symbol in ['VN30', 'HNX30', 'VNINDEX', 'HNXINDEX', 'UPCOMINDEX']: return 'index' elif len(symbol) == 3: return 'stock' elif len(symbol) in [7, 9]: fm_pattern = re.compile(r'VN30F\d{1,2}M') ym_pattern = re.compile(r'VN30F\d{4}') - gb_pattern = re.compile(r'GB\d{2}F\d{4}') - if fm_pattern.match(symbol) or ym_pattern.match(symbol) or gb_pattern.match(symbol): + gb_pattern = re.compile(r'[A-Z]{3}\d{5}') + bond_pattern = re.compile(r'[A-Z]{3}\d{6}') + if bond_pattern.match(symbol) or gb_pattern.match(symbol): + return 'bond' + elif fm_pattern.match(symbol) or ym_pattern.match(symbol): return 'derivative' else: raise ValueError('Invalid derivative symbol. Symbol must be in format of VN30F1M, VN30F2024, GB10F2024') diff --git a/vnstock3/explorer/tcbs/const.py b/vnstock3/explorer/tcbs/const.py index c1426477..d0afa7b0 100644 --- a/vnstock3/explorer/tcbs/const.py +++ b/vnstock3/explorer/tcbs/const.py @@ -84,4 +84,6 @@ 'income_statement': 'incomestatement', 'cash_flow': 'cashflow'} -_FINANCIAL_REPORT_PERIOD_MAP = {'year': 1, 'quarter': 0} \ No newline at end of file +_FINANCIAL_REPORT_PERIOD_MAP = {'year': 1, 'quarter': 0} + +_INDEX_MAPPING = {'VNINDEX': 'VNINDEX', 'HNXINDEX': 'HNXIndex', 'UPCOMINDEX': 'UPCOM'} \ No newline at end of file diff --git a/vnstock3/explorer/tcbs/quote.py b/vnstock3/explorer/tcbs/quote.py index 2471aa5a..c87a75ef 100644 --- a/vnstock3/explorer/tcbs/quote.py +++ b/vnstock3/explorer/tcbs/quote.py @@ -9,7 +9,7 @@ from vnstock3.core.utils.logger import get_logger from vnstock3.core.utils.user_agent import get_headers from .models import TickerModel -from .const import _BASE_URL, _STOCKS_URL, _FUTURE_URL, _INTERVAL_MAP, _OHLC_MAP, _OHLC_DTYPE, _INTRADAY_MAP, _INTRADAY_DTYPE +from .const import _BASE_URL, _STOCKS_URL, _FUTURE_URL, _INTERVAL_MAP, _OHLC_MAP, _OHLC_DTYPE, _INTRADAY_MAP, _INTRADAY_DTYPE, _INDEX_MAPPING logger = get_logger(__name__) @@ -31,6 +31,18 @@ def __init__(self, symbol, random_agent=False, show_log=True): if not self.show_log: logger.setLevel('CRITICAL') + if 'INDEX' in self.symbol: + self.symbol = self._index_validation() + + def _index_validation(self) -> str: + """ + If symbol contains 'INDEX' substring, validate it with _INDEX_MAPPING. + """ + if self.symbol not in _INDEX_MAPPING.keys(): + raise ValueError(f"Không tìm thấy mã chứng khoán {self.symbol}. Các giá trị hợp lệ: {', '.join(_INDEX_MAPPING.keys())}") + # return mapped symbol + return _INDEX_MAPPING[self.symbol] + def _input_validation(self, start: str, end: str, interval: str): """ Validate input data diff --git a/vnstock3/explorer/vci/const.py b/vnstock3/explorer/vci/const.py index 8a4fb1a9..60f3fb70 100644 --- a/vnstock3/explorer/vci/const.py +++ b/vnstock3/explorer/vci/const.py @@ -1,4 +1,5 @@ _BASE_URL = 'https://mt.vietcap.com.vn/api/' +_TRADING_URL = 'https://trading.vietcap.com.vn/api/' _CHART_URL = 'chart/OHLCChart/gap' _INTRADAY_URL = 'market-watch' _GRAPHQL_URL = 'https://api.vietcap.com.vn/data-mt/graphql' @@ -76,7 +77,7 @@ SUPPORTED_LANGUAGES = ['vi', 'en'] -_INDEX_MAPPING = {'VNINDEX': 'VNINDEX', 'HNXINDEX': 'HNXIndex', 'UPCOM': 'HNXUpcomIndex'} +_INDEX_MAPPING = {'VNINDEX': 'VNINDEX', 'HNXINDEX': 'HNXIndex', 'UPCOMINDEX': 'HNXUpcomIndex'} _ICB4_COMTYPE_CODE_MAP = {'Bán lẻ phức hợp': 'CT', 'Bảo hiểm nhân thọ': 'BH', diff --git a/vnstock3/explorer/vci/financial.py b/vnstock3/explorer/vci/financial.py index b3f4b562..06fe9b1b 100644 --- a/vnstock3/explorer/vci/financial.py +++ b/vnstock3/explorer/vci/financial.py @@ -1,7 +1,7 @@ import json import requests import pandas as pd -from typing import Optional, List +from typing import Optional, List, Dict from .const import _GRAPHQL_URL, _FINANCIAL_REPORT_PERIOD_MAP, _UNIT_MAP, _ICB4_COMTYPE_CODE_MAP, SUPPORTED_LANGUAGES from vnstock3.explorer.vci import Company from vnstock3.core.utils.parser import get_asset_type, camel_to_snake, api_response_check @@ -173,14 +173,22 @@ def _get_report (self, period:Optional[str]=None, lang:Optional[str]='en', show_ elif mode == 'raw': return ratio_df - def _ratio_mapping (self, ratio_df:pd.DataFrame, lang:Optional[str]='en', show_log:Optional[bool]=False): + def _ratio_mapping (self, ratio_df:pd.DataFrame, lang:Optional[str]='en', mode:str='final', show_log:Optional[bool]=False): """ A dedicated method to map the financial ratio DataFrame to different reports based on the company type code. Parameters: - ratio_df (pd.DataFrame): The DataFrame containing the financial ratio from the function _get_report(). - lang (str): The language of the report. Default is 'en'. + - mode (str): The mode of the report. Default is 'final' which return polish data after the mapping process & translation. Other mode is 'raw' which return the raw data which contains code names for all fields. - show_log (bool): Whether to show log messages. Default is False. + + Returns: + - pd.DataFrame: A DataFrame containing the financial ratio data. + + Attributes: (only available when show_log is True) + - type_field_dict (dict): A dictionary mapping the report type to the list of field names. + - raw_ratio_df (pd.DataFrame): The raw DataFrame containing the financial ratio data with code name columns such as isa, isb, etc. """ if lang == 'vi': @@ -220,13 +228,16 @@ def _ratio_mapping (self, ratio_df:pd.DataFrame, lang:Optional[str]='en', show_l ratio_df = ratio_df.drop(columns=orphan_columns) # apply sorting to the columns of ratio_df by the order in the column_order dictionary ratio_df = ratio_df[sorted(ratio_df.columns, key=lambda x: column_order.get(x, 0))] + type_field_dict = all_columns_mapping.groupby('type')['field_name'].apply(list).to_dict() + + # Assign attributes to the class in the case of debugging + self.raw_ratio_df = ratio_df.copy() + self.columns_mapping = columns_translation - report_type_field_dict = all_columns_mapping.groupby('type')['field_name'].apply(list).to_dict() - # Create DataFrames for each report type, using columns name as code names without translation report_dfs = {} - for report_type, fields in report_type_field_dict.items(): - report_dfs[report_type] = ratio_df[index_cols + fields] + for report_type, fields in type_field_dict.items(): + report_dfs[report_type] = ratio_df[fields] # Define the primary report types primary_reports = [ diff --git a/vnstock3/explorer/vci/quote.py b/vnstock3/explorer/vci/quote.py index e0b47ffa..a03f9931 100644 --- a/vnstock3/explorer/vci/quote.py +++ b/vnstock3/explorer/vci/quote.py @@ -3,7 +3,7 @@ # Đồ thị giá, đồ thị dư mua dư bán, đồ thị mức giá vs khối lượng, thống kê hành vi thị tường from typing import Dict, Optional, Union from datetime import datetime -from .const import _BASE_URL, _CHART_URL, _INTERVAL_MAP, _OHLC_MAP, _RESAMPLE_MAP, _OHLC_DTYPE, _INTRADAY_URL, _INTRADAY_MAP, _INTRADAY_DTYPE, _PRICE_DEPTH_MAP, _INDEX_MAPPING +from .const import _BASE_URL, _TRADING_URL, _CHART_URL, _INTERVAL_MAP, _OHLC_MAP, _RESAMPLE_MAP, _OHLC_DTYPE, _INTRADAY_URL, _INTRADAY_MAP, _INTRADAY_DTYPE, _PRICE_DEPTH_MAP, _INDEX_MAPPING from .models import TickerModel import pandas as pd import requests @@ -24,7 +24,7 @@ def __init__(self, symbol, random_agent=False, show_log=True): self.data_source = 'VCI' self._history = None # Cache for historical data self.asset_type = get_asset_type(self.symbol) - self.base_url = _BASE_URL + self.base_url = _TRADING_URL self.headers = get_headers(data_source=self.data_source, random_agent=random_agent) self.interval_map = _INTERVAL_MAP self.show_log = show_log @@ -32,7 +32,7 @@ def __init__(self, symbol, random_agent=False, show_log=True): if not show_log: logger.setLevel('CRITICAL') - if 'INDEX' in self.symbol or 'UPCOM' in self.symbol: + if 'INDEX' in self.symbol: self.symbol = self._index_validation() def _index_validation(self) -> str: diff --git a/vnstock3/explorer/vci/trading.py b/vnstock3/explorer/vci/trading.py index 11590db0..5725af00 100644 --- a/vnstock3/explorer/vci/trading.py +++ b/vnstock3/explorer/vci/trading.py @@ -2,7 +2,7 @@ from typing import List, Dict, Optional from datetime import datetime -from .const import _BASE_URL +from .const import _BASE_URL, _TRADING_URL import pandas as pd import requests import json @@ -20,7 +20,7 @@ class Trading: def __init__(self, symbol:Optional[str]='VCI', random_agent=False, show_log:Optional[bool]=True): self.symbol = symbol.upper() self.asset_type = get_asset_type(self.symbol) - self.base_url = _BASE_URL + self.base_url = _TRADING_URL self.headers = get_headers(data_source='VCI', random_agent=random_agent) self.show_log = show_log