跳到正文

研究指南

股票组合与模拟研究

从盈利交易总结的股票策略有效吗:用全部新机会做前瞻测试

从盈利交易总结的规则,已经根据有利结果被选择过。若测试时只收集下一批赢家,就重复同一个问题。应先冻结未来观察范围,再保留每次计划机会,包括亏损、无信号、执行受阻、行情未知和未平仓。问题是声明范围内发生了什么,不是还能否找到另一个漂亮案例。

本指南用十条合成观察演示前瞻测试结构,没有报告十次真实未来事件,没有运行模型,也不证明策略有效。全机会观察属于外部扩展,不验证 CoTrading 长期调度、真实账户输入或券商复制。所有未来标签都只是方法示例,不能把程序顺序当成实际独立市场研究。

先说明赢家样本能支持什么

至少五笔费用后盈利完整往返,可以是候选准备的参考输入条件,不能估计未来胜率、验证信号,也不能证明没有亏损。围绕被挑选赢家设计的规则,可能只是解释选择过程。另起观察前应保留来源截止、赢家定义及全部候选修订,不能仅留下最后听起来合理的一条解释。

Bailey 等人的回测过拟合原论文讨论重复搜索如何选中历史噪声。本文引用这个提醒,没有实现论文的 CSCV 或 PBO 计算。冻结未来账有助记录,但十条示例不能给出可靠成功概率,也没有消除所有选择偏差。操作门槛更不能被叫成显著性检验。

候选 human-v1 由人工提供,程序不调用提取模型,不声称 AI 从真实日志学到规则。合成结果被设计来演示政策如何应用;它们出现在脚本冻结操作之后,不代表真正未见的市场数据。真实实验需要独立保存事前规则及观察起点证据,不能事后排序文件就称前瞻验证。

冻结区间、机会网格及判断政策

看结果前定义网格,本例为固定单只美元股票范围内,合成会话一至十每期一个计划机会。十个位置都必须有去向,这是声明网格的全部机会,不是全市场所有证券、盘中决策或可能机会。扩大股票池或改变观察频率,都是另一个研究范围,不能沿用原分母。

冻结政策要求覆盖至少 0.9,闭合结果至少四笔;满足后,闭合净利润合计负数则 pause_negative,否则 continue_observation。这些是自设操作选择,不是监管要求、置信水平或经济有效性的充分样本量。继续的含义只是继续观察,绝不等于批准实盘,也不能把未达到停止条件解释为策略已通过。

Python hashlib 文档支持识别序列化政策。程序构造结果之前计算摘要,结束后核对未变。这是本地内容检查,不是可信预登记。真实研究应另外保留冻结回执、候选身份和观察开始证据,而不只是在结果已经到达后给一份可编辑文件计算哈希。

覆盖与结果闭合分别统计

覆盖定义为计划会话中不属于 quote_unknown 或 missing_opportunity 的比例。已知无信号算观察完成,缺行不算;market_blocked 也是已观察执行结果。未平仓有已知观察覆盖,但没有闭合利润,不能悄悄当作零回报完成交易。覆盖完整并不代表经济结果已经全部结清。

每行带冻结版本和唯一会话身份,函数拒绝重复、区间外、不支持状态及版本变化。缺少网格行会显式计数,防止只剩成功结果的短名单继承十期分母,也防止观察中断被写成一段平静无事的完整时期。输入数量对得上,还要逐项检查状态含义,不能只看行数。

覆盖不是胜率。规则可以充分观察却亏钱,也可以闭合结果为正但未知机会太多,无法按声明政策判断。原状态计数应保留,读者才能看出哪个前提不满足。输入缺失、有效无信号和闭合亏损不能合成同一种负面标签,否则后续修复会失去针对性,也容易把缺数据误当策略表现。

净利润保留全部亏损

夹具用独立的一股机会结果,每笔买价 100、两侧费用各一,四次卖价依次 104、98、103、99,对应净额 2、负 4、1、负 3 美元,合计负 4。这是闭合机会诊断总额,不是有并行持仓资金约束的组合净值或收益率。没有通过简单加总构造一份虚拟账户。

函数计算前验证有限正价格及有限非负费用,不把缺退出价当零,也不推断未平仓已经关闭。并发现金竞争、剩余市值、已实现和未实现账户损益,需要独立账户账。只加挑选后的机会利润,无法恢复这些经济过程,因此本文不把机会净额除以某个随意资本变成回报。

受阻和无信号行即使不贡献闭合利润,也要保留,它们说明规则是否真正有机会行动,以及执行假设如何限制观察。后续日志修正某次退出时,应保留原输出,以明确修订重跑,不能只改赢家数量或判断标签。开仓仍暴露的风险也不能为了让利润表完整而填零。

阅读十机会主例

台账有四次闭合、两次 no_signal、两次 market_blocked、一次 quote_unknown 和一次 open。按当前覆盖定义,十次中九次状态已知,覆盖 0.9。四次闭合净额负 4,信息阈值满足,却触发 pause_negative。计数和金额均由程序计算并断言,不是只打印一句预期结论。

暂停是当前政策的操作结果,不证明候选永远无效,也不说明下一笔一定亏损。未平仓仍有未解决经济暴露,即使负闭合总额已经足以让玩具政策停止使用,也应把它继续展示。读者需要知道暂停依据来自闭合记录,未把未知风险误报成已清算零损益。

不能因暂停就静默调阈值,再声称同一实验继续。修订候选使用新版本及新的未来范围,失败观察与搜索历史一起留档,否则连续修改只会剩下最后看起来成功的分支。按未来结果删改机会也不能被叫成数据清理;真正输入纠正需要来源证据和变更说明。

挑战只看赢家与缺覆盖

把未来账筛成两个正利润闭合,合计为 3,却只留下十个计划机会中的两个,覆盖 0.2、闭合两笔,冻结评价器返回 insufficient,不接受正子集。这是选择机制反例,区别于完整主例的净额负数。赚钱的子集不能继承原网格覆盖,也不能证明全机会表现良好。

再将一条已知受阻改成 quote_unknown,闭合净额仍负 4,但覆盖降至 0.8,结果改为 insufficient,因为未达到观察条件。仅前五期也保持不足。脚本另拒绝重复机会及 NaN 覆盖阈值。这些异常发生在不同层:有的缺观察,有的输入无效,不能一律记成策略失败。

这些断言不使百分之九十成为通用充分覆盖,缺失可能有系统性,四次闭合也远远不足以给长期统计保证。应检查缺失原因、是否集中于信号相关场景,以及计划范围是否仍回答原问题。更多观察应按冻结政策继续,而不是搜到足够新赢家就提前结束,或不断延长直到总额翻正。

如果观察结束时还有开放仓位,应按事先政策继续跟踪、明确截止估值,或保留未闭合状态。不能为了凑足四次结果,选择一个有利终点虚构平仓。当前例子只保留 open,没有计算其市值,也没有宣称覆盖指标完整描述了账户风险;这项限制随结果一起交接。

运行并交接前瞻账

下载完整示例,保存 R647.py,以 Python 3.12 或更新版本运行 python R647.py。只使用标准库及合成结果。断言核对十行计数、覆盖 0.9、四闭合、净额负 4、暂停、赢家子集不足、额外缺口不足、提前结束不足、重复拒绝及政策内容不变。

交付政策、候选版本、完整网格、状态账、闭合计算、开放风险和判断理由。pause_negative 与 insufficient 分开,任何一个都不能改写成盈利背书。目标是保存不利证据的可证伪、可恢复观察过程;真实长期有效性和产品集成仍未被这份独立演示验证,也没有授权真实交易。

验收报告还应注明机会的形成规则,避免未来替换分母。例如本例一会话一机会,不意味着只登记触发交易的会话;未触发本身也要有已观察行。若下次改成每股每会话网格,应重新确定身份、覆盖和关闭结果的统计关系,不能把旧十行记录当成新范围的完整证据。

常见问题

五笔历史赢家足以验证候选吗?

不能。只是参考准备门槛,本例另收完整计划范围,也没有统计有效性结论。

缺机会能当作无信号吗?

不能。缺行与未知报价降低覆盖,无信号必须有已观察评价。

相关阅读