fix(tdxquant): 区分除权空结果与服务端失败

在 SDK 丢失错误前检查原生除权响应,保留脱敏错误与重试语义;正常无事件返回空结果。事件或配价失败时中止同步并保留旧因子文件,避免被报告为成功的零行结果。补充 SDK 离线回放、数值与落盘回归测试。

Signed-off-by: shy3130 <shy3130@qq.com>
This commit is contained in:
shy3130
2026-11-02 00:23:15 +08:00
parent 7bd290289a
commit 8796f2cd7c
4 changed files with 219 additions and 27 deletions
+2
View File
@@ -334,6 +334,8 @@ uv run --extra dev python -m ruff check app/plugins/<your_plugin>/ tests/test_<y
TdxQuant 在 SDK 清理响应前检查服务端错误, 保留错误原因并脱敏; 明确的凭据/额度拒绝不重试, 实时分钟轮立即熔断。历史分钟请求失败会通过 `app.data_providers.base.ProviderRequestError` 传递到任务层并标记失败, 不转换成成功的 0 行或跨源重试; 其他插件也可用该异常显式声明请求失败。带时区的分钟请求窗口在插件边界归一为北京墙钟, 再与原生分钟列比较。正常停牌、休市或窗口内无数据的空结果保留原语义。
除权事件也在原生 `get_cw_data` 响应上执行上述检查:SDK 1.2.2 的 `get_divid_factors` 会将服务端失败与正常无事件都转换为空 DataFrame,不能用 DataFrame 是否为空判断请求成功。插件按 SDK 的 `Date/Type/Value` 契约解析事件,保留每 10 股单位及闭区间日期筛选;正常无事件返回空列表,事件或配价请求失败则中止本轮、保留原有因子文件,并向任务层及数据源试拉返回明确错误。
## 路由机制(无需关心, 仅参考)
后端启动时, `loader.py` 扫描 `plugins/` 目录: