yutiansut / QUANTAXIS

QUANTAXIS 支持任务调度 分布式部署的 股票/期货/期权 数据/回测/模拟/交易/可视化/多账户 纯本地量化解决方案
https://yutiansut.github.io/QUANTAXIS/
MIT License
8.15k stars 2.96k forks source link

QA_fetch_stock_min_adv.to_qfq()的一个BUG #1523

Open lifg2000 opened 4 years ago

lifg2000 commented 4 years ago

您使用的QUANTAXIS版本号是什么?

1.9.11


## 您需要反馈的问题

QA.QA_fetch_stock_min_adv(['600387'],'2019-09-01','2020-04-30','1min').to_qfq(),如果出现'use old model qfq',则数据正常;如不出现提示,则数据不正常,前面与后面都有空白行。不正常的情况出现次数50%左右(我不知道是否是我个人电脑问题。。。。) 经查,QADataStruct-->L354~360行中date获取的日期数据不是按顺序排列的(但date输出时为csv格式时查看是正常的),导致adj中起始、终止时间并非输入日期的区间。 此外QA_fetch_stock_day_adv也有类似情况。 1、能否将date按顺序排列; 2、全部采用‘use old model qfq’是否存在什么问题; 3、还有什么其他好方法。

## 感谢您的反馈 如有意见和建议,请在此说明:
## 您的联系方式(QQ/EMAIL)

群里:双鱼694085608

lifg2000 commented 4 years ago

另外:_QA_fetch_stock_adj用到了‘stock_adj’数据,而我这里‘stock_adj’这个数据只到4月1日。这个类别的数据是save哪个可以得到?

kite8 commented 4 years ago

计算复权需要用到除权除息和每日行情数据 --> save stock_xdxr

lifg2000 commented 4 years ago

计算复权需要用到除权除息和每日行情数据 --> save stock_xdxr

xdxr是数据保存了并更新的。我也感到很困惑。群里问了下,没有同样的问题。改了源代码,sorted了数据就正常了。

kite8 commented 4 years ago

计算复权需要用到除权除息和每日行情数据 --> save stock_xdxr

xdxr是数据保存了并更新的。我也感到很困惑。群里问了下,没有同样的问题。改了源代码,sorted了数据就正常了。

你有可以复现问题的代码么,比如取什么代码的数据会出现复权问题

lifg2000 commented 4 years ago

你有可以复现问题的代码么,比如取什么代码的数据会出现复权问题

1.输入代码如下:

stock_data1 = QA.QA_fetch_stock_min_adv(['600387'],'2019-09-01','2020-04-30','1min')
stock_data1.to_csv('0001.csv')
stock_data2 = stock_data1.to_qfq()
stock_data2.to_csv('0002.csv')

用来比较'0001.csv'和'0002.csv'不复权和前复权两类数据。

2.代码执行后有错误

有时出现如下代码

'DataFrame' object has no attribute 'date' use old model qfq

则此时不复权和前复权的两个CSV数据正常。

3.代码执行后无错误

'0001.csv'中有‘2019-09-01’~‘2020-04-30’阶段所有数据, '0002.csv'仅中有‘2019-10-09’~‘2020-01-03’阶段的数据,前复权数据缺失。

4.前复权数据不正常处理方式

将QADataStruct.py-->to_qfq,L354 date = self.date,修改为date = sorted(self.date),则数据正常。

5.数据不正常原因

数据应该是按顺序排列的,因为输出self,看到其date都是按序排列。但是 date = self.date的序列不正常(原因未明),导致date[0]、date[-1]取值不是数据首尾。

6.代码执行时为何会出现上述2.或3.两种不同的情况?

xiaopge commented 4 years ago

image 我试了一下你的代码,我这里并没出现你说的问题,是不是本地的原因产生的