Bạn cần lấy API key của Google Gemini tại đây: https://aistudio.google.com/u/2/apikey
# Lưu giá trị API key vào mục Secrets của Colab thì dùng cách này, hoặc gán trực tiếp giá trị API cho biến GEMINI_TOKEN để dùng
from google.colab import userdata
GEMINI_TOKEN = userdata.get('gemini_tk_tvb')
# !pip install aiconn
!pip install git+https://github.com/thinh-vu/vnstock
from aiconn import GeminiAI
gemini = GeminiAI(api_key=GEMINI_TOKEN, gemini_model='gemini-1.5-flash')
Running on Colab
from vnstock3 import Vnstock
stock = Vnstock().stock(symbol='VCI', source='VCI')
2024-10-25 01:34:23 - vnstock3.common.data.data_explorer - WARNING - Thông tin niêm yết & giao dịch sẽ được truy xuất từ TCBS WARNING:vnstock3.common.data.data_explorer:Thông tin niêm yết & giao dịch sẽ được truy xuất từ TCBS
income_df = stock.finance.income_statement(period='quarter', lang='vi')
income_df.head()
CP | Năm | Kỳ | Cổ đông thiểu số | Cổ đông thiểu số | Cổ đông thiểu số | Cổ đông thiểu số | Lãi/Lỗ ròng trước thuế | Tăng trưởng doanh thu (%) | Doanh thu (Tỷ đồng) | ... | Doanh thu bán hàng và cung cấp dịch vụ | Thu nhập khác | Lợi nhuận khác | LN trước thuế | Thuế TNDN | Chi phí thuế TNDN hiện hành | Chi phí thuế TNDN hoãn lại | Lợi nhuận thuần | Cổ đông của Công ty mẹ | Lãi cơ bản trên cổ phiếu | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | VCI | 2024 | 3 | 0 | 0 | 0 | 0 | 2.646954e+11 | 0.461496 | 974360554621 | ... | 974360554621 | 0 | 0 | 264695399242 | -4.934317e+10 | -40189361297 | -9153812770 | 215352225175 | 215352225175 | 0 |
1 | VCI | 2024 | 2 | 0 | 0 | 0 | 0 | 3.437661e+11 | 0.828529 | 915851554761 | ... | 915851554761 | 2837985204 | 2826585413 | 343766121537 | -6.455944e+10 | -64821621464 | 262179824 | 279206679897 | 279206679897 | 0 |
2 | VCI | 2024 | 1 | 0 | 0 | 0 | 0 | 2.275405e+11 | 0.615187 | 806317375461 | ... | 806317375461 | 232524110 | -62475890 | 227540468148 | -2.978401e+10 | -37710331505 | 7926325750 | 197756462393 | 197756462393 | 0 |
3 | VCI | 2023 | 4 | 0 | 0 | 0 | 0 | 1.491318e+11 | 0.011994 | 805695933425 | ... | 805695933425 | 16990909 | 13012123 | 149131831394 | -2.618133e+10 | -7570702516 | -18610626203 | 122950502675 | 122950502675 | 0 |
4 | VCI | 2023 | 3 | 0 | 0 | 0 | 0 | 2.095692e+11 | 0.278113 | 666686976459 | ... | 666686976459 | 95890411 | 95890411 | 209569229621 | -3.056605e+10 | -33158501552 | 2592446586 | 179003174655 | 179003174655 | 0 |
5 rows × 38 columns
balance_df = stock.finance.balance_sheet(period='quarter', lang='vi')
balance_df.head()
CP | Năm | Kỳ | Hàng tồn kho ròng | Tài sản lưu động khác | Tài sản dài hạn khác | Các quỹ khác | Các quỹ khác | LỢI ÍCH CỦA CỔ ĐÔNG THIỂU SỐ | Lợi thế thương mại | ... | Người mua trả tiền trước ngắn hạn (Tỷ đồng) | Vay và nợ thuê tài chính ngắn hạn (Tỷ đồng) | Nợ ngắn hạn (Tỷ đồng) | NỢ PHẢI TRẢ (Tỷ đồng) | TỔNG CỘNG TÀI SẢN (Tỷ đồng) | Trả trước dài hạn (Tỷ đồng) | Tài sản dài hạn khác (Tỷ đồng) | Đầu tư dài hạn (Tỷ đồng) | Tài sản cố định (Tỷ đồng) | Phải thu dài hạn (Tỷ đồng) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | VCI | 2024 | 3 | 0 | 134074225933 | 51921476526 | 0 | 0 | 0.0 | 0 | ... | 4431803623 | 10832654000000 | 11178395558143 | 11773110802191 | 20415163097637 | 7503462322 | 0 | 0 | 29222696224 | 0 |
1 | VCI | 2024 | 2 | 0 | 400500649851 | 53224683273 | 0 | 0 | 0.0 | 0 | ... | 1753351687 | 12392104000000 | 13597525115321 | 14246851580952 | 23105371788635 | 8879984392 | 0 | 0 | 32024143832 | 0 |
2 | VCI | 2024 | 1 | 0 | 261218668090 | 54019497651 | 0 | 0 | 0.0 | 0 | ... | 1083817322 | 10239557000000 | 10805008051040 | 11367295476918 | 19544604126402 | 9017164629 | 0 | 0 | 21879259104 | 0 |
3 | VCI | 2023 | 4 | 0 | 194894059515 | 51610830106 | 0 | 0 | 0.0 | 0 | ... | 378319774 | 8979275000000 | 9465772066243 | 9883905148184 | 17255134656525 | 7943878800 | 0 | 0 | 23425609453 | 0 |
4 | VCI | 2023 | 3 | 0 | 226429639030 | 51340225116 | 0 | 0 | 0.0 | 0 | ... | 100000000 | 8722707142857 | 9215353960676 | 9625671689274 | 16917131786375 | 8522827154 | 0 | 0 | 21322591745 | 0 |
5 rows × 43 columns
cashflow_df = stock.finance.cash_flow(period='quarter', lang='vi')
cashflow_df.head()
CP | Năm | Kỳ | Tiền và tương đương tiền | Lãi/Lỗ từ thanh lý tài sản cố định | Lãi/Lỗ từ thanh lý tài sản cố định | Lãi/Lỗ từ hoạt động đầu tư | Thu nhập lãi | Thu lãi và cổ tức | Tăng/Giảm các khoản phải thu | ... | Tiền và tương đương tiền cuối kỳ | Khấu hao TSCĐ | Dự phòng RR tín dụng | Lưu chuyển tiền thuần từ HĐKD trước thay đổi VLĐ | Mua sắm TSCĐ | Tiền thu cổ tức và lợi nhuận được chia | Lưu chuyển từ hoạt động đầu tư | Tăng vốn cổ phần từ góp vốn và/hoặc phát hành cổ phiếu | Lưu chuyển tiền từ hoạt động tài chính | Tiền thu hồi cho vay, bán lại các công cụ nợ của đơn vị khác (Tỷ đồng) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | VCI | 2024 | 3 | 3.903158e+12 | 0.0 | 0.0 | 0.0 | 1.991251e+11 | -9.825487e+09 | 7.084084e+11 | ... | 2.543517e+12 | 2.893448e+09 | 0.000000e+00 | 5.213048e+10 | -1.686453e+09 | 0.0 | -1.686453e+09 | 0.000000e+00 | -1.856145e+12 | 0.0 |
1 | VCI | 2024 | 2 | 1.040594e+12 | 0.0 | 0.0 | 0.0 | 1.890520e+11 | -1.515599e+10 | -2.755082e+11 | ... | 3.903158e+12 | 2.559061e+09 | 0.000000e+00 | 1.346502e+11 | -1.270395e+10 | 0.0 | -1.270395e+10 | 5.280000e+10 | 2.204238e+12 | 0.0 |
2 | VCI | 2024 | 1 | 7.878978e+11 | 0.0 | 0.0 | 0.0 | 1.785407e+11 | -5.838585e+10 | 1.841262e+11 | ... | 1.040594e+12 | 2.355786e+09 | 0.000000e+00 | -1.341844e+12 | -5.366344e+09 | 0.0 | -5.366344e+09 | 0.000000e+00 | 1.260282e+12 | 0.0 |
3 | VCI | 2023 | 4 | 1.774586e+12 | 0.0 | 0.0 | 0.0 | 1.741302e+11 | -2.354269e+09 | -2.388762e+11 | ... | 7.878978e+11 | 2.200174e+09 | 1.129200e+10 | -1.572148e+12 | -4.303191e+09 | 0.0 | -4.303191e+09 | 0.000000e+00 | 2.565679e+11 | 0.0 |
4 | VCI | 2023 | 3 | 1.903146e+12 | 0.0 | 0.0 | 0.0 | 1.433780e+11 | -1.940855e+10 | -4.524384e+11 | ... | 1.774586e+12 | 2.215903e+09 | 0.000000e+00 | -2.978148e+12 | -1.397482e+09 | 0.0 | -1.397482e+09 | 0.000000e+00 | 2.508455e+12 | 0.0 |
5 rows × 43 columns
ratio_df = stock.finance.ratio(period='quarter', lang='vi')
ratio_df.head()
Meta | Chỉ tiêu định giá | ... | Chỉ tiêu hiệu quả hoạt động | Chỉ tiêu cơ cấu nguồn vốn | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CP | Năm | Kỳ | P/B | Vốn hóa (Tỷ đồng) | Số CP lưu hành (Triệu CP) | P/E | P/S | P/Cash Flow | EPS (VND) | ... | Vòng quay TSCĐ | Số ngày thu tiền bình quâ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 | Vòng quay hàng tồn kho | (Vay NH+DH)/VCSH | Nợ/VCSH | TSCĐ / Vốn CSH | Vốn CSH/Vốn điều lệ | |
0 | VCI | 2024 | 3 | 2.293344 | 19819197060000 | 574469480 | 24.176449 | 5.659030 | -18.387218 | 374.871482 | ... | 131.475148 | 0.0 | 0.0 | 62.815817 | 0.0 | 0.0 | 1.253482 | 1.362305 | 0.003381 | 1.504354 |
1 | VCI | 2024 | 2 | 2.379972 | 21083029916000 | 574469480 | 26.866048 | 6.599683 | -4.975656 | 486.025263 | ... | 129.528632 | 0.0 | 0.0 | 76.735113 | 0.0 | 0.0 | 1.398891 | 1.608265 | 0.003615 | 1.542035 |
2 | VCI | 2024 | 1 | 2.571899 | 21167010000000 | 441900000 | 33.973894 | 7.615216 | -4.399652 | 447.514058 | ... | 130.111085 | 0.0 | 0.0 | 41.382358 | 0.0 | 0.0 | 1.252192 | 1.390102 | 0.002676 | 1.423454 |
3 | VCI | 2023 | 4 | 3.092259 | 22793750000000 | 437500000 | 46.238494 | 9.219055 | -5.222052 | 281.029720 | ... | 105.385605 | 0.0 | 0.0 | 30.140870 | 0.0 | 0.0 | 1.218152 | 1.340876 | 0.003178 | 1.283137 |
4 | VCI | 2023 | 3 | 2.520071 | 18375000000000 | 437500000 | 46.087220 | 7.460683 | -125.437258 | 409.150113 | ... | 116.656253 | 0.0 | 0.0 | 33.556763 | 0.0 | 0.0 | 1.196291 | 1.320130 | 0.002924 | 1.269251 |
5 rows × 37 columns
# @title Instructions
INSTRUCTION = """
- As a CFA-certified financial analyst with a deep understanding of fundamental analysis, you will help me evaluate companies in the Vietnam Stock Market.
- Follow this structured guide for every analysis:
1. **Industry Overview**:
- Identify the company’s industry and provide an overview of its key trends, opportunities, and challenges within the Vietnam market.
2. **Financial Statement Analysis**:
- **Income Statement**: Analyze revenue growth, profitability (gross margin, operating margin, net income margin), and key expenses.
- **Balance Sheet**: Evaluate the company’s assets, liabilities, equity, and overall financial health (liquidity, solvency).
- **Cash Flow Statement**: Focus on operating cash flow, capital expenditures, and free cash flow trends.
3. **Key Ratios**:
- **Profitability Ratios**: Return on Equity (ROE), Return on Assets (ROA), and Net Profit Margin.
- **Liquidity Ratios**: Current Ratio, Quick Ratio.
- **Solvency Ratios**: Debt to Equity, Interest Coverage.
- **Valuation Ratios**: Price-to-Earnings (P/E), Price-to-Book (P/B), and Enterprise Value/EBITDA (EV/EBITDA).
4. **Valuation**:
- Use Discounted Cash Flow (DCF) analysis or relative valuation methods (P/E, P/B, EV/EBITDA) to assess whether the company is fairly valued.
5. **Growth Potential**:
- Examine the company’s historical growth trends and potential for future growth in revenue, profits, and market share.
6. **Risk Assessment**:
- Identify major risks the company faces, including financial, operational, and market risks.
7. **Investment Recommendation**:
- Provide a clear buy/hold/sell recommendation and justify it with your findings.
- Always present your analysis in **Vietnamese**, regardless of the language used in my questions.
- Keep your responses concise but thorough, following the above structure.
"""
gemini.start_chat(instruction=INSTRUCTION)
REPORTS_FEEDING = f"""
Please start your analysis step by step using the actual reports provide to you in markdown format. Each report data will be delimited with --- section
---
BALANCE SHEET DATA:
{balance_df}
---
INCOME_STATEMENT DATA:
{income_df}
---
CASHFLOW DATA:
{cashflow_df}
---
RATIOS DATA:
{ratio_df}
---
"""
gemini.send_message(prompt=REPORTS_FEEDING)
Tokens in prompt: total_tokens: 40594
1. Tổng quan về ngành:
VCI hoạt động trong ngành xây dựng, một ngành đóng vai trò quan trọng trong phát triển kinh tế Việt Nam. Ngành xây dựng đang đối mặt với một số thách thức như:
Tuy nhiên, ngành xây dựng cũng có nhiều cơ hội phát triển:
2. Phân tích báo cáo tài chính:
2.1. Báo cáo kết quả kinh doanh:
2.2. Báo cáo cân đối kế toán:
2.3. Báo cáo lưu chuyển tiền tệ:
3. Các tỷ lệ chính:
3.1. Tỷ lệ lợi nhuận:
3.2. Tỷ lệ thanh khoản:
3.3. Tỷ lệ nợ:
3.4. Tỷ lệ định giá:
4. Định giá:
Có thể sử dụng phương pháp định giá dòng tiền chiết khấu (DCF) hoặc phương pháp định giá tương đối (P/E, P/B, EV/EBITDA) để định giá VCI.
5. Tiềm năng tăng trưởng:
VCI có tiềm năng tăng trưởng tốt, dựa trên:
6. Đánh giá rủi ro:
VCI đối mặt với một số rủi ro:
7. Khuyến nghị đầu tư:
Dựa trên những phân tích trên, VCI là một công ty có tiềm năng tăng trưởng tốt. Tuy nhiên, nhà đầu tư cần lưu ý đến các rủi ro liên quan đến ngành xây dựng và rủi ro tài chính của VCI.
Khuyến nghị:
Lưu ý:
Đây chỉ là một phân tích chung và không thể thay thế cho lời khuyên của chuyên gia tài chính. Nhà đầu tư cần tự nghiên cứu kỹ lưỡng trước khi đưa ra quyết định đầu tư.
gemini.send_message('How key metrics in the financial reports of VCI perform over time? Refer to actual data I provided to you. Explain in comprehensive, cohisive manner')
Tokens in prompt: total_tokens: 31
Dựa trên dữ liệu báo cáo tài chính của VCI từ năm 2013 đến 2024, ta có thể nhận thấy một số xu hướng quan trọng về hiệu suất hoạt động của công ty:
1. Doanh thu:
2. Lợi nhuận:
3. Hiệu quả hoạt động:
4. Cấu trúc nguồn vốn:
5. Chỉ số định giá:
Kết luận:
Lưu ý: Phân tích này chỉ dựa trên dữ liệu báo cáo tài chính và không thể thay thế cho các phân tích sâu hơn về thị trường, chiến lược của công ty, cũng như các yếu tố khác ảnh hưởng đến giá trị của VCI.
gemini.send_message(f'Phân tích chi tiết các chỉ tiêu trong bảng cân đối kế toán được cung cấp, dẫn chứng với số liệu cụ thể. Dữ liệu bảng cân đối kế toán được cung cấp dưới dạng markdown dưới đây, lưu ý dữ liệu được cung cấp theo quý với thông tin Năm và Kỳ tức Quý trong trường hợp này: {balance_df}')
Tokens in prompt: total_tokens: 9849
Dưới đây là phân tích chi tiết các chỉ tiêu trong bảng cân đối kế toán của VCI theo quý dựa trên dữ liệu bạn cung cấp:
1. Tài sản:
2. Nợ phải trả:
3. Vốn chủ sở hữu:
4. Tổng kết:
Lưu ý:
Phân tích này chỉ dựa trên bảng cân đối kế toán và không thể thay thế cho các phân tích sâu hơn về thị trường, chiến lược của công ty, cũng như các yếu tố khác ảnh hưởng đến giá trị của VCI. Nhà đầu tư cần tự nghiên cứu kỹ lưỡng trước khi đưa ra quyết định đầu tư.
gemini.send_message('Dữ liệu bạn cung cấp không khớp với dữ liệu tôi gửi cho bạn')
Tokens in prompt: total_tokens: 14
Bạn hoàn toàn đúng! Tôi xin lỗi vì lỗi này.
Có vẻ như tôi đã hiểu nhầm định dạng của dữ liệu bạn cung cấp. Tôi đang gặp một số vấn đề trong việc xử lý dữ liệu dạng markdown.
Để tôi có thể phân tích chính xác, bạn có thể cung cấp bảng cân đối kế toán theo một trong các cách sau:
CP,Năm,Kỳ,Hàng tồn kho ròng,Tài sản lưu động khác,Tài sản dài hạn khác,Các quỹ khác,Các quỹ khác,LỢI ÍCH CỦA CỔ ĐÔNG THIỂU SỐ,Lợi thế thương mại,...
VCI,2024,3,0,134074225933,51921476526,0,0,0,0,...
VCI,2024,2,0,400500649851,53224683273,0,0,0,0,...
...
Tôi sẽ cố gắng hết sức để phân tích chính xác bảng cân đối kế toán của VCI sau khi nhận được dữ liệu chính xác từ bạn.
gemini.send_message(f'Hãy dùng dữ liệu được cung cấp dưới dạng văn bản thuần dưới đây: {balance_df.to_string()}')
Tokens in prompt: total_tokens: 19883
Dưới đây là phân tích chi tiết các chỉ tiêu trong bảng cân đối kế toán của VCI dựa trên dữ liệu bạn cung cấp:
1. Tài sản:
2. Nợ phải trả:
3. Vốn chủ sở hữu:
4. Tổng kết:
Lưu ý:
Phân tích này chỉ dựa trên bảng cân đối kế toán và không thể thay thế cho các phân tích sâu hơn về thị trường, chiến lược của công ty, cũng như các yếu tố khác ảnh hưởng đến giá trị của VCI. Nhà đầu tư cần tự nghiên cứu kỹ lưỡng trước khi đưa ra quyết định đầu tư.
Kiểm tra lại các con số mà Gemini sử dụng để mô tả thì nó lấy đúng số thật nhưng cần mô tả cho nó cách đọc hiểu báo cáo với Năm và Kỳ nên ý nghĩa giải thích chưa chuẩn.
balance_df[['Năm', 'Kỳ', 'Tài sản lưu động khác']]
Năm | Kỳ | Tài sản lưu động khác | |
---|---|---|---|
0 | 2024 | 3 | 134074225933 |
1 | 2024 | 2 | 400500649851 |
2 | 2024 | 1 | 261218668090 |
3 | 2023 | 4 | 194894059515 |
4 | 2023 | 3 | 226429639030 |
5 | 2023 | 2 | 52662044484 |
6 | 2023 | 1 | 150707604182 |
7 | 2022 | 4 | 51841008271 |
8 | 2022 | 3 | 158416613177 |
9 | 2022 | 2 | 157142540024 |
10 | 2022 | 1 | 155330399563 |
11 | 2021 | 4 | 153897953409 |
12 | 2021 | 3 | 133822392289 |
13 | 2021 | 2 | 70617839039 |
14 | 2021 | 1 | 118086677471 |
15 | 2020 | 4 | 97527648804 |
16 | 2020 | 3 | 8934427514 |
17 | 2020 | 2 | 206889778010 |
18 | 2020 | 1 | 168360406809 |
19 | 2019 | 4 | 15433739031 |
20 | 2019 | 3 | 17040521529 |
21 | 2019 | 2 | 45610630388 |
22 | 2019 | 1 | 19376034517 |
23 | 2018 | 4 | 2684615898 |
24 | 2018 | 3 | 4415594208 |
25 | 2018 | 2 | 4105273019 |
26 | 2018 | 1 | 88999731050 |
27 | 2017 | 4 | 118590746956 |
28 | 2017 | 3 | 237955403298 |
29 | 2017 | 2 | 183934011040 |
30 | 2017 | 1 | 7877662985 |
31 | 2016 | 4 | 8287258887 |
32 | 2016 | 3 | 98150524670 |
33 | 2016 | 2 | 99230086928 |
34 | 2016 | 1 | 2785363865 |
35 | 2015 | 4 | 4592111980 |
36 | 2015 | 3 | 28801448457 |
37 | 2015 | 2 | 4704944896 |
38 | 2015 | 1 | 5166881345 |
39 | 2014 | 4 | 6871804516 |
40 | 2014 | 3 | 1991797670 |
41 | 2014 | 2 | 16469511065 |
42 | 2014 | 1 | 4682867183 |
43 | 2013 | 4 | 1066062671 |
44 | 2013 | 3 | 30228184561 |
45 | 2013 | 2 | 2134478587 |
46 | 2013 | 1 | 23794284033 |
from vnstock3 import Vnstock
stock = Vnstock().stock(symbol='VNINDEX', source='VCI')
VNINDEX = stock.quote.history(start='2023-10-16', end='2024-10-16', interval='1D')
2024-10-25 02:54:02 - vnstock3.common.data.data_explorer - WARNING - Thông tin niêm yết & giao dịch sẽ được truy xuất từ TCBS WARNING:vnstock3.common.data.data_explorer:Thông tin niêm yết & giao dịch sẽ được truy xuất từ TCBS
HNXINDEX= stock.quote.history(symbol='HNXINDEX', start='2023-10-16', end='2024-10-16', interval='1D')
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-70-23f201d23885> in <cell line: 1>() ----> 1 HNXINDEX= stock.quote.history(symbol='HNXINDEX', start='2023-10-16', end='2024-10-16', interval='1D') /usr/local/lib/python3.10/dist-packages/vnstock3/common/data/data_explorer.py in history(self, symbol, **kwargs) 120 self.symbol = symbol.upper() 121 self._update_data_source(self.symbol) --> 122 return self.data_source.history(**kwargs) 123 124 self._update_data_source(self.symbol) /usr/local/lib/python3.10/dist-packages/vnstock3/explorer/vci/quote.py in history(self, start, end, interval, to_df, show_log, count_back) 109 # if json_data is empty, raise an error 110 if not json_data: --> 111 raise ValueError("Không tìm thấy dữ liệu. Vui lòng kiểm tra lại mã chứng khoán hoặc thời gian truy xuất.") 112 else: 113 df = self._as_df(history_data=json_data[0], asset_type=self.asset_type, interval=ticker.interval) ValueError: Không tìm thấy dữ liệu. Vui lòng kiểm tra lại mã chứng khoán hoặc thời gian truy xuất.