🚀 AI 一键生成 joinquant 策略代码

JoinQuant平台get_price获取ETF价格精度问题详解

joinquant | 发布时间: 2026/5/22
以下内容由 EasyQuant 生成。

问题描述

ETF交易价格的精度不够

用get_price取ETF的交易价格等数据,只能精确到小数点后2位吗?

解决方案

并不是只能精确到小数点后2位。在A股市场中,ETF基金的最小变动价位通常是 0.001元(即小数点后3位),JoinQuant 底层的行情数据是完全支持并保留了这一精度的。

如果您在使用 get_price 获取 ETF 数据时发现只显示了两位小数,通常是由以下几个原因造成的,您可以按照以下方法进行调整:

1. 复权参数(fq)的影响

get_price 函数默认的复权参数是 fq='pre'(前复权)。在进行复权计算时,价格会被乘以复权因子,这可能会导致价格变成复杂的浮点数,或者在某些处理环节被截断。如果您需要获取 ETF 真实的交易盘面价格,建议关闭复权

解决方法:fq 参数设置为 None

# 获取不复权的真实交易价格,保留原始精度
df = get_price('510300.XSHG', start_date='2023-01-01', end_date='2023-01-10', fq=None)
print(df['close'])

2. Pandas DataFrame 的显示设置

get_price 返回的数据格式是 pandas.DataFrame。在 Jupyter Notebook(研究环境)中打印 DataFrame 时,Pandas 默认的显示设置可能为了排版美观,只显示了小数点后 2 位或 4 位,但这仅仅是显示问题,底层数据的精度并没有丢失

解决方法: 修改 Pandas 的全局显示精度设置。

import pandas as pd
# 设置 Pandas 显示小数点后 3 位
pd.set_option('display.precision', 3)

df = get_price('510300.XSHG', count=5, end_date='2023-10-01', fq=None)
print(df)

3. 推荐使用 get_bars 获取高精度数据

对于需要精确到 tick 级别或高精度 bar 数据的场景,JoinQuant 官方更推荐使用 get_bars 函数。get_bars 的数据结构更贴近主流股票软件,且在处理未复权数据时表现非常稳定。

解决方法:

# 使用 get_bars 获取不复权的 ETF 数据
bars = get_bars('510300.XSHG', count=5, unit='1d', fields=['date', 'open', 'close'], fq_ref_date=None, df=True)
print(bars)

总结:
JoinQuant 的 ETF 数据精度是足够的(3位小数)。请确保使用 fq=None(不复权) 来获取真实的盘面交易价格,并检查您的 Pandas 打印设置是否掩盖了真实的数据精度。