测试代码:
import pandas as pd
from tqdm import tqdm
from xtquant import xtdata
import time
STOCK_LIST = xtdata.get_stock_list_in_sector('沪深A股')
INDEX_LIST = xtdata.get_stock_list_in_sector('沪深指数')
ETF_LIST = xtdata.get_stock_list_in_sector('沪深ETF')
ALL_CODE = INDEX_LIST
# 按装订区域中的绿色按钮以运行脚本。
if __name__ == '__main__':
start = time.time()
# xtdata.download_history_data2数据量大时会超时
for code in tqdm(ALL_CODE):
xtdata.download_history_data(code,'1d')
df_d = xtdata.get_market_data_ex([],stock_list=ALL_CODE)
df_l = [df.assign(stock_code=code,name = xtdata.get_instrument_detail(stock_code=code)['InstrumentName']) for code,df in df_d.items()]
df = pd.concat(df_l,axis=0).dropna()
print(f'Elapsed time: {time.time()-start}')
dataframe经过volumn排序数据视图(xtdata):

实际来看,国证基金(399379.SZ)在2024年12月10日的实际日线数据,实际volume大约为21.51亿,在同花顺可以看到:

那么xtdata获取到的却是-2143838023,我觉得可能是工程师在设计数据类型的时候使用的是int32类型,int32的取值范围是-2,147,483,648 到 2,147,483,647,如果超过就会导致整数溢出,那么因为超出的不多就刚好是-21亿左右。
基于这个猜想后来我又做了个测试:
对已经处理好的datafeame进行一下操作,目的就是看看有没有比较接近+-21亿或者0的,那么成交量应该是21亿的整数倍:
df = df.loc[(df['volume'] > -50000000) & (df['volume'] < 0),:]


我们来分析 科创ESG(000691.SH)
奇怪的是,明明当天的成交量远小于int32范围,为什么还是负数?但是总之,volume为负数肯定是不正确的。不知道大家的环境是否有类似问题,欢迎交流。 |