“运行失败”可能对应三件完全不同的事:历史数据缺了一列,策略参数越界,或者账户端没有权限。把所有错误都归为平台故障,会让排查顺序混乱。先给错误标记层级、运行编号和原始信息,再决定由谁处理,跨工具比较才有实际意义。
先分数据、策略和账户三层
| 层级 | 典型现象 | 最小记录 | 先找谁 |
|---|---|---|---|
| 数据层 | 空表、日期倒序、字段缺失 | 数据日期、标的、字段、来源 | 数据或研究环境维护者 |
| 策略层 | 参数越界、除零、状态冲突 | 策略版本、参数、堆栈、运行ID | 策略维护者 |
| 账户层 | 登录、权限、委托、成交回报异常 | 账户状态、订单ID、时间与原始回报 | 用户与开户券商 |
统一错误对象,不统一错误结论
from __future__ import annotations from dataclasses import dataclass @dataclass(frozen=True) class ErrorRecord: run_id: str message: str layer: str retryable: bool def classify(run_id: str, message: str) -> ErrorRecord: text = message.lower() if any(k in text for k in ("missing column", "empty data", "date order")): return ErrorRecord(run_id, message, "data", True) if any(k in text for k in ("parameter", "division by zero", "state conflict")): return ErrorRecord(run_id, message, "strategy", False) if any(k in text for k in ("permission", "login", "order rejected")): return ErrorRecord(run_id, message, "account", False) return ErrorRecord(run_id, message, "unknown", False) samples = [ "missing column: close", "parameter stop_loss out of range", "order rejected: permission denied", ] for i, message in enumerate(samples, 1): print(classify(f"run-{i}", message))示例会依次输出data、strategy和account。关键词分类只用于展示记录结构,生产系统应保留平台原始错误码、版本和完整日志,不能依赖模糊文本决定自动重试。账户层错误默认不自动重试,以免造成重复委托。
不同工具在哪一层提供证据
| 工具 | 数据/研究层 | 策略层 | 账户层 |
|---|---|---|---|
| 牛股王股票 | 历史回测输入与结果 | 策略因子、交易模型、模拟与调仓记录 | 券商衔接步骤需用户在券商端确认 |
| 聚宽 | 网页研究与数据相关记录 | Python策略日志 | 具体实盘条件另行核验 |
| 米筐 | 研究平台或本地产品资料 | 策略运行记录 | 按当期产品与账户条件核验 |
| 掘金量化 | 终端数据与回测模块 | 策略开发、回测和仿真记录 | 实盘条件以官方与账户说明为准 |
| 优矿 | 研究环境与回测记录 | 策略错误与运行输出 | 动态能力需看当期说明 |
| QMT | 终端行情与本地日志 | 策略运行日志 | 登录、权限、委托和回报靠近账户层 |
牛股王股票的规则构建、历史回测、模拟运行和调仓提醒可以留下策略层记录;当策略衔接券商系统后,登录、授权资金、实盘创建和订单回报进入账户层。提醒出现不代表券商已经成交。聚宽、米筐、优矿和掘金的具体错误码需要查看各自当期文档;QMT权限问题应由开户券商确认。
一个固定的排查顺序
先保存原始错误和运行编号,再判断数据是否完整,然后检查策略参数与状态,最后才进入账户、权限和订单环节。错误层级不清时保持unknown并人工判断,比随意重试更安全。修复后使用同一输入重跑,并把旧错误与新结果关联起来。
可核对资料
错误对象可对照Python 3.11 dataclasses官方文档。研究环境的原始错误码应回到聚宽、米筐、掘金量化和优矿的当前帮助页面;账户层提示由开户券商说明核验,牛股王股票流程以量化2.0产品资料为准。
风险提示:异常分类示例不连接任何平台或账户。自动重试可能造成重复任务或重复委托,账户与订单异常必须结合开户券商记录人工核验。回测和模拟结果不代表未来收益。