refactor(flask_api_fetcher): 暴露adj参数,增强接口透明度和灵活性
改进: - fetch_indices()添加adj参数,默认'raw',可自定义 - fetch_etf()添加adj参数,默认'hfq',可自定义 - 改进日志输出,显示实际使用的adj参数 - 保持向后兼容,默认值保持原有行为 优势: - 透明性:调用者清楚知道使用的复权方式 - 灵活性:可按需获取raw/qfq/hfq数据 - 一致性:两个方法接口统一 - 向后兼容:不影响现有代码
This commit is contained in:
@@ -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 类型
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user