diff --git a/.DS_Store b/.DS_Store index 4a8a4a12..c26ce77e 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/docs/1_vietnam_stock_vnstock3.ipynb b/docs/1_vietnam_stock_vnstock3.ipynb index 72a09824..4a9b4992 100644 --- a/docs/1_vietnam_stock_vnstock3.ipynb +++ b/docs/1_vietnam_stock_vnstock3.ipynb @@ -5871,7 +5871,7 @@ } ], "source": [ - "stock.finance.cash_flow(period='year', lang='vi').head()" + "stock.finance.cash_flow(period='year').head()" ] }, { diff --git a/docs/4_funds_vnstock3.ipynb b/docs/4_funds_vnstock3.ipynb index 317ff4e3..b0eb1033 100644 --- a/docs/4_funds_vnstock3.ipynb +++ b/docs/4_funds_vnstock3.ipynb @@ -27,20 +27,25 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Total number of funds currently listed on Fmarket: 49\n" + "Total number of funds currently listed on Fmarket: 50\n" ] } ], "source": [ + "# Gọi từ core module\n", "from vnstock3.explorer.fmarket.fund import Fund\n", - "fund = Fund()" + "fund = Fund()\n", + "\n", + "# # Gọi từ Vnstock wrapper module - version 3.0.7\n", + "# from vnstock3 import Vnstock\n", + "# fund = Vnstock().fund()" ] }, { @@ -52,14 +57,14 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Total number of funds currently listed on Fmarket: 49\n" + "Total number of funds currently listed on Fmarket: 50\n" ] }, { @@ -109,101 +114,101 @@ "
\n", "1540 rows × 3 columns
\n", + "1543 rows × 3 columns
\n", "" ], "text/plain": [ @@ -517,17 +522,18 @@ "3 2017-01-25 14547.21 SSISCA\n", "4 2017-01-31 14541.96 SSISCA\n", "... ... ... ...\n", - "1535 2024-07-03 39212.58 SSISCA\n", - "1536 2024-07-04 39510.62 SSISCA\n", - "1537 2024-07-05 39690.75 SSISCA\n", "1538 2024-07-08 39871.40 SSISCA\n", "1539 2024-07-09 40055.88 SSISCA\n", + "1540 2024-07-10 40153.97 SSISCA\n", + "1541 2024-07-11 39761.74 SSISCA\n", + "1542 2024-07-12 39689.96 SSISCA\n", "\n", - "[1540 rows x 3 columns]" + "[1543 rows x 3 columns]" ] }, + "execution_count": 5, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -900,7 +906,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -959,7 +965,7 @@ "1 16.92 Tiền và tương đương tiền SSISCA" ] }, - "execution_count": 11, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } diff --git a/vnstock3/.DS_Store b/vnstock3/.DS_Store index 7bd26523..55dac961 100644 Binary files a/vnstock3/.DS_Store and b/vnstock3/.DS_Store differ diff --git a/vnstock3/common/.DS_Store b/vnstock3/common/.DS_Store index dd9d5540..b21127b9 100644 Binary files a/vnstock3/common/.DS_Store and b/vnstock3/common/.DS_Store differ diff --git a/vnstock3/common/__init__.py b/vnstock3/common/__init__.py index 79acd2a6..e9f7ccce 100644 --- a/vnstock3/common/__init__.py +++ b/vnstock3/common/__init__.py @@ -1,3 +1,3 @@ from vnstock3.core.utils.env import id_valid -from vnstock3.common.data.data_explorer import StockComponents, MSNComponents, Quote, Listing, Trading, Company, Finance +from vnstock3.common.data.data_explorer import StockComponents, MSNComponents, Quote, Listing, Trading, Company, Finance, Fund id_valid() \ No newline at end of file diff --git a/vnstock3/common/data/data_explorer.py b/vnstock3/common/data/data_explorer.py index 6a1e39f3..6f583c2e 100644 --- a/vnstock3/common/data/data_explorer.py +++ b/vnstock3/common/data/data_explorer.py @@ -1,3 +1,4 @@ +import pandas as pd import importlib from typing import Optional from vnstock3.core.utils.logger import get_logger @@ -388,6 +389,56 @@ def ratio(self, symbol: Optional[str] = None, **kwargs): """ return self.data_source.ratio(**kwargs) + +class Fund: + def __init__(self, source: str = "FMARKET", random_agent:bool=False): + """ + Class (lớp) quản lý các nguồn dữ liệu được tiêu chuẩn hoá cho dữ liệu đồ thị nến, dữ liệu trả về tuỳ thuộc vào nguồn dữ liệu sẵn có được chọn. + """ + self.source = source.upper() + self.supported_sources = ["FMARKET"] + if self.source not in self.supported_sources: + raise ValueError(f"Hiện tại chỉ có nguồn dữ liệu từ {', '.join(self.supported_sources)} được hỗ trợ.") + self.random_agent = random_agent + self.source_module = f"vnstock3.explorer.{source.lower()}" + self.data_source = self._load_data_source(random_agent) + self.details = self.data_source.details + + def _load_data_source(self, random_agent:bool): + """ + Điều hướng lớp (class) nguồn dữ liệu được lựa chọn. + """ + module = importlib.import_module(self.source_module) + return module.Fund(random_agent) + + def listing(self, fund_type:str="") -> pd.DataFrame: + """ + Truy xuất danh sách tất cả các quỹ mở hiện có trên Fmarket thông qua API. Xem trực tiếp tại https://fmarket.vn + + Tham số: + ---------- + fund_type (str): Loại quỹ cần lọc. Mặc định là rỗng để lấy tất cả các quỹ. Các loại quỹ hợp lệ bao gồm: 'BALANCED', 'BOND', 'STOCK' + + Trả về: + ------- + pd.DataFrame: DataFrame chứa thông tin của tất cả các quỹ mở hiện có trên Fmarket. + """ + return self.data_source.listing(fund_type) + + def filter(self, symbol:str="") -> pd.DataFrame: + """ + Truy xuất danh sách quỹ theo tên viết tắt (short_name) và mã id của quỹ. Mặc định là rỗng để liệt kê tất cả các quỹ. + + Tham số: + ---------- + symbol (str): Tên viết tắt của quỹ cần tìm kiếm. Mặc định là rỗng để lấy tất cả các quỹ. + + Trả về: + ------- + pd.DataFrame: DataFrame chứa thông tin của quỹ cần tìm kiếm. + """ + return self.data_source.filter(symbol) + class MSNComponents: """ Class (lớp) quản lý các chức năng của thư viện Vnstock liên quan đến thị trường ngoại hối. diff --git a/vnstock3/common/vnstock.py b/vnstock3/common/vnstock.py index 22a8bd0d..4c6ca62b 100644 --- a/vnstock3/common/vnstock.py +++ b/vnstock3/common/vnstock.py @@ -1,7 +1,7 @@ import importlib from typing import Optional from vnstock3.core.utils.logger import get_logger -from vnstock3.common.data.data_explorer import StockComponents, MSNComponents +from vnstock3.common.data.data_explorer import StockComponents, MSNComponents, Fund from vnstock3.explorer.msn.const import _CURRENCY_ID_MAP, _GLOBAL_INDICES, _CRYPTO_ID_MAP logger = get_logger(__name__) @@ -29,10 +29,13 @@ def __init__(self, source:str="VCI", show_log:bool=True): self.source = source.upper() # self.utils = Utils(self) - def stock(self, symbol: Optional[str]=None, source: Optional[str] = "VCI"): + def stock(self, symbol: Optional[str]=None, source: Optional[str] = None): if symbol is None: self.symbol = 'VN30F1M' logger.info("Mã chứng khoán không được chỉ định, chương trình mặc định sử dụng VN30F1M") + + if source is None: + source = self.source else: self.symbol = symbol return StockComponents(self.symbol, source, show_log=self.show_log) @@ -51,3 +54,6 @@ def world_index(self, symbol: Optional[str]='DJI', source: Optional[str] = "MSN" if symbol: self.symbol = self.msn_symbol_map[symbol] return MSNComponents(self.symbol, source) + + def fund(self, source: Optional[str] = "FMARKET"): + return Fund(source) diff --git a/vnstock3/core/.DS_Store b/vnstock3/core/.DS_Store index 11fcffa1..fbbcfbf1 100644 Binary files a/vnstock3/core/.DS_Store and b/vnstock3/core/.DS_Store differ diff --git a/vnstock3/explorer/.DS_Store b/vnstock3/explorer/.DS_Store index 953d654c..e7e1fd6a 100644 Binary files a/vnstock3/explorer/.DS_Store and b/vnstock3/explorer/.DS_Store differ diff --git a/vnstock3/explorer/fmarket/__init__.py b/vnstock3/explorer/fmarket/__init__.py index e69de29b..27ee62c4 100644 --- a/vnstock3/explorer/fmarket/__init__.py +++ b/vnstock3/explorer/fmarket/__init__.py @@ -0,0 +1 @@ +from .fund import Fund \ No newline at end of file