股票模拟交易与实际交易怎么比:按同一次机会匹配差异
比较模拟股票信号和日志成交,首先需要证据证明它们指向同一次机会。时间接近或代码相同并不足够,不同规则版本、方向和观察范围都可能产生无关事件。先建立配对,再描述时间、数量及价格差异,不能直接推断交易者为什么采取不同动作。
本指南在固定 A/B 美元篮子及 v1 规则下,将四个合成机会与四条合成成交记录比较,不访问用户账户或券商导出。机会匹配是外部研究方法,不证明 CoTrading 已有导入、实盘复制通道,也不能估计未观察交易本来会赚多少。题目中的实际成交层在本例仍完全使用虚构输入。
确认比较的两层事件
一侧是带稳定身份、证券、方向、决策边界、请求数量与参考价格的合格模拟机会,另一侧是有自身身份并明确引用机会的成交记录。信号不自动等于虚拟成交,实际成交也不证明模拟规则产生了相同请求。比较对象的层次要先写清楚,否则成交率和偏差分母都会混乱。
真实研究应取得获授权的只读导出,保存来源字段及覆盖边界,不能从最后持仓反推缺失成交。一项持仓可能来自多次成交、转入或公司行动,重建这些事件属于另一项账户核对任务。当前例子不连接任何账户,也不把合成记录伪装成实际抓取的交易历史。
SEC 费用说明建议核对对账单与成交确认,这类资料可以支持执行证据及成本。本文只比较数量和价格,没有计算费用后已实现利润,不能替代日志成本勾稽。之后若展示收益,应一起保留来源与费用口径,不能从匹配成功直接跳到盈利结论。
先过覆盖和身份关口
冻结每次机会对应的股票池及规则版本。当前范围为 USD 与 A/B。C 的成交即使恰好靠近 B 的模拟事件,也属于未覆盖,不能写成交易者没有遵守那次机会。该实验没有建立可观察的 C 机会,缺失范围应由覆盖台账说明,而不是由人的执行偏差承担。
先匹配规范证券身份与币种,不能仅比较公司名称。版本不一致同样阻断比较,v2 可能表达不同假设,或从另一个截止点开始。程序保留 identity_or_version_mismatch,不为了形成配对而找附近 v1 事件。空或无效身份在配对前拒绝,无法确认上市证券时也不自动合并。
夹具假设源记录已经提供明确机会引用。真实导出没有这种字段时,应另存建议匹配政策及多个候选,不得把本文的确定标签直接套给推测链接。分析者手工分配的引用是一项待审证据,而不是两条独立来源天然拥有的属性;后续更改也需要留下解释和版本。
声明时间单位及窗口
例子使用整数序列时间,只接受机会之后零至三个单位内的成交。这些单位是合成顺序位置,不是分钟或交易日,早于机会的成交也失败。真实系统需先确定时间基础,再设容忍范围,不能看到某笔好交易没匹配上,就不断扩大窗口直到它被纳入。
Python datetime 文档说明带时区与不带时区时间的差别。真实时间预处理应先解决偏移及夏令时,再映射到共同时间轴。当前函数接收已准备的整数,没有实现市场日历或时间戳适配层,更不能从几个序号推断真实响应速度。
原始时间也应与标准化时间并存。延迟到达的确认时间未必是成交时间,信号生成时间也可能晚于底层观察边界。来源分不清这些字段时,应把时间比较标为未解决,不把随便一个导出字段当成精确行为证据。按相同时区显示,只解决表示一致,不能补齐时间含义。
要求没有歧义的关系
按明确机会引用对成交分组。没有引用成交时是 no_actual_execution;多条时是 ambiguous_actual_group,因为这个小契约不聚合部分成交。恰好一条才依次检查证券、币种、版本、方向和时间。这种顺序防止把无关事件上的数量差,当成有意义的执行偏离。
成交身份先做全局重复检查。完全重复一条来源行可能被多计,而不同身份的多笔成交指向同一机会,也许是合法部分成交,只是需要另一套处理契约。两者应分别保留,不能不断删除记录,直到余下一条恰好符合一对一规则,让尚未实现的聚合问题消失。
成功匹配报告带符号数量差、时间滞后与原始成交价减参考价。这个原始价格差并未统一调整买卖方向,不能通称有利滑点,也没有推断人的意图、委托类型或可用流动性。这些解释需要当前字段之外的证据。配对结果是事实描述层,不是自动诊断交易者能力的评分。
阅读主例机会账
S1 在时间十请求买三股 A,参考价 100。E1 明确引用 S1,同为 v1、USD,时间十二以 101 买两股。因此配对成功,数量差负一、滞后二、原始价格差正一。它们描述记录差别,不证明没有买到的第三股本来一定赚钱,也不将数量差自动归为错误。
S2 时间二十请求卖 A,而其引用成交 E2 是二十一时买入,结果为 direction_mismatch。S3 时间三十请求买 B,没有任何引用成交,得到 no_actual_execution。S4 时间四十请求卖 B,其 E4 却标为 v2,因此是 identity_or_version_mismatch,不能进入相同规则的价格比较。
E3 买的是 C,引用范围外机会,保留 coverage_gap;不会因为时间接近就挂到 S3。主例总共一个匹配机会、三个其他机会结论以及一条未覆盖成交行。汇总须保留这些不同分母,不能声称四个信号生成五次交易,也不能把每行都当成一次匹配失败再计算混合失败率。
用不同机制挑战配对
把 E1 从十二移到十四,不改变身份、方向或数量,其滞后四超过冻结窗口,变为 timing_mismatch。这是时间政策失败,与 S2 的反方向及 S4 的版本差异不同。每类都应有具体字段依据,让另一位复核者不需要猜测程序为何选择这个结果。
再添加唯一身份 E5,同样引用 S1,组变为 ambiguous_actual_group,而不是保留第一条忽略第二条。若直接重复 E1 身份,则在输入层报错。这些断言防止方便的一对一配对掩盖重复行或未实现的部分成交聚合,也说明不同异常不能用一个“未匹配”标签全部处理。
匹配窗口内仍可能存在真实的多个候选原因,当前明确引用只是夹具假设。实践中如果出现多个无法判定的候选,应保留全部候选及歧义,不按最小价差选出看起来最合理的一对。事后选择有利配对,会让差异报告带上新的选择偏差,不能再视为中立事实核对。
运行并交接对照结果
下载完整示例,保存 R643.py,以 Python 3.12 或更新版本执行 python R643.py。只依赖标准库和合成记录。断言核对全部主状态、S1 三项差异、迟到反例、多成交歧义及重复身份拒绝,不使用账户凭据或真实交易通道。
交付机会匹配账、未匹配事件、范围证据、版本引用和时间政策。差异意味着需要复查的问题,不自动证明行为错误或错失利润。映射修正时保留旧结果,以新的解释版本重跑。未来观察仍应收齐计划机会,不只留下最容易配对的成交,更不能只展示匹配后赚钱的记录。
验收时可先按机会身份确认每条都有一个明确去向,再核对实际成交身份是否都被保留。两侧数量不必相等,关键是没有隐形删除或一条成交反复用于多个机会。当前小例子的明确引用使这个关系可查,真实扩展若允许拆分或合并,则必须另行声明数量分配与费用归属规则。
更新对照时要标明修订属于哪一层:原成交导出更正、机会规则版本改变,还是匹配解释改变。三者不能在同一旧结果中悄悄替换。尤其是改变规则版本后,应重新建立相应机会集合,而不是只改旧信号上的版本标签。保留修订前后的逐行差异,才能解释匹配率变化来自数据完整性还是研究假设变化,避免把整理改进误称为执行能力提高。
常见问题
时间最近就能建立配对吗?
本契约不能。必须有明确引用,再验证身份、方向与时间。
没有实际成交意味着人错过盈利交易吗?
不能。它只描述提供的记录,缺失历史、成本、流动性及未来结果需要另找证据。