跳到正文

研究指南

股票回测与实验

参数选完怎样只测一次留出期:冻结候选再验收

留出测试只有在结果尚未参与选参时,才保留独立检查的意义。打开预留股票区间之前,先冻结一个候选和验收规则。第一次判定即使不理想,也要保存;之后的调整应归入新探索,不能覆盖失败后再把相同区间称为独立验证。

本文交付候选封条、开封回执,以及可检查的结果或未完成状态。标准库示例使用虚构交易利润和本地排他文件,不证明真实历史从未被看过,不核实CoTrading功能,也不证明未来盈利。每个实验限制在同一股票市场与币种内。

明确信息边界

写清开发期间、预留期间、允许输入,以及哪些人或程序已经查看过哪些结果。如果预留区间曾出现在选参所用图表、汇总指标或模型提示中,信息可能已经泄漏。新建一个文件名不会恢复独立性,应如实改变该区间的用途标签。

scikit-learn评价文档说明,根据测试结果继续调整超参数,会让测试信息进入选择。本文采用时间顺序预留与候选封存,不把分类器随机切分例子直接当作股票验证方案。市场数据的时间可得性仍需要单独检查。

开封前评估预留长度能否回答问题。可以检查输入是否存在,但不能把按未来结果排序的摘要泄露给选择者。缺失观测、交易不足与执行错误的处理都应预先规定。数据本身不可信,封条再完整也不能产生有意义的绩效判定。

把完整候选写入封条

封条包含代码和配置引用、数据快照与期间、股票池、日历、费用、成交时点及初始账户政策。还要保存评分公式、通过门槛和最低证据需求。只有“收益合理、风险可控”的描述,无法让另一个评价者重建判定。

样例候选回看三,至少需要两条已完成的合成交易观测,净利润总额不得小于零。这是操作演示门槛,不是统计置信标准,更不是通用投资规则。代码和数据标签分别为frozen-v1与synthetic-v1;真实交付应换成可以查看的冻结产物及实际内容摘要,不能只相信版本名。

把候选按稳定格式序列化后计算摘要,同时保留可读字段。与已保存引用比较,可以发现意外配置变化,但有写权限的人仍能同时修改封条和摘要。权限和访问控制需要另行实现,不能把哈希宣传成无法篡改的安全服务。

分开开封和完成

在执行依赖结果的工作之前,先创建开封回执,包含封条摘要与UTC时间。计算完成后再另写结果文件。如果程序在两步之间停止,回执仍能说明区间已经开封,即使此时还没有有效绩效判定。不能因为最后文件缺失,就把查看过程当作从未发生。

Python open官方文档规定,x模式用于排他创建,路径存在就失败。样例用它创建回执和结果,不用会截断旧内容的w覆盖第一次判断。回执路径来自声明的留出编号,因此真实档案中编号必须稳定,并能追到实际区间。

with receipt_path.open('x', encoding='utf-8') as stream:
    json.dump({'seal': seal_digest, 'openedAt': opened_at}, stream)

这是一种本地排他机制,不是分布式事务,也不是防篡改数据库。不能给同一物理区间改个编号就绕过检查。档案系统需要把编号绑定到真实期间和输入引用;小样例信任声明的合成案例编号,没有实现跨系统的数据身份管理,也没有替用户建立访问隔离。

主例:保留第一次失败

H1输入两条虚构净利润,分别负一和正零点五,总额负零点五。数量达到二,但利润未达到非负门槛,因此判定失败。保存数量、金额、状态和封条引用,不能只保存一个失败图标或最后一句结论。

程序随后尝试用更有利的观测重新打开H1,排他创建拒绝,并确认原结果未改变。这项测试检查首次记录能否保留,并不说明新观测属于合法新数据。若直接用它们替换原失败,正是本文需要阻止的行为。此前结果即使不好看,也不能从研究历史消失。

另一个反例把回看三改为二,却继续使用旧封条。摘要检查在评价前拒绝这一配置。如果需要研究新周期,应建立新的开发实验和独立未来证据。已看区间可以成为探索材料,但不能因为换了参数,就再次提供独立确认。

区分失败、信息不足与中断

H3只有一条正一观测,虽然金额为正,仍然返回信息不足,因为未满足至少两条的条件。不能忽视证据数量,编出通过或失败。报价、复权、公司行动或账户状态不充分时,也应该明确输入限制,不要用看似漂亮的数字代替证据要求。

H4在开封文件创建后注入执行异常,留下回执,没有结果文件。再次自动开封被拒绝,应报告已开封未产出有效结果,再调查执行故障。这与策略实际亏钱不同;把技术错误算作绩效失败,会混淆系统可用性与候选表现。

若预先允许受控技术重放,应标为已开封测试的重放,保存原始错误产物,并保持选参冻结。政策需要事先说明哪些修正属于技术纠错、允许几次、如何确认没有改变策略。本文故意禁止无痕重试,没有实现通用恢复管理器,也不授权改逻辑后重跑同一留出期。

保留足够证据供他人复核

交付包包含可读封条、配置摘要、开封时间、原输入、执行日志、首次输出与理由。检查者不询问作者,也应能解释H1为什么失败、H3为什么信息不足。失败日志和未完成回执与成功结果同样重要,不能只归档最终通过的版本。

即使一个人承担选参与评价,也应区分两个动作,记录发生时间以及人工干预是否改变候选。如果门槛在看完留出后才修订,必须披露并将相关结果改为探索。排版精美的摘要不能撤回已经产生的信息暴露,也不能弥补未保存的首次判定。

示例在专用临时目录内创建文件,核验后只清理它自己的演示目录。真实研究档案必须保留,不应照搬临时清理政策,更不能把本地文件测试称为备份审计或电源故障耐久验证。需要长期保存时,另行明确持久存储、权限、备份和恢复测试,这些没有在本文中实测。

对每次尝试建立去向账

正式运行可把每个预留编号列为未开封、已开封、完成通过、完成失败、信息不足或已开封未完成。每次转换附时间与产物引用,完成状态不能早于开封。发现开封回执存在但结果缺失时,不要删除回执重新开始,而应进入调查流程,并保留该次已经发生的信息接触。

还要区分同一测试的技术重放与新的研究假设。换参数、改费用或调整股票池后,应换实验身份,关联原失败原因。若继续使用已见数据,就说明只是在开发,不再把该数据当作保留证据。这样能避免一个不断改名的候选最终通过,却在报告中看起来只有一次测试。

实际运行与下一步

下载完整示例。使用Python 3.12或更新版本,运行python R610.py,仅使用标准库、合成观测及自己的临时文件。断言核验H1负零点五失败、重复开封和改封条被拒、H3信息不足,以及H4保留开封回执但没有结果。

流程验收要求首次结果经替换尝试仍保存,时间和冻结输入可追,每个尝试有明确结局或待解决状态。两条观测的玩具门槛不能提供统计保证,本例只检验能够解释的过程机制。结果保留与策略有效性是两个不同的验收问题,需要分别说明。

失败后可以淘汰候选,或者在新实验中继续开发;信息不足时按预定证据收集规则继续,不能根据部分结果改参数;通过后也仍需保留不确定性及其他上线条件。技术修订需要更新包时,保留原开封和判定,不改写已经学到什么的历史。CoTrading是否提供这些持久工作流,需要另行验证。

常见问题

哈希能证明留出区间从未被看过吗?

不能。它标识保存内容,真正的信息历史由访问过程和研究记录决定。

执行错误可以直接记作策略失败吗?

不能。已开封但无有效结果,需要明确未完成状态和技术调查。

相关阅读