3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在使用 JoinQuant (聚宽) 平台获取财务数据时,发现 valuation.market_cap 得到的市值与同花顺、东方财富等实盘软件不一致,通常是由以下几个原因造成的:
JoinQuant 平台中 valuation.market_cap(总市值)和 valuation.circulating_market_cap(流通市值)的单位都是“亿元”。而实盘软件上显示的单位可能是“元”、“万元”或“亿元”。请先检查是否是因为单位换算导致了视觉上的数值差异。
get_fundamentals(q, '2022-04-22') 获取的是 2022-04-22 收盘后 的静态市值数据。如果您在交易时间段内(盘中)与实盘软件对比,实盘软件显示的是根据最新股价实时变动的动态市值,两者自然不同。date 参数,get_fundamentals 默认获取的是 context.current_dt 的前一天的数据(因为当天的财务数据要在收盘后才能确定)。市值的基本计算公式是:总市值 = 总股本 × 收盘价。
不同数据提供商对“总股本”的定义可能存在细微差别:
市值计算使用的是不复权的实际收盘价。如果您在对比时,参考了前复权或后复权的价格去手动计算市值,就会产生误差。
您可以提取当天的不复权收盘价和总股本,手动相乘来验证 JoinQuant 的市值数据逻辑:
from jqdata import *
# 1. 获取市值数据和总股本数据 (单位:万股)
q = query(valuation.code, valuation.market_cap, valuation.capitalization).filter(valuation.code=='300143.XSHE')
df_val = get_fundamentals(q, '2022-04-22')
# 2. 获取当天的真实收盘价 (不复权)
close_price = get_price('300143.XSHE', end_date='2022-04-22', count=1, fields=['close'], fq=None)['close'][0]
# 3. 提取数据
market_cap_jq = df_val['market_cap'][0] # 聚宽给出的总市值 (亿元)
capitalization = df_val['capitalization'][0] # 总股本 (万股)
# 4. 手动计算市值 (亿元) = 总股本(万股) * 收盘价(元) / 10000
calculated_market_cap = capitalization * close_price / 10000
print(f"聚宽直接获取的市值: {market_cap_jq:.4f} 亿元")
print(f"手动计算的市值: {calculated_market_cap:.4f} 亿元")
通过上述代码,您可以清晰地看到 JoinQuant 内部市值的计算逻辑。如果手动计算的结果与 market_cap 一致,说明数据逻辑是自洽的,差异仅仅来源于与外部软件的计算口径或单位不同。