在回测中,复权价格处理十分关键,它能够让价格数据体现出股票分红、送股、配股等除权除息因素,使价格具有连贯性与可比性。以下为你介绍常见的复权方式及其处理方法:
复权方式
前复权:以当前股价为基准,将之前的价格进行调整。前复权的优点是当前股价保持不变,K 线图上的价格走势能够直观反映投资者的实际成本和收益情况,便于进行技术分析。
后复权:以股票上市首日的价格为基准,将之后的价格进行调整。后复权的优点是可以清晰地看到股票从上市以来的累计涨幅,便于评估股票的长期投资价值。
处理方法
手动计算
手动计算复权价格需要获取除权除息的相关信息,如分红金额、送股比例、配股比例等。以下是前复权和后复权的计算公式及示例代码:
前复权计算公式
前复权价格 = 不复权价格 / 复权因子
复权因子 = 除权前一日收盘价 / 除权日参考价
除权日参考价 = (除权前一日收盘价 - 每股现金红利 + 配股价 × 配股比例) / (1 + 送股比例 + 配股比例)
后复权计算公式
后复权价格 = 不复权价格 × 复权因子
下面是使用 Python 实现手动计算复权价格的示例代码:
python
import pandas as pd
def forward_restore(price_df):
"""
计算前复权价格
:param price_df: 包含日期、收盘价、分红、送股比例、配股比例、配股价的数据框
:return: 包含前复权价格的数据框
"""
price_df = price_df.sort_index()
price_df['复权因子'] = 1.0
for i in range(1, len(price_df)):
if price_df['送股比例'].iloc[i] != 0 or price_df['配股比例'].iloc[i] != 0 or price_df['分红'].iloc[i] != 0:
# 计算除权日参考价
reference_price = (price_df['收盘价'].iloc[i - 1] - price_df['分红'].iloc[i] +
price_df['配股价'].iloc[i] * price_df['配股比例'].iloc[i]) / \
(1 + price_df['送股比例'].iloc[i] + price_df['配股比例'].iloc[i])
# 计算复权因子
price_df['复权因子'].iloc[i] = price_df['复权因子'].iloc[i - 1] * (price_df['收盘价'].iloc[i - 1] / reference_price)
else:
price_df['复权因子'].iloc[i] = price_df['复权因子'].iloc[i - 1]
# 计算前复权价格
price_df['前复权价格'] = price_df['收盘价'] / price_df['复权因子']
return price_df
# 示例数据
data = {
'日期': ['2023-01-01', '2023-01-02', '2023-01-03'],
'收盘价': [100, 101, 102],
'分红': [0, 1, 0],
'送股比例': [0, 0.1, 0],
'配股比例': [0, 0, 0],
'配股价': [0, 0, 0]
}
price_df = pd.DataFrame(data)
price_df['日期'] = pd.to_datetime(price_df['日期'])
price_df.set_index('日期', inplace=True)
# 计算前复权价格
price_df = forward_restore(price_df)
print(price_df)
使用金融数据接口
许多金融数据接口,如 Tushare、BaoStock 等,都提供了复权价格的获取功能。使用这些接口可以方便地获取已经处理好的复权价格数据,无需手动计算。
以下是使用 Tushare 获取前复权价格的示例代码:
python
import tushare as ts
# 设置 Tushare token
ts.set_token('your_token')
pro = ts.pro_api()
# 获取某只股票的前复权价格
df = pro.daily(ts_code='000001.SZ', start_date='20230101', end_date='20231231', adj='qfq')
print(df)
在上述代码中,需要将 'your_token' 替换为你自己的 Tushare token,'000001.SZ' 替换为你要获取数据的股票代码,'20230101' 和 '20231231' 替换为你要获取数据的起始日期和结束日期。通过设置 adj='qfq' 可以获取前复权价格数据。
发布于2025-4-26 11:35 武汉

