问题描述
get_valuation如果指定enddata为T日,那么取到的市值是T日收盘后的,还是T日开盘前的?此外,如果T日有拆股,那么流动股本,取到的是拆股前还是后的?
解决方案
在 JoinQuant(聚宽)平台上使用 get_valuation 函数获取市值表数据时,关于取数日期和拆股股本的具体规则如下:
1. 取到的市值是 T 日收盘后的还是开盘前的?
是 T 日收盘后的数据。
当您指定 end_date 为 T 日时,get_valuation 返回的是 T 日收盘后的市值数据。市值(market_cap)和流通市值(circulating_market_cap)是根据 T 日的收盘价乘以 T 日的总股本/流通股本计算得出的。
⚠️ 避免未来函数的注意事项:
在回测环境中,如果您在 T 日的盘前(如 before_trading_start)或盘中(如 handle_data)调用财务数据 API,为了避免引入未来函数,系统默认(例如不传 date 或 end_date 时)会返回 T-1 日(前一个交易日)的收盘数据。如果您强制指定 end_date 为 T 日,您获取到的将是 T 日收盘后的数据,这在盘中逻辑里属于未来数据。建议在盘中决策时,使用 T-1 日的市值数据。
2. 如果 T 日有拆股,流通股本取到的是拆股前还是拆股后的?
是拆股后的数据。
如果 T 日是该股票的除权除息日(即发生拆股、送转股的生效日),那么 T 日收盘后的总股本(capitalization)和流通股本(circulating_cap)反映的都是拆股后的最新股本数量。
因为交易所会在除权除息日当天对股本进行更新,聚宽的市值表数据会同步记录这一变化。因此,T 日的市值 = T 日除权后的收盘价 × T 日拆股后的总股本。
总结
- 市值时间点:
end_date=T日获取的是 T 日收盘后的市值。 - 拆股股本:T 日若发生拆股,获取到的股本是拆股后的实际股本。
- 实战建议:在策略编写中,若需根据市值选股,请务必使用前一交易日(T-1)的市值数据以防止未来函数导致回测结果失真。