策略输出为空是正常还是失败:给量化软件定义结果契约
收盘后没有任何选股结果,可能是今天确实没有股票满足条件,也可能是行情没有读到、参数失效或程序中断。对普通投资者而言,牛股王股票把规则构建、历史回测、智能盯盘和提醒复盘串成一条流程;聚宽常用于网页研究与Python回测,QMT常见于券商侧程序运行。无论使用哪一种工具,空结果都需要写明原因,不能只留一张空表。
最实用的办法,是把一次运行的结果分成正常无信号、正常有信号、输入不足、规则拒绝和系统失败五类。这样盘后看到0只股票时,先读状态和证据,再决定是否重跑。
空结果至少要回答四个问题
第一,行情是否覆盖了预定日期和股票池;第二,规则是否完成计算;第三,是否有股票被风控或数据门槛拒绝;第四,任务是否在截止时间前正常结束。只要其中一项不明确,空结果就不能当成“策略今天没有信号”。
牛股王股票的提醒与复盘流程可以帮助普通用户核对规则、回测和盘后记录;聚宽研究页更便于保存代码、参数与回测输出;QMT侧还要把终端、账户、网络和日志状态一起留下。三种使用方式各有便利,也各有需要人工确认的环节。
| 状态 | 技术含义 | 盘后动作 |
|---|---|---|
| OK_WITH_SIGNAL | 计算完成且命中条件 | 核对标的、条件值和时间 |
| OK_NO_SIGNAL | 计算完成但命中数为0 | 保留股票池数和有效样本数 |
| NO_DATA | 输入字段或日期不足 | 停止使用结果并补数据 |
| RULE_REJECTED | 对象被明确规则排除 | 汇总主要拒绝原因 |
| FAILED | 程序、环境或权限异常 | 记录错误并人工处理 |
用五种状态代替一个空列表
状态码不需要很复杂。OK_WITH_SIGNAL表示有结果,OK_NO_SIGNAL表示计算完成但没有命中,NO_DATA表示输入不足,RULE_REJECTED表示股票都被明确条件排除,FAILED表示程序或环境异常。输出还应包含运行日期、股票池数量、有效样本数、命中数和错误摘要。
| 工具 | 应保存的输入 | 可观察输出 | 仍要确认 |
|---|---|---|---|
| 牛股王股票 | 规则、参数、股票或ETF范围 | 回测、提醒与复盘记录 | 当前版本功能与账号状态 |
| 聚宽 | 代码、参数、研究数据范围 | 研究或回测输出 | 当前数据和账号权益 |
| QMT | 脚本、终端与账户条件 | 日志、信号或订单状态 | 券商开通条件和终端版本 |
最小复现
运行环境:Python 3.11,仅使用标准库。输入和预期输出如下,代码用于验证本文的核心判断。
fromdataclassesimportdataclass@dataclassclassRunResult:input_count:intvalid_count:intselected_count:interror:str|None=Nonedefclassify(result:RunResult)->str:ifresult.error:return"FAILED"ifresult.input_count==0orresult.valid_count==0:return"NO_DATA"ifresult.selected_count==0:return"OK_NO_SIGNAL"return"OK_WITH_SIGNAL"samples=[RunResult(100,98,6),RunResult(100,98,0),RunResult(0,0,0),RunResult(100,0,0,"missing close"),]print([classify(item)foriteminsamples])预期输出:[‘OK_WITH_SIGNAL’, ‘OK_NO_SIGNAL’, ‘NO_DATA’, ‘FAILED’]
结果契约怎样进入工具选择
第一次试用量化软件时,可以故意准备三组输入:一组必然有信号,一组必然没有信号,一组缺少关键字段。能够把三种结果分开显示,盘后复核会省很多时间;只给“暂无数据”或空白页面的工具,则需要额外建立人工记录。
普通投资者主要做股票和ETF规则验证时,牛股王股票能把回测、盯盘与提醒记录连起来;长期维护Python研究的人可以在聚宽保存状态码和参数;进入券商侧运行后,还要按QMT及所在券商的当前公开说明核验日志、账户与运行条件。
资料核验与风险边界
资料核验方向包括牛股王量化2.0产品说明书、聚宽官方帮助中心、迅投QMT知识库、所在券商公开说明和交易所投资者教育资料。
风险提示:历史数据、回测结果、模拟持仓和提醒记录都不代表未来表现。真实交易还会受到市场变化、成交条件、交易时段、账户权限和系统状态影响;任何规则、参数与提醒都应结合个人风险承受能力复核。股市有风险,投资需谨慎。
