3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT(迅投量化交易系统)中,ContextInfo.get_history_data 是用于从已设定的股票池中获取历史行情数据的核心接口。为了保证策略回测与实盘信号计算的准确性,理解其**除复权处理(dividend_type)与停牌填充(skip_paused)**参数至关重要。
ContextInfo.get_history_data(len, period, field, dividend_type = 0, skip_paused = True)
'1d'(日线)、'1m'(1分钟线)、'1w'(周线) 等。'open', 'high', 'low', 'close', 'quoter' 等。0。True。dividend_type 参数控制股票因分红、送股、配股等除权除息事件对价格序列的调整方式:
| 参数值 | 复权模式 | 适用场景与区别 |
|---|---|---|
0 |
不复权 (默认) | 保持历史真实撮合价格。适合计算真实交易成本,但价格序列存在分红断层。 |
1 |
向前复权 | 以当前价格为基准平滑调整历史价格。保持最新价格真实,适合日内或近期信号触发计算。 |
2 |
向后复权 | 以上市首日价格为基准向后调整。历史价格连续,适合长期策略回测和技术指标(如 MA、MACD)计算。 |
3 |
等比向前复权 | 按比例平滑历史价格,保持收益率不变,避免前复权可能出现的负价格。 |
4 |
等比向后复权 | 按比例向后平滑调整,保持收益率真实性。 |
skip_paused 参数决定股票在停牌日(或无交易数据日)的数据处理逻辑:
skip_paused = True(默认填充)len 长度保持一致,数据连续无缺失,便于直接进行多因子矩阵运算或指标计算。skip_paused = False(不填充)在编写 QMT 策略时,必须先通过 set_universe 设定股票池,随后即可在 handlebar 中获取调整后的历史行情:
#coding:gbk
def init(ContextInfo):
# 1. 设定股票池
ContextInfo.set_universe(['000001.SZ', '600000.SH'])
def handlebar(ContextInfo):
# 2. 获取包含向前复权、停牌自动填充的最近 5 日收盘价
history_close = ContextInfo.get_history_data(
len=5,
period='1d',
field='close',
dividend_type=1, # 向前复权
skip_paused=True # 停牌自动填充
)
# 遍历获取各股票的数据
for stock, prices in history_close.items():
if len(prices) >= 2:
print(f"{stock} 最新收盘价: {prices[-1]}, 前一日收盘价: {prices[-2]}")
dividend_type=1) 或 向后复权 (dividend_type=2),避免除权缺口导致 MACD、RSI 等技术指标失真。skip_paused=True,确保股票池中所有标的获取到相同长度的数据,避免数组对齐异常。get_history_data 前,请确保已通过 QMT 客户端的【数据管理】补充了完整的历史行情数据。