跳到正文

研究指南

股票组合与模拟研究

股票组合跑赢基准来自哪里:把多期超额收益拆到持仓

多期超额收益通常不等于各期主动贡献直接相加。组合与基准分别复合,需要明确连接方法,并保留费用和交互。先对齐期初权重及总回报,再解释分期效果怎样还原最后相对结果,不能为了没有残差就手工调某只股票贡献。

本文用两期虚构股票做精确算术勾稽,为外部分析,不证明CoTrading已有归因。市场币种一致,排除外部资金,不重写TWR/MWR,也没有回测换汇层。贡献是对输入的解释,不是投资技能或未来回报证明。

先定义相对收益问题

明确超额指两条累计收益之差,还是增长因子之比减一,两者不同。这里用分别复合后的算术差,以百分点报告贡献。不能在一张表中换分母,仍沿用相同“超额”名称,接手者需要知道总数应该还原哪一个量。

证券身份、区间和含分配的总回报口径相同,两边都扣各自声明的模型费用;组合成本如下,基准成本假设零。它是理论对照,不表示真实基准投资可无费用。实际基准价格收益和组合总收益混用时,应先解决,不把差额叫选股能力。

外部入金与取款先独立处理,不是证券效果。本例契约拒绝非零流水,真实有流账户先取得恰当收益序列,再进入归因。不能因期末资金增加,就把增加的本金按持仓权重分成“贡献”,那会把资本来源误当投资表现。

取得期初权重及共同回报

每期保存组合和基准起始权重、证券总回报、费用比例和分类,不能用结束权重解释刚结束期间。期内频繁变化需要更细时段或独立贡献账,不是简单期初乘整期回报可以自动覆盖的情形。

先检查权重和费用有限,再核预算。Python Decimal文档说明本例采用的有限性和十进制接口。NaN不能绕过和为一,负费用或非有限成本也拒绝。小数精确不等于输入可信,原数据和分类仍要有依据。

主例两条路径权重各和一,没有单独现金,两证券全部观察。它不是自动解析真实指数成员、公司行动或缺失证券的工具,输入映射先完成。如果某股只在一边存在,应以明确零权重纳入共同身份集合,而不是随意删除难匹配的行。

每期效果实际计算

第一期组合A零点六、B零点四,基准各半;A回报零点一、B零,组合费率零点〇〇一,净组合零点〇五九,基准零点〇五。证券主动贡献是两边权重差乘同一股回报,A零点〇一、B零、费负零点〇〇一,合计零点〇〇九。

第二期组合A零点三、B零点七,基准仍各半;A负零点〇五、B零点〇四,费用零点〇〇二。组合净零点〇一一,基准负零点〇〇五,效果A正零点〇一、B正零点〇〇八、费负零点〇〇二,合计零点〇一六。

效果第一期第二期
A正1.0百分点正1.0百分点
B0正0.8百分点
费用负0.1百分点负0.2百分点
主动收益正0.9百分点正1.6百分点

费用有单独名字,不塞进某股来消除差额。这是直接证券暴露计算,不声称完整配置/选择模型,也不把实现贡献当独立因果效应。每期先满足和等于组合减基准,再处理连接,避免把单期错误误称时间残差。

留下复合交互

组合1.059×1.011−1为百分之七点〇六四九,基准1.05×0.995−1为百分之四点四七五,差二点五八九九百分点。未连接主动收益之和只有二点五,不能直接宣布已经解释全部累计超额。

差零点〇八九九百分点,等于两期组合回报乘积减基准回报乘积,是时间交互,不是未发现的选股利润,也不是凭空补一笔盈利交易的理由。这里保留具体来源,比写“其他”后不再解释更有用。

CFA荷兰协会归因框架讨论多期连接与残差。下文采用透明恒等式,不声称实现某个命名平滑算法,也不认证所有归因约定。方法选择应对应研究用途,而非挑最有利的股票贡献。

使用明确的顺序连接

每期效果乘该期之前组合增长因子,再乘该期之后基准增长因子,相加形成望远镜恒等式,等于两个总增长因子之差。本例第一期乘零点九九五,第二期乘一点〇五九,代码实际从序列求得。

multiplier[t] = product(1 + r for r in portfolio_returns[:t]) \
              * product(1 + r for r in benchmark_returns[t+1:])
linked_effect[name] = sum(effect[t][name] * multiplier[t]
                          for t in periods)

连接后A二点〇五四〇〇〇百分点、B零点八四七二〇〇、费负零点三一一三〇〇,十进制合计准确二点五八九九〇〇。费用也连接,不能股票用连接数、费用用原始和,否则又出现不明差额。

该分配含顺序约定,虽然总恒等精确,效果如何承接交互不是唯一经济真相。其他声明方法可能分配不同,不能把两种方法不同的A贡献直接当作算错;先统一目标总数与连接政策,再查剩余差异。

两种展示都完整,但不能叠加

可展示原A二点〇、B零点八、费负零点三,加时间交互零点〇八九九;也可展示上述三项连接效果,不再另加交互。两种都还原同一超额。把交互再加到连接总数会重复计算,必须有原到连接的调整表。

无法分类的费用、分配或数据效果要显式桶。独立分类测试把未知证券零点〇〇三放Unknown,合计零点〇二三保留,不删除它后假装解释覆盖完整。未知分类不代表没有贡献,更不能随意归给最接近的行业。

数值与范围边界

NaN和无穷权重在归一化前拒绝。当前正财富连接契约也拒绝组合或基准非正增长因子,不编造已耗尽账户后续百分比。真实破产、负净值或杠杆路径需要另立模型,不能用当前公式硬算出一个漂亮归因表。

非零外部流测试被阻断,不当作收益。期间或身份不一致也应先解决,错位数据上恒等成立仍不可靠。整个计算只核对声明输入,不认证供应商总回报、基准授权或交易成本完整性,实际来源必须在项目中确认。

期内交易、变化现金和股息可能要求更细子期。需要把现金、费用和无法解释部分留在账中,而不是因为模型只有A、B两列就强行分配。扩展分类之前保留原证券级效果,便于发现分组遗漏与重复。

交付多期勾稽表

保存回报定义、期初权重、费用、时段、原效果、连接因子和剩余项。先重建组合与基准总数,再重建差额,两个验收都通过才接受。不要只检查归因项加起来像超额,却没有验证各自基础收益是否正确。

费用比例在这里以每期期初资本为分母,连接后才表达跨期财富影响。若实际输入为金额,要先按约定期初基数转换并核对,不能把一元直接当成百分之一。样例费用已是明确小数,没有自动推断单位,也不支持混币种相加。

检查者还应看到没有分类的权重、是否完全投资、基准零费用假设和输入覆盖。任何一项改变都可能改解释,不能只刷新最后A贡献而沿用旧因子。原效果与调整一同保存,可防止后面手工编辑制造“无残差”假象。

分组之前保留证券级原表,再核分组加Unknown是否还原证券总额。行业摘要可能隐藏漏股、重复映射或事后重分类,映射生效日也要保存,当前标签未必属于历史期。这里检查解释完整性,不因为残差小就认为无关紧要。显示四舍五入可以影响表面加总,应先用完整精度验证,再明确展示精度,不能通过编辑某组最后一位把差额强制清零。

分类修订附依据、批准人和时间戳,重新核对受影响时期,不回写掩盖原未知状态。

下载完整示例。使用Python 3.12或更新版本,运行python R632.py。标准库十进制断言两期桥、各自累计、超额二点五八九九、交互零点〇八九九、连接股票费用、未知分类和非有限拒绝。没有真实历史回测或产品归因调用。

权重、基准、成本、回报、分类或边界变化后重算,保留旧版。本文只验证明确多期算术,不证明技能、真实跑赢或系统已有相同功能。外部资金收益口径继续使用独立流程,不以本题代替。

常见问题

分期主动收益能直接相加吗?

不能直接还原两个复合累计之差,需要时间交互或明确连接。

费用可以藏到股票贡献里吗?

不应,定义与连接方式单列。

相关阅读