3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
这不是一个 Bug,而是由于两个函数在处理**复权方式(dividend_type)**时的默认行为不同,结合特定交易品种(如高分红的国债ETF)在长周期下的复权累积效应所导致的现象。
复权参数的默认值差异:
get_market_data_ex:在 QMT/xtquant 中,该函数通常用于获取处理后的行情数据,其复权参数 dividend_type 默认可能为 'front'(前复权)或 'follow'(跟随主图设置)。get_local_data:该函数主要用于直接读取本地落地的原始切片数据,其复权参数 divid_type 默认为 'none'(不复权)。交易品种的特殊性(高分红):
511010.SH(国债ETF)是一个分红非常频繁的品种。front),历史价格需要扣除这6年间所有的分红。由于分红次数多、累计金额大,会导致2018年的前复权价格被大幅度向下调整,看起来非常“异常”(甚至在某些极端情况下可能出现负数),这与不复权的原始价格差异巨大。为了让 get_market_data_ex 获取到与 get_local_data 一致的原始(不复权)数据,您只需要在调用 get_market_data_ex 时,显式指定 dividend_type='none' 即可。
from xtquant import xtdata
code = '511010.SH'
start_time = '20181101'
# 确保本地有数据
xtdata.download_history_data(code, period='1m', start_time=start_time)
# 使用 get_market_data_ex 进行数据获取,显式指定不复权:dividend_type='none'
bars_ex = xtdata.get_market_data_ex(
stock_list=[code],
period='1m',
count=-1,
start_time=start_time,
dividend_type='none' # 关键修改点
)
print("get_market_data_ex (不复权) 数据:")
print(bars_ex[code].head() if not bars_ex[code].empty else "无数据")
# 使用 get_local_data 进行数据获取 (默认 divid_type='none')
bars_local = xtdata.get_local_data(
stock_list=[code],
period='1m',
count=-1,
start_time=start_time
)
print("\nget_local_data 数据:")
print(bars_local[code].head() if not bars_local[code].empty else "无数据")
在量化策略开发中,尤其是处理 ETF、高股息股票等品种的长周期历史数据时,务必明确指定复权方式。通常在计算收益率、构建技术指标时推荐使用前复权('front')或等比前复权('front_ratio'),而在进行撮合撮合或查看真实历史成交价时使用不复权('none')。