跳到正文

研究指南

股票策略开发

股票策略稀疏输入测试:热身不足、停牌缺行与零成交量

股票稀疏输入需要明确的信号行为。历史不足、单股缺行、非有限价格和真实零量分别怎么处理,应在评价生成策略前确定。保留未知状态,不把前填价格当可执行行情,也不把每个缺口都转成合法零信号。交付是实际调用后的输入边界表,而不是只列清洗建议。

本指南用标准库为三观察尾部比较构造夹具。CoTrading输入边界工具仍为规划或待核实,数据全部合成。通过不表示供应商自动修好历史,也不证明任意生成代码都安全处理全部坏输入。测试范围限定于声明的数字和缺行类别,不冒充真实停复牌服务。

输入先按共同会话对齐

列表每个位置代表已识别市场会话,完整bar含数字或缺失的收盘与成交量;完全缺bar用None留槽。本例不获取交易日历,若来源删掉日期,适配层先按已知日历恢复空槽,不能压缩时间。否则相邻三条观察可能跨了未知间隔,窗口含义已经改变。

本原始股票价格契约要求有限正收盘,量有限且非负。Python数学官方文档说明比较前所用有限数检查。None、NaN和正负无穷能存入列表,不表示能参与交易测量。先检查,再计算,避免由异常浮点比较偶然决定持仓。

原观察和判断状态分开。缺bar不证明交易所正式停牌,已观测零量也不同于不知道量。原因描述此输入契约能确定什么,不编造市场事件分类。真实来源若有正式状态字段,应另连接并核对可得时间,而不是从一个空白推断具体停牌原因和解除日期。

固定保守连续窗口

指标需要连续三条有效、正活动bar,比较当前收盘与含当前的三条均值。严格高于目标一,相等或低于得到已就绪零;不足三条产生未知,用null表示。三条是教学窗口,不是最佳参数,也不因某个样例最后有交易才临时决定长度。

缺bar或无效数值会清空窗口,不能让一段未知间隔两侧三条观察冒充三会话指标。其他策略可以允许非连续观察,但要明确另一种计时与缺值政策,不能仍叫相同窗口。此处重置后必须重新积累,恢复行为也会单独测试,不让一次坏值永久关闭策略。

零量保留独立zero_volume理由。本夹具将其视为不适合产生交易信号,并重置指标窗口。这是主动保守政策,不是普遍宣称零量收盘不能用于任何估值。已有持仓可能另有估值处理,但那不产生新成交bar,也不能自动授权按旧价执行。

null与就绪零不是同义

正常十、十、十二,量均一百,得到null、null、一。前两行热身,第三行完整比较。若三条都是十且正量,第三行得到理由ready的零,脚本明确断言。两条路径长度和类型可以相同,但知识状态不同,输出应保留原因,不能只留一列整数。

不能为适应输出模式把null全转零。零表示规则已评价但不请求做多,null表示按契约无法评价。已有账户对未知状态需要另外政策,不能让下游默认值一会儿清仓一会儿保持。接口层应约定未知表示,再定义执行层如何响应,而不是在每处临时解释。

热身行也不是被拒绝交易,因为尚无完整机会。分别统计热身、不可用、就绪零与就绪一,才能解释零成交,而不靠降低阈值强迫活跃。若所有行都热身,这次研究并没有对既定窗口真正作过决策,不能称策略选择整段观望,更不能据此估计选股能力。

缺行后怎样恢复

给一条有效十、一个空bar,再给十、十、十二,输出null、null、null、null、一。第二行理由missing_bar,之后两行是清空后的新热身,较早的十不能跨空行帮忙补足窗口。这条序列把跳过与恢复连在一起,便于发现无声压缩时间或提前计算。

不使用前收盘和旧量填缺行。前填会造出观察、可能造出就绪信号,最后想象一笔不存在的成交。估值系统可以另行保留陈旧标记,但不能把它送进本策略的新鲜连续价格窗口。两种派生序列应有不同名字和允许用途,避免代码复用时混淆。

它与因子旧分数到期不同。这里缺的是滚动计算所需价格bar,那里复用的是已计算并有来源的评分。两者证据与政策不同,不能把“允许沿用一次分数”理解成“可以随便补一根行情”。模块和配置最好分开,交接时也说明各自验证过什么。

价格异常不会悄悄入选

第二价依次换成None、NaN、正无穷、负无穷、零和负一,每个都输出invalid_price、信号未知,并清窗口。之后三条有效bar才能恢复就绪一。正无穷不能成为极强买入,NaN比较为假也不能被包装成真实零决策。有限正数门槛先于算法执行。

数据模式限定数字或缺失,若适配器收到任意文字和畸形对象,应另有解析契约。本例不声称通用校验所有供应商载荷,只对列出的数值边界实际调用。输入模式越宽,越需要扩展错误样本;不能在数据类型假设改变后继续沿用旧绿色测试代表全部通过。

零量与量异常分开记录

成交量缺失、NaN、双无穷和负一均为invalid_volume,零则zero_volume。此政策都阻止信号并重新热身,但原因保留坏信息与已知无活动的区别。不能为了公式跑通把零量改一,也不能在量缺失时自动推断价格有效到可以交易。这些都属于额外假设。

本规则并不除以成交量,只把量用作显式资格门槛。其他量价公式要自己检查分母,不能继承本例正确性。每个坏量或零量后,同样三条好bar恢复到一,确保策略不会一次异常后永远不再工作。恢复时不补造空缺历史,而是从新连续窗口重新开始。

执行边界测试包

下载完整示例,保存R577.py,用Python 3.12及以上执行python R577.py。只使用标准库和合成数据,源文件docs/growth/research/round-5/examples/R577.py无需网络、凭证或第三方包。输出信号和原因,异常输入以诊断字符串展示。

断言覆盖正常热身、就绪零、缺行序列、六种价格边界、六种量边界、空输入和短输入。缺行夹具逐个截断前缀后,早期输出必须相同。它检查代码不读取未来,不证明传入资料从未被供应商修订;来源可得与代码计算仍是独立证据,不能合并成万能通过标签。

真实适配保留完整政策

将日历对齐、类型、有限检查、活动门槛、窗口重置和未知处理归入同一版本。先用来源证据分别审缺会话和零量会话,再扩展历史。保存排除哪些行、是否中断热身、何时恢复,不只保存最后能算的部分,否则无法解释为何某些证券一直没有信号。

合成测试不修复真实数据中断,也不重建正式停牌历史。完成条件是声明类别下,代码等待、跳过和恢复符合预期;获取数据、账户状态和执行仍需分别证明。扩大输入范围后应增加能改变行为的反例,而不是把更多字段加进表,却没有任何测试覆盖它们如何影响资格。

交接者还应看原缺槽是否被保留。有些清洗步骤在测试前就删坏行,使策略永远看不到本应触发reset的输入,最终测试通过却测试了另一份资料。保存清洗前后映射与原因,说明边界检查发生在何层。只有数据路径也透明,才能把本例机制可靠接入真实研究,而不让预处理悄悄改写窗口。

计算之外还要审输出适配。后面若把所有null转整数零,即使本边界函数通过,交付契约已经改变。外部接口要求完整数值序列时,单独定义等待政策并测试转换,不能直接借另一篇零一词汇,忽略未知输入对旧持仓的含义。可移植夹具刻意让这些决策可见,不让类型转换替代策略选择。

因此验收输出最好同时保存原信号与适配后信号,说明转换原因和版本。未知可以依明确规则保持、退出或拒绝整次运行,但不应由数组默认填充值偶然决定。若转换层没有证据,就把账户行为留作未验证,而不是因主体函数已经全绿便提前报告成交或风险结果。

常见问题

零成交量和缺成交量相同吗?

不同,本政策都阻止信号,但分别保留原因,不据此推断正式停牌。

可以前填收盘来补热身吗?

本连续有效bar契约不允许,其他插补需单独声明和验收。

相关阅读