feat(data): 添加每日筹码及胜率数据接口 (cyq_perf)

- 新增 api_cyq_perf 模块,支持筹码分布数据获取和同步
- 在 sync_registry 中注册 cyq_perf 同步器
This commit is contained in:
2026-03-26 22:22:43 +08:00
parent 6730acbae1
commit d4e0e2a0b6
9 changed files with 261 additions and 230 deletions

View File

@@ -531,6 +531,7 @@ def get_{data_type}(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
ts_code: Optional[str] = None,
client: Optional[TushareClient] = None, # 关键:可选客户端参数,用于共享速率限制
) -> pd.DataFrame:
"""Fetch {数据描述} from Tushare.
@@ -541,6 +542,9 @@ def get_{data_type}(
start_date: Start date (YYYYMMDD format)
end_date: End date (YYYYMMDD format)
ts_code: Stock code filter (optional)
client: Optional TushareClient instance for shared rate limiting.
If None, creates a new client. For concurrent sync operations,
pass a shared client to ensure proper rate limiting.
Returns:
pd.DataFrame with columns:
@@ -552,12 +556,12 @@ def get_{data_type}(
Example:
>>> # Get all stocks for a single date
>>> data = get_{data_type}(trade_date='20240101')
>>>
>>>
>>> # Get date range data
>>> data = get_{data_type}(start_date='20240101', end_date='20240131')
"""
client = TushareClient()
client = client or TushareClient() # 如果没有提供则创建新实例
# Build parameters
params = {}
if trade_date:
@@ -568,14 +572,14 @@ def get_{data_type}(
params["end_date"] = end_date
if ts_code:
params["ts_code"] = ts_code
# Fetch data
data = client.query("{tushare_api_name}", **params)
# Rename date column if needed
if "date" in data.columns:
data = data.rename(columns={"date": "trade_date"})
return data
```
@@ -596,6 +600,7 @@ def get_{data_type}(
ts_code: str,
start_date: Optional[str] = None,
end_date: Optional[str] = None,
client: Optional[TushareClient] = None, # 关键:可选客户端参数,用于共享速率限制
) -> pd.DataFrame:
"""Fetch {数据描述} for a specific stock.
@@ -603,20 +608,23 @@ def get_{data_type}(
ts_code: Stock code (e.g., '000001.SZ')
start_date: Start date (YYYYMMDD format)
end_date: End date (YYYYMMDD format)
client: Optional TushareClient instance for shared rate limiting.
If None, creates a new client. For concurrent sync operations,
pass a shared client to ensure proper rate limiting.
Returns:
pd.DataFrame with {数据描述} data
"""
client = TushareClient()
client = client or TushareClient() # 如果没有提供则创建新实例
params = {"ts_code": ts_code}
if start_date:
params["start_date"] = start_date
if end_date:
params["end_date"] = end_date
data = client.query("{tushare_api_name}", **params)
return data
```
@@ -751,6 +759,8 @@ Skill 会自动:
- [ ] 已创建 `tests/test_{data_type}.py` 测试文件
### 10.2 接口实现
- [ ] 数据获取函数使用 `TushareClient`
- [ ] **关键**:数据获取函数接受 `client: Optional[TushareClient] = None` 参数用于共享速率限制
- [ ] **关键**Sync 类在 `fetch_single_date()` / `fetch_single_stock()` 中传递 `self.client`
- [ ] 函数包含完整的 Google 风格文档字符串
- [ ] 日期参数使用 `YYYYMMDD` 格式
- [ ] 返回的 DataFrame 包含 `ts_code``trade_date` 字段
@@ -790,6 +800,6 @@ Skill 会自动:
---
**最后更新**: 2026-02-23
**最后更新**: 2026-03-26
**版本**: v2.0 - 更新 DuckDB 存储规范,添加 Skill 自动化说明
**版本**: v2.1 - 更新速率限制规范,强调多线程场景下 client 参数传递