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