下面,我对xtdata.get_market_data_ex()函数进行了分析,发现内部也并没有对int数据类型进行显式的预处理。
xtdata.get_market_data_ex()在获取日线(period = "1d")数据时,流程大概是这样的:
xtdata.get_market_data_ex() ->
内部通过period分支将函数指向_get_market_data_ex_ori_221207()
if spec_period in {'1m', '5m', '15m', '30m', '60m', '1h', '1d', '1w', '1mon', '1q', '1hy', '1y'}:
return _get_market_data_ex_ori_221207(field_list, stock_list, spec_period, start_time, end_time, count, dividend_type, fill_data)
然后在_get_market_data_ex_ori_221207()函数内部最终向服务器请求的时client.get_market_data3()
通过转向该函数的声明可以发现,该函数是经过pybind c++静态编译完成的,我们无法查看原始代码和断点测试,但可以知道,返回的数据是buffer。
ret = client.get_market_data3(field_list, stock_list, period, start_time, end_time, count, dividend_type, fill_data, 'v4', enable_read_from_local,
enable_read_from_server, debug_mode, data_dir)
result = {}
for stock, index, npdatas in ret:
data = {field: np.frombuffer(b, fi) for field, fi, b in npdatas}
result[stock] = pd.DataFrame(data=data, index=index)
return result

那么也就是说,在数据返回时,经过np.frombuffer()解析过后的数据,就是我们可以查看到的最优先级的数据了,我在更新字典前,就是for循环内部data声明后,此处进行了断点测试,观察data当中的数组

在此时数据就已经是负数了,下面可以看到volumn的数据类型是int64。

所以,应该是这一部分qmt的数据源本身就是有问题的,而不是环境问题。
大家有什么看法?欢迎交流
python 3.12
xtquant 250516