diff --git a/framework_v2/shared/data/flask_api_fetcher.py b/framework_v2/shared/data/flask_api_fetcher.py index 72dcf64..98cf82b 100644 --- a/framework_v2/shared/data/flask_api_fetcher.py +++ b/framework_v2/shared/data/flask_api_fetcher.py @@ -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 类型 )