refactor(flask_api_fetcher): 暴露adj参数,增强接口透明度和灵活性

改进:
- fetch_indices()添加adj参数,默认'raw',可自定义
- fetch_etf()添加adj参数,默认'hfq',可自定义
- 改进日志输出,显示实际使用的adj参数
- 保持向后兼容,默认值保持原有行为

优势:
- 透明性:调用者清楚知道使用的复权方式
- 灵活性:可按需获取raw/qfq/hfq数据
- 一致性:两个方法接口统一
- 向后兼容:不影响现有代码
This commit is contained in:
2026-05-26 19:54:41 +08:00
parent d404ddee17
commit 2ff48e8d56

View File

@@ -60,7 +60,8 @@ class FlaskAPIFetcher(DataFetcher):
self, self,
codes: List[str], codes: List[str],
start: str, start: str,
end: str end: str,
adj: str = 'raw'
) -> Dict[str, pd.DataFrame]: ) -> Dict[str, pd.DataFrame]:
""" """
获取指数 OHLCV 数据 获取指数 OHLCV 数据
@@ -69,6 +70,7 @@ class FlaskAPIFetcher(DataFetcher):
codes: 指数代码列表(如 ["000300.SH", "000905.SH"] codes: 指数代码列表(如 ["000300.SH", "000905.SH"]
start: 开始日期 (YYYY-MM-DD) start: 开始日期 (YYYY-MM-DD)
end: 结束日期 (YYYY-MM-DD) end: 结束日期 (YYYY-MM-DD)
adj: 复权类型,默认 'raw'(指数通常用原始价格)
Returns: Returns:
{code: DataFrame} 字典DataFrame 包含 OHLCV 列 {code: DataFrame} 字典DataFrame 包含 OHLCV 列
@@ -82,7 +84,7 @@ class FlaskAPIFetcher(DataFetcher):
... ) ... )
>>> print(data["000300.SH"].head()) >>> print(data["000300.SH"].head())
""" """
print(f"\n[FlaskAPI] 获取 {len(codes)} 只指数数据...") print(f"\n[FlaskAPI] 获取 {len(codes)} 只指数数据adj='{adj}'...")
results = {} results = {}
for i, code in enumerate(codes, 1): for i, code in enumerate(codes, 1):
@@ -92,7 +94,7 @@ class FlaskAPIFetcher(DataFetcher):
code=code, code=code,
start_date=start, start_date=start,
end_date=end, end_date=end,
adj='raw' # 指数通常用原始价格 adj=adj # 使用传入的 adj 参数
) )
if df is not None: if df is not None:
@@ -110,7 +112,8 @@ class FlaskAPIFetcher(DataFetcher):
self, self,
codes: List[str], codes: List[str],
start: str, start: str,
end: str end: str,
adj: str = 'hfq'
) -> Dict[str, pd.DataFrame]: ) -> Dict[str, pd.DataFrame]:
""" """
获取 ETF 数据(价格 + 净值) 获取 ETF 数据(价格 + 净值)
@@ -119,6 +122,7 @@ class FlaskAPIFetcher(DataFetcher):
codes: ETF 代码列表(如 ["510300.SH", "159919.SZ"] codes: ETF 代码列表(如 ["510300.SH", "159919.SZ"]
start: 开始日期 (YYYY-MM-DD) start: 开始日期 (YYYY-MM-DD)
end: 结束日期 (YYYY-MM-DD) end: 结束日期 (YYYY-MM-DD)
adj: 复权类型,默认 'hfq'ETF 收益计算推荐后复权)
Returns: Returns:
{code: DataFrame} 字典 {code: DataFrame} 字典
@@ -128,15 +132,23 @@ class FlaskAPIFetcher(DataFetcher):
示例: 示例:
>>> fetcher = FlaskAPIFetcher() >>> fetcher = FlaskAPIFetcher()
>>> # 默认使用 hfq后复权
>>> data = fetcher.fetch_etf( >>> data = fetcher.fetch_etf(
... ["510300.SH", "159919.SZ"], ... ["510300.SH", "159919.SZ"],
... "2024-01-01", ... "2024-01-01",
... "2024-12-31" ... "2024-12-31"
... ) ... )
>>> # 或者显式指定 raw原始价格用于计算溢价率
>>> data_raw = fetcher.fetch_etf(
... ["510300.SH"],
... "2024-01-01",
... "2024-12-31",
... adj='raw'
... )
>>> # 访问净值 >>> # 访问净值
>>> nav = data["510300.SH"].attrs.get('nav') >>> nav = data["510300.SH"].attrs.get('nav')
""" """
print(f"\n[FlaskAPI] 获取 {len(codes)} 只 ETF 数据...") print(f"\n[FlaskAPI] 获取 {len(codes)} 只 ETF 数据adj='{adj}'...")
results = {} results = {}
for i, code in enumerate(codes, 1): for i, code in enumerate(codes, 1):
@@ -146,7 +158,7 @@ class FlaskAPIFetcher(DataFetcher):
code=code, code=code,
start_date=start, start_date=start,
end_date=end, end_date=end,
adj='hfq', # ETF 收益计算必须使用后复权价格(处理份额拆分) adj=adj, # 使用传入的 adj 参数
asset_type='china_etf' # 强制指定 ETF 类型 asset_type='china_etf' # 强制指定 ETF 类型
) )