3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化平台中,如果您发现某只股票在除权除息日(如 002668.SZ 在 2018年7月6日)前后的价格没有发生预期的跳空变化,这通常是因为您在获取历史行情时,使用了复权数据。
在调用 get_history 或 get_price 接口时,有一个关键参数 fq(复权选项)。如果 fq 被设置为 'pre'(前复权)或 'post'(后复权),系统会自动根据除权除息因子对历史价格进行平滑处理,消除因分红、送股等导致的价格缺口。因此,您看到的价格是经过数学调整后的价格,而非当时真实的交易价格。
如果您希望看到股票在除权除息日真实的、未经过调整的价格(即包含跳空缺口的价格),您需要在获取行情数据时,将复权参数 fq 设置为 None(不复权)。
def initialize(context):
g.security = '002668.SZ'
set_universe(g.security)
def handle_data(context, data):
# 获取不复权的历史数据,fq=None
# 这样在除权除息日,您就能看到真实的价格跳空
history_data = get_history(5, '1d', 'close', security_list=g.security, fq=None)
log.info("不复权收盘价:\n%s" % history_data)
如果您需要在策略中精确知道某只股票在何时发生了除权除息,以及具体的分红、送股比例,ptrade 提供了专门的 API:get_stock_exrights。
def initialize(context):
g.security = '002668.SZ'
set_universe(g.security)
def handle_data(context, data):
# 获取该股票历史上所有的除权除息信息
exrights_info = get_stock_exrights(g.security)
if exrights_info is not None:
log.info("除权除息信息:\n%s" % exrights_info)
get_stock_exrights 返回的 DataFrame 中包含以下重要字段:
bonus_ps: 每股分红allotted_ps: 每股送股rationed_ps: 每股配股exer_forward_a / exer_forward_b: 前复权除权因子fq='pre')或后复权(fq='post')。get_history 或 get_price 中设置 fq=None。get_stock_exrights 接口。