问题描述
解决方案
在聚宽 (JoinQuant) 量化平台中,关于分红送股等相关数值是否会随着“董事会预案 --> 股东大会预案 --> 实施方案公告”的阶段发生变化,主要取决于您使用的 API 接口类型以及数据在回测引擎中的应用方式。以下是详细的解答:
1. 回测与模拟交易引擎中的实际分红(账户资金/持仓变动)
在策略回测和模拟交易中,您的账户资金和持仓数量的变动是严格按照最终的“实施方案公告”及“除权除息日”来执行的,不会因为预案的发布而提前变动。
- 动态复权模式 (
set_option('use_real_price', True)):强烈建议开启此模式。开启后,每到新的一天,如果持仓中有股票发生了实际的拆合或者分红(即到了除权除息日),系统会自动根据复权因子调整您的股票数量和账户现金。预案阶段不会触发此调整。 - 事件回调 (
on_event):如果您在策略中定义了on_event(context, event)并监听DividendsEvent(分红送股事件),该事件也是在标的实际发生分红送股时才会被调用,包含bonus_pre_tax(税前分红)等最终实施的数值。
2. 财务数据与基本面查询 (get_fundamentals)
如果您是通过 get_fundamentals 等 API 查询财务数据库中的分红相关字段:
- 避免未来函数:聚宽的
get_fundamentals接口在传入date参数时,严格遵循“只能看到指定日期收盘后已披露的数据”的原则。 - 数据更新逻辑:如果数据库中包含了预案表和实施表,那么在董事会预案发布后,您查询预案相关字段会得到预案的数值;当股东大会修改预案或最终实施方案公告后,如果您查询的是代表最新状态的字段,数值会更新为最新公告的结果。但在大多数标准量化回测中,直接影响价格复权和账户结算的都是最终实施方案的数据。
3. 行情复权数据 (get_price, history 等)
- 复权因子 (factor):复权因子是根据最终实施的分红派息和送转方案计算得出的。在预案阶段,由于尚未除权除息,复权因子不会发生变化。只有在除权除息日当天,复权因子才会更新,从而影响前复权或后复权的价格。
总结
- 对于账户结算、持仓调整、价格复权:数值不会跟着预案变,只认最终的实施方案公告和除权除息日。
- 对于特定财务数据库表的查询:如果您查询的是专门记录公告进程的事件表(如聚宽提供的某些特定财务表),数据会随着公告的披露而按时间戳更新。但在编写交易策略时,请务必注意区分“预案”和“实际实施”,避免提前将预案当作实际分红来计算收益。