问题描述
请问1,finance.STK_EXCHANGE_TRADE_INFO这个表中的数据是否有科创板,查看后没有发现,那是否有其他方式查看科创板数据?
>
>
请问2,finance.STK_EXCHANGE_TRADE_INFO这个表9月19日上海市场成交金额是2744.99,深证成交金额是3615.35,两市总成交金额5360.34
>
同时查看通达信,上海市场成交金额是2741,深证成交金额是3609,两市总成交金额6360(仅能查看到这个精确度)
>
其他日期的金额也是不相同,请问这里面有什么规则性的统计规则差异吗?
解决方案
针对您在 JoinQuant 聚宽平台使用 finance.STK_EXCHANGE_TRADE_INFO 表时遇到的疑问,解答如下:
问题 1:关于科创板成交量数据的获取
finance.STK_EXCHANGE_TRADE_INFO 表主要记录的是沪深交易所整体的宏观交易概况。如果该表中没有单独列出科创板的细分数据,通常是因为上交所的数据已经将其汇总在内,或者该表的设计未针对科创板进行独立拆分。
获取科创板数据的替代方式:
-
通过科创50指数获取整体概况:
您可以直接获取科创50指数(代码:000688.XSHG)的行情数据,这能代表科创板核心资产的成交情况。df = get_price('000688.XSHG', start_date='2023-09-19', end_date='2023-09-19', fields=['volume', 'money']) print(df) -
汇总所有科创板个股数据(最精确):
如果您需要整个科创板的精确成交金额,可以通过get_all_securities获取所有科创板股票(代码以688开头),然后获取它们的money(成交额)进行求和。# 获取所有股票 all_stocks = get_all_securities(['stock']).index.tolist() # 筛选科创板股票 star_stocks = [code for code in all_stocks if code.startswith('688')] # 获取某日成交额并求和 df = get_price(star_stocks, start_date='2023-09-19', end_date='2023-09-19', fields=['money'], panel=False) total_money = df['money'].sum() print("科创板总成交额:", total_money)
问题 2:关于聚宽数据与通达信等软件的统计口径差异
您观察到 finance.STK_EXCHANGE_TRADE_INFO 中的数据与通达信软件显示的两市总成交金额存在差异,这在量化数据源和传统行情软件之间是非常常见的现象。主要由以下统计规则和口径差异导致:
-
包含的证券品种不同:
- 聚宽(JoinQuant):该表可能仅严格统计了 A股股票 的成交金额,或者剔除了某些特定类型的证券。
- 通达信等行情软件:通常显示的“两市总成交额”不仅包含A股,还可能包含了 B股、场内基金(ETF/LOF)、债券、甚至部分期权 的成交额。例如,通达信的总成交额6360与聚宽的5360相差约1000亿,这部分差额极有可能是场内基金和债券的成交量。
-
大宗交易与盘后交易的计算:
- 某些数据源在日终统计时会包含大宗交易、盘后固定价格交易(如科创板的盘后交易),而另一些数据源可能只统计连续竞价和集合竞价时段的成交额。
-
复权与精度处理:
- 宏观统计表的数据来源通常是交易所的每日盘后快报,不同数据商在接收和清洗这些快报时,对单位换算(如万元、亿元)的四舍五入处理可能存在微小差异。
建议:
在量化回测中,如果您需要计算全市场的真实成交额用于策略信号(如判断市场热度),建议统一使用聚宽的个股 money 字段进行横截面求和。这样不仅能保证与您策略交易的标的完全对应,还能避免因宏观统计口径不明导致的信号偏差。