排名组合频繁换股票怎么办:设置持有缓冲区再回测
排名只在边界附近小幅变化,组合也可能反复更换同几只股票。排名缓冲引入持有状态:老成员在较宽退出界内可保留,新成员需达到较严进入界。应在相同冻结排名上测试,不修改因子,也不宣称排名已有预测力。
本文比较即时前二与一种明确缓冲,并计算合成交易,为外部扩展,不证明CoTrading已有成员管理。账户多头、单币种、零费用、恒定虚构价格,有意隔离换股次数。真实市场、手数和执行限制需要另验,不从低换手推断盈利。
先冻结原始排名和并列规则
保存每次合格清单、信息截止、分数或完整顺序及生效日期。两政策收到完全相同输入,不能一边用修订分数或未来披露,再把变化只归于缓冲。股票池历史也要确认,当前名单不自动是当时可投资全集。
并列先确定,边界例中分数相同按证券身份排序,A先于B。缺失与非有限分数应有资格政策,不依赖排序偶然位置。主例直接给唯一身份的完整排序,没有构造因子,更没有运行全市场扫描。排序记录与后续成员表分别保留。
MSCI缓冲说明讨论控制指数成员换手的缓冲。这里只支持进入与保留可分开的思路,前二/第三名规则为自设,不复刻当前MSCI方法,也不借其历史图表认证本例效果。
写清谁有优先权
组合两个槽位,即时政策每次选前二。缓冲先留排名不低于第三的旧成员,再从尚未持有的当前前二补空位。槽已满时,新第一名不会自动挤走仍符合退出界的旧股,这是本例核心优先政策。
有些缓冲设计会强制高排名进入,或把旧新候选再排序,属于其他算法。不能只有“缓冲”名称却不解释实际执行。进入阈值、退出阈值、容量和补位规则事先确定,看到换手之后不再挑最有利版本。
只有一只合格时,只占半个资本,另半现金,不把剩余一股归一化满仓。两政策采用相同半资本槽位和成交规则。低配的来源是没有合格成员,不应被藏进股票部分看似完整的百分比图中。
六期排名主例
| 期次 | 从高到低 |
|---|---|
| 0 | A、B、C、D |
| 1 | A、C、B、D |
| 2 | A、B、C、D |
| 3 | A、C、B、D |
| 4 | C、D、A、B |
| 5 | C、D、B、A |
双方从A/B开始。即时前二在一至三期依次B换C、C换B、B换C,缓冲一直A/B,因为B都没有掉出第三。此时减少交易,也意味着没有跟进C排名改善,不能只说无代价消除无用交易。
第四期B第四必须退出,A第三仍可留,C补位,得到A/C;D虽第二,也不能按本例优先级挤走合法A。第五期A第四,D进入,得到C/D。每次保留可直接核对退出界,不靠最后组合倒推中间状态。
实际股数与现金顺序
四股始终一百,初始一千,每占位目标五股,零成本。执行器先卖退出,再买新入,每笔之后检查现金不负,不靠一次再平衡内部先负后正的净额遮掩。这是独立账户推进,而不是只数排名名单差异。
retained = [s for s in incumbents if rank[s] <= exit_rank]
desired = list(retained)
for s in ranking[:entry_rank]:
if s not in desired and len(desired) < capacity:
desired.append(s)
完整程序把名单转为目标股数、实际现金和成交额。真实不同价格、漂移、费用与手数需同样推进,不能用换一只就必然固定成交金额替代。恒定价格只为清楚展示成员政策,没有模拟市场收益。
两条路径最终都一千,说明这里不是优选收益回测。保留低排名股不保证未来更好,也不证明原排序有信息。若实际价格变化,缓冲产生的敞口差会改变风险和净表现,需要按同一执行政策重新运行。
勾稽换手与机会覆盖
即时退出四次,缓冲两次,含初始建仓的双边绝对成交额除本金分别五和三。每次替换卖五百、买五百,初仓双方都一千。统计不同于仅计退出次数,表内应同时展示,以免把单边与双边混称换手。
不含形成初仓则为四和二,期间仍是六次合成决策,不年化,也不是基金报告法定指标。规则变化时先确认分母和计数是否一致,不能用不同口径让一种政策显得交易更少。只有完整成交才能建立金额证据。
缓冲成员序列A/B、A/B、A/B、A/B、A/C、C/D,减少边界反复,但延后获得C、D敞口。报告保留这个取舍,不声称保留所有好机会、只删不必要成本。排名好坏本身也没有在此由未来表现验证。
空位和无法退出分别处理
单独只给A,断言只有一槽、现金权重零点五。不能买不合格股补齐,也不能把A放大满仓。保存空缺原因与剩余预算,后一期有新合格对象时再按声明政策决定,不预借不存在机会。
另一反例让B第四但卖出被阻断,选择器返回blocked_exit,真实持仓保留用于记账,目标未施加。B不能因为卖不掉就被标成符合缓冲的保留股;合规保留仍必须不低于第三,执行例外应单列。
真实续算可以选择携带违规仓、压缩其他买入或停下来,但必须事先定义。不能虚构卖单成功,也不能把锁住的第四名混在合法retained中。本文检查状态,不自动建立完整停牌处理器,更不承诺实际券商一定成交。
身份与缺数不能靠缓冲掩盖
代码更名或公司行动需要稳定映射,改名不应制造假退出和新入;名字相近的不同证券也不能为减少换手而合并。映射版本在排名前冻结,不能根据是否赚钱选择身份处理方法。
某期排名缺失,执行预定保留、退出或停止政策,不把下一期排名回填过去。停牌和缺评分不应静默提升至合格集,未知与已测低排名不同。样例只检查唯一身份、并列与一个阻断分支,没有实现全历史证券主表或市场日历。
交付有状态成员账
每次输出原排名、旧成员、合法保留、新入、退出、目标、实际成交和现金。保留优先与候补顺序可逐项重放,第四期为什么A/C而非C/D应有规则解释。只有最终组合,会看不出中途三次即时反复替换。
同一成员继续持有,也可能因价格漂移重新调仓,实际金额不能仅由进入退出名单推断。本文价格恒定,所以这个因素被有意排除;真实扩展后应保留成员换股与存量再平衡两种成交来源,才能说明缓冲究竟节省了哪部分活动。
有交易成本时不能只把本例总额乘费率从期末扣掉,就假定股数仍五。费用可能减少可买数量,目标与残余现金要共同重算。本文零费明确让比较只反映成员状态,后续净表现研究应在新上下文完整执行。
扩展规则前先检查边界契约
参数化时应确认容量为正、退出名次不严于进入名次,并列已经形成唯一顺序。否则新加入的第二名可能在不变排名下立即触发第一名退出界,产生规则本身造成的反复。本文固定两个槽位、进入二和退出三,不提供任意参数政策解析器,新增接口需要相应验证。
还要区分明确跌出排序域与排名资料缺失。真实旧成员没有出现在输入时,不能未经来源确认就假定已退市或排名很差。小选择器按未列入处理为不符合保留,但生产流程应先解决上游缺失或停止验收,不能让这个简化替代证券可投资状态判断。
交接时为成员变化保存原机会时点,而不是只标实际下单日。排名可得但市场未开与排名尚未知不同,后一种不能先选再补数据。输入来源修订后,既要重算成员,也要保留之前使用的排序版本,避免同样策略名称下跨期使用了后来才知道的信息。
下载完整示例。使用Python 3.12或更新版本,运行python R631.py。标准库断言退出四/二、换手五/三、期末不变、六期缓冲成员、空位现金、并列顺序及阻断退出,不运行真实评分模型。
验收要求每个合法旧成员满足退出界,新成员满足进入界,例外不隐藏。排名、股票池、优先级、容量、价格或执行改变后重建,保留旧版。低换手本身不证明策略改善,也不验证产品自动成员管理。
常见问题
新第一名一定进入满仓缓冲组合吗?
本例旧成员优先,不一定,其他设计需另外声明。
卖不掉的第四名算合法保留吗?
不算,是执行例外,不是政策成功。