问题描述
解决方案
在 QMT 平台中,获取一只股票历史上所有的分红送股日期(除权除息日)及对应的复权因子,可以使用 ContextInfo.get_divid_factors() 接口。
以下是具体的实现方法和代码示例。
核心接口说明
- 方法名:
ContextInfo.get_divid_factors(stock_code) - 参数:
stock_code(string),股票代码,格式为code.market,例如'600000.SH'。 - 返回值:返回一个字典 (
dict)。- Key (键):除权除息日(通常为字符串格式,如
'20210618')。 - Value (值):对应的复权因子(浮点数)。
- Key (键):除权除息日(通常为字符串格式,如
策略代码示例
你可以将以下代码复制到 QMT 的策略编辑器中运行。该示例会在策略初始化时获取并打印指定股票的所有历史复权因子数据。
# -*- coding: gbk -*-
def init(ContextInfo):
# 设定要查询的股票代码
target_stock = '600000.SH' # 浦发银行示例
# 调用接口获取复权因子数据
# 返回的是一个字典,key为日期,value为复权因子
divid_data = ContextInfo.get_divid_factors(target_stock)
print(f"正在获取 {target_stock} 的历史复权因子数据...")
if not divid_data:
print("未获取到复权因子数据,请检查代码是否正确或是否已下载相关数据。")
return
# 遍历并打印数据
# 为了按时间顺序显示,我们可以先对key进行排序
sorted_dates = sorted(divid_data.keys())
for date in sorted_dates:
factor = divid_data[date]
print(f"除权除息日: {date}, 复权因子: {factor}")
def handlebar(ContextInfo):
# 本示例仅在init中演示数据获取,handlebar中无需操作
pass
注意事项
- 数据补充:虽然复权因子通常属于基础数据,但在进行回测或实盘前,建议在 QMT 客户端的【数据管理】界面中,确保已下载该品种的日线数据和基础信息,以保证数据的完整性。
- 复权因子的用途:
- 复权因子主要用于计算复权价格。
- 前复权价格 = 价格 * (当前复权因子 / 历史某日复权因子) (注:具体计算方式取决于平台定义的基准点,QMT内部计算复权行情时会自动处理,此接口主要用于用户自定义计算)。
- 返回值类型:返回的字典是无序的,如果需要按时间查看历史演变,建议像示例代码中一样对 Keys 进行排序。
Q&A
Q: ContextInfo.get_divid_factors 返回的字典为空是什么原因?
A: 可能有两个原因:一是该股票历史上确实没有分红送股记录;二是本地缺少该股票的基础财务或除权数据,请尝试在客户端“数据管理”中补充下载该股票的数据。
Q: 这个接口能获取到具体的分红金额(每股派息)吗?
A: 不能。get_divid_factors 仅返回日期和计算后的复权因子数值。如果需要获取具体的“每10股派多少元”或“每10股送多少股”的详细分红方案,需要使用财务数据接口 ContextInfo.get_financial_data 查阅相关的财务报表字段,或者通过 ContextInfo.get_market_data_ex 获取 l2quoteaux (Level2行情快照指标) 中的相关除权信息(如果有)。
Q: 如何在获取行情时直接使用复权后的价格,而不是自己计算?
A: 在使用 ContextInfo.get_market_data_ex 或 ContextInfo.get_history_data 获取行情时,可以直接设置参数 dividend_type。例如设置 dividend_type='front' 即可直接获得前复权价格,无需手动调用 get_divid_factors 进行计算。