fix: 修复数据获取架构逻辑Bug

修复内容:

1. Bug #1: TushareSource.fetch(adj='raw') ETF 无法获取
   - 在 adj='raw' 分支优先判断 ETF
   - ETF 代码现在正确路由到 fetch_etf()

2. Bug #2: is_china_index 判断范围过宽
   - 添加 ETF 排除逻辑
   - ETF 不再被误判为指数

3. 接口一致性:CCXTSource 添加 adj 参数
   - fetch(code, start, end, adj='raw', timeframe)
   - 加密货币仅支持 adj='raw'
   - UniversalDataFetcher._fetch_crypto() 同步更新

影响:
- ETF 原始价格数据获取恢复正常
- 类型判断逻辑更准确
- 数据源接口签名统一
This commit is contained in:
2026-05-23 21:46:01 +08:00
parent b7f7a756b6
commit 3697c9d38b
3 changed files with 19 additions and 4 deletions

View File

@@ -255,7 +255,7 @@ class UniversalDataFetcher:
elif asset_type == AssetType.FUTURES:
return self._fetch_futures(code, start_date, end_date, adj)
elif asset_type == AssetType.CRYPTO:
return self._fetch_crypto(code, start_date, end_date, timeframe)
return self._fetch_crypto(code, start_date, end_date, adj, timeframe)
else:
print(f"⚠️ 未知资产类型: {code} -> {asset_type}")
return None
@@ -440,6 +440,7 @@ class UniversalDataFetcher:
code: str,
start_date: str,
end_date: str,
adj: str = 'raw',
timeframe: str = '1d'
) -> Optional[pd.DataFrame]:
"""
@@ -450,11 +451,13 @@ class UniversalDataFetcher:
- 需要通过 socks2http 将 SOCKS5 转 HTTP 代理
- 必须指定 timeframe
- 不缓存(每次实时下载)
- 加密货币仅支持 adj='raw'(无复权)
Args:
code: 加密货币代码BTC, ETH
start_date: 开始日期
end_date: 结束日期
adj: 复权类型(仅支持 'raw'
timeframe: K线周期1d, 1h, 4h, 15m, 1m
"""
# 延迟初始化加密货币数据源
@@ -463,7 +466,7 @@ class UniversalDataFetcher:
socks_port = self.ssh_config.get('local_port', 1080)
self._crypto = get_crypto_source(socks_port=socks_port)
return self._crypto.fetch(code, start_date, end_date, timeframe)
return self._crypto.fetch(code, start_date, end_date, adj, timeframe)
# ============================================================
# 批量获取