3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,get_stock_exrights 接口用于获取股票的历史除权除息信息。返回的数据中包含的 exer_forward_a、exer_forward_b、exer_backward_a 和 exer_backward_b 等字段,是用于手动计算股票复权价格的关键因子。
股票在发生分红、送股、配股等除权除息事件后,其价格会出现跳空缺口。为了在量化回测和技术分析中保持价格序列的连续性,必须对历史价格进行复权处理。这些因子就是用来进行线性变换的系数:
exer_forward_a:前复权除权因子 A(乘数)。exer_forward_b:前复权除权因子 B(加数)。exer_backward_a:后复权除权因子 A(乘数)。exer_backward_b:后复权除权因子 B(加数)。利用这些因子,你可以通过简单的线性公式将真实价格(不复权价格)转换为复权价格:
前复权价格计算公式:
前复权价格 = exer_forward_a * 真实价格 + exer_forward_b
后复权价格计算公式:
后复权价格 = exer_backward_a * 真实价格 + exer_backward_b
虽然 ptrade 的 get_history 和 get_price 接口已经提供了 fq='pre'(前复权)和 fq='post'(后复权)的选项来直接获取复权数据,但在某些高级场景下,你可能需要自己掌握复权逻辑:
以下是一个在 ptrade 中获取复权因子并演示计算逻辑的示例:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取股票的除权除息信息
exrights_df = get_stock_exrights(g.security)
if exrights_df is not None and not exrights_df.empty:
# 获取最近一次的除权除息记录
latest_exright = exrights_df.iloc[-1]
# 提取复权因子
fwd_a = latest_exright['exer_forward_a']
fwd_b = latest_exright['exer_forward_b']
bwd_a = latest_exright['exer_backward_a']
bwd_b = latest_exright['exer_backward_b']
# 获取当前真实价格
current_real_price = data[g.security]['close']
# 计算复权价格
calc_fwd_price = fwd_a * current_real_price + fwd_b
calc_bwd_price = bwd_a * current_real_price + bwd_b
log.info(f"真实价格: {current_real_price}")
log.info(f"计算出的前复权价格: {calc_fwd_price}")
log.info(f"计算出的后复权价格: {calc_bwd_price}")
总结:get_stock_exrights 返回的复权因子为量化开发者提供了底层的数据支持,使得在处理复杂的价格序列对齐和高频数据复权时拥有极大的灵活性。