股票因子信号过期了吗:检验可成交延迟后的选股效果
股票因子的前瞻标签可以很好看,首次真正能进入的持仓却亏损。先建立形成、来源可得、处理完成与可执行时段的时间账,再按预定持有规则从实际入场评价。统一移动一行不能证明所有时间都正确,尤其不能把已经发生的开盘上涨自动归给后来才知道分数的账户。
本指南跟踪一只虚构美股,使用带时区偏移的一月时间戳、固定有效期和合成价格。CoTrading时点诊断仍为规划或待核实,没有运行真实发布源、交易日历、券商或历史业绩序列。交付是一笔可追查入场和独立费用账,不声称真实因子经过延迟仍有效。
每个事件单独留时间
记录经济测量截止、来源发布时间、管线实际可用时间、决策截止与计划执行事件。周五收盘形成的分数可能周一开盘之后才到达,因此形成日期不能授权周一开盘成交。日期相同也不等于顺序正确,盘前和盘后必须通过更细时间或保守约定区分。
Python日期时间文档区分带时区信息与含糊的朴素时间。本例一月统一使用负五小时偏移,只是教学表示,不是完整交易日历,也不是全年夏令时规则。正式研究使用明确市场时区与会话,不能把这个固定偏移推广到所有日期。
只有可得日期时,不要编造盘中时刻以抓住漂亮开盘。采用保守且已声明的约定,或补准确证据。供应商时间戳也不一定是账户可以使用数据的时刻,处理延迟重要时另存准备完成时间。没有该证据就保留限制,不能用统一位移替代整个信息链核对。
提前冻结入场与过期规则
本实验寻找严格晚于可得时刻的第一条给定开盘,同时要求证券可执行,且开盘不晚于有效期终点。严格晚于表示同一时间戳不自动接受,真实系统还要定义处理和提交所需余量,不能默认信息一公布就已完成下单。这个边界应成为规格,而非事后解释。
这里的第一条指时间戳最早的合格事件,与输入行顺序无关。实现先过滤可执行事件,再按解析时间取最小值,不使用遍历中先遇到的一行。反例把有效期延至一月八日十六点并倒序输入,仍必须选一月六日九点三十,不能误选排在输入前面、实际更晚的一月七日开盘。
有效期截止一月六日十六点,偏移相同。此前没有合格开盘就取消,不因后面价格有利而延长。接受入场后固定在给定下一交易期开盘退出,没有搜索最佳持有期。变更截止或持有规则会产生新策略版本,不能称同一信号只是换一种统计方式。
选股资格与可执行性分开。股票仍可为预选因子候选,但某开盘无法交易;阻止不会倒改分数。候选、目标、拒绝和实际成交分别保存,缺交易时沿记录定位,而不是把未成交股票从原名单删除,让研究看起来从来没有错过机会。未进入也是结果之一。
主例三时点逐项重建
分数形成一月二日十六点,实际可用一月五日九点三十五;给定一月五日开盘九点三十、价十,因此知道分数时这个开盘已过去。按本契约不能以十入场,不管这一天行号在面板中看起来多么合适,也不能用当天稍后可得消息回填到开盘前。
下一给定开盘一月六日九点三十、价十二、许可真,晚于可得且未过期,所以成为首次允许事件。随后一月七日九点三十价十一,是固定退出。三条事件原样保留,不从日级索引猜测顺序。读者可以直接检查每笔建仓是否晚于分数可得。
统计标签从一月五日十到一月六日十二,为正百分之二十。作为某种预先定义的描述标签,它可能有分析用途,却不是本可交易实现的收益。策略首次能以十二进入时,这段涨幅已经发生;不能因为日期仍在标签窗口内,就把过去上涨算到账户里。
实际持仓与资金比例复算
初始一千,以十二买四十股,虚构费一,流出四百八十一,现金五百一十九。下一指定开盘十一卖四十股,再费一,净入四百三十九。最终现金九百五十八,无持仓。每个费用来自实际执行订单,不能向未成交机会收费,也没有隐藏借款或额外资金。
股票实际持有毛收益为十一除十二减一,约负百分之八点三三三三三三。账户价格亏四十,费用二,净亏四十二,占初始资金百分之四点二。二者不同因为入场只投入四百八十,而不是全额一千。不能把股票收益直接乘全部账户资金,忽略现金暴露。
三列分别保存正百分之二十标签、负股票持有收益和负账户收益。不要因为报表只有一个“因子收益”字段,就让它们互相覆盖。此处关键验收是:可得之前的漂亮走势不是后来可执行持仓赚到的钱。读者即使不认同策略,也应能验证这条会计与时间边界。
开盘被阻止后按有效期取消
只把一月六日许可改假,时间价格不变。一月五日仍太早,一月七日已经超过固定有效期,搜索返回没有事件。不能为了保证每只入选都成交而跳到一月七日,也不能用旧开盘代填。此处改变的是执行可用性,不是信号、分数或另一个延迟参数。
没有入场,就没有执行名义金额和虚构成交费,账户保持未投入状态。真实管线应记录被阻止机会和到期取消原因,同时保留原分数血缘。若只保留成功入场的证券,之后会形成覆盖选择,看不到时点模型实际丢失了哪些候选,结果难以解释。
首次开盘搜索与统一向后移动一行不等价。节假日、晚发布、个别证券缺行情和执行许可都会改变首次事件。本文不把这个小例当作所有上游、财务或模型训练都没有前视的证明,只验证这条明确事件链。其他信息路径仍应分别建立可得和扰动检查。
执行时间与现金断言
下载完整示例,保存R569.py,用Python 3.12及以上执行python R569.py。仅标准库和合成事件,文件位于docs/growth/research/round-5/examples/R569.py,不查询真实市场日历,也不与外部账户通信。
断言检查形成早于可得、可得早于入场,一月六日入场、统计标签百分之二十、现金九百五十八,以及受阻后过期无入场。输出包含所选事件与两类收益定义。不能只验最终收益碰巧相等,时间与数量要一起检查,防止一个不可实现的早买价被其他误差抵消。
真实研究从证据扩展
Investor.gov订单说明说明观察价不保证执行价。真实研究需写订单约定、价格来源、限制、流动性和成本。模型允许的开盘仍是一个假设,需要适合账户规模及市场的证据,不等于真实券商一定按该价完成。
扩大股票范围前冻结可得处理、处理余量、市场日历、有效期、持有规则和缺事件政策。每个请求建仓都留一行,含未入场与原因,而不是只留成交赢家。来源修订时间戳、市场日历或处理约定变化后另存版本,重新构造一次迟报进入和一次取消,保留前后工件。
完成包说明在声明信息和执行限制下能进入什么,而非寻找最赚钱延迟。若后来发现发布时间只有日期,先收窄结论,再补数据,不让原先精确到分钟的图表继续制造虚假确定性。预先固定有效期也不能保证经济信号真的过期,只是让是否允许尝试可验收,现实有效性仍需真实样本。
连被拒绝的相邻事件一起审
检查选中入场前一条开盘。本例它因早于可得五分钟被排除,不因为价格不利;下一事件先凭时间和许可接受,再计算之后退出结果。若代码先看收益再挑允许事件,即使输出的时间看起来都晚于可得,也已经变成事后选交易。判定顺序需要能从记录看见。
每个候选事件保存太早、不可执行或过期等原因。来源修订可能改变原因,因此保留原事件版本,不把取消覆盖成假设延后成交。新的有效期可以研究另一条路径,却不能解释旧契约实际做过什么。这个事件级账让时间连接可审,而不是藏在表格位移后只剩一个最终日期。
还要避免把多市场日历拼成同一交易日序号。一个证券的下一开盘,不能用另一市场已经开市来替代;账户币种和资金是否能用也需独立约定。本指南限制一只美股、给定同偏移事件,未验证跨市场执行,扩大范围时必须新增输入与验收。方法可迁移,不意味着现有小例已经覆盖所有交易制度。
临时没有分钟证据时,报告应收窄为保守日期级可得,不能维持精确分钟结论再把缺口放到页尾。精确字段需要精确来源。先保证时间账真实,再研究经济信号是否值得等待;这样数据不确定性与因子衰减不会被混在一个“延迟损失”数字里,后续也更容易定位改动。
常见问题
延后一日能解决全部时点问题吗?
不能。公布、处理、证券可用性与市场会话仍需显式连接。
正前瞻标签能同时对应可交易亏损吗?
可以,本合成例在标签上涨之后才入场,固定持有期间随后下跌。