问题描述
现在使用如下语句想获取创业板指数的成交金额:
x = get_price('399006.XSHE', start_date='2020-03-06', end_date='2020-03-07', frequency='daily', fields= 'money',skip_paused=True)
得到的结果为:
money
2020-03-06 6.288269e+10
这个数据和实际成交金额是不匹配的,这是因为重复计算了停牌股的成交金额吗?
解决方案
您好!您遇到的数据不匹配问题,并不是因为 skip_paused 参数重复计算了停牌股的成交金额。这里主要存在两个常见的误区:指数定义的混淆和数据单位的理解。
下面为您详细解析:
1. skip_paused 参数对指数无效
在 JoinQuant 的 get_price 函数中,skip_paused 参数的作用是:是否跳过不交易日期(包括停牌、未上市或者退市后的日期)。如果不跳过,停牌时会使用停牌前的数据填充。
但是,这个参数主要是针对个股的。对于股票指数(如创业板指 399006.XSHE)而言,指数本身是由交易所统一计算并发布的,只要市场开市,指数就会有行情数据,不存在“指数停牌”的概念。因此,无论 skip_paused 设置为 True 还是 False,获取到的指数行情数据都是一样的,交易所发布的指数成交额是多少,接口返回的就是多少,不会去底层重新累加成分股。
2. 数据不匹配的真正原因
原因一:混淆了“创业板指”与“创业板整个市场”
您使用的代码是 399006.XSHE,这是创业板指(创业板指数)。
- 创业板指(399006.XSHE):仅仅包含了创业板市场中市值大、流动性好的 100 只代表性股票。您获取到的
6.288269e+10(约 628.8 亿元)正是这 100 只成分股在当天的成交金额之和。 - 创业板综指(399102.XSHE):如果您想看的是整个创业板市场所有股票的总成交金额,您应该获取的是创业板综合指数。
如果您去行情软件上对比,请确认您看的是“创业板指”的成交额,还是整个“创业板”板块的总成交额。
原因二:数据单位是“元”
get_price 返回的 money 字段,其单位是元(RMB)。
您得到的结果 6.288269e+10,科学计数法转换过来就是 62,882,690,000 元,即 628.82 亿元。您可以核对一下同花顺或东方财富等软件上 2020-03-06 这一天“创业板指(399006)”的成交额,应该是完全一致的。
总结与建议代码
如果您确实需要获取整个创业板市场的成交金额,请将代码修改为获取创业板综指(399102.XSHE):
# 获取整个创业板市场(创业板综指)的成交金额
x = get_price('399102.XSHE', start_date='2020-03-06', end_date='2020-03-07', frequency='daily', fields='money')
# 打印结果,并转换为“亿元”方便阅读
print(x / 1e8)
希望这个解答能帮您理清思路!