VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 93
声望: 14

https://www.vnpy.com/forum/topic/3751?page=2

这两个问题,会不会是同一个问题??

Member
avatar
加入于:
帖子: 93
声望: 14

在ib_gateway.py中加入print

    def historicalData(self, reqId: int, ib_bar: IbBarData):
        """
        Callback of history data update.
        """
        print(ib_bar.date)   #就是这里加入
        dt = datetime.strptime(ib_bar.date, "%Y%m%d %H:%M:%S")
        dt = self.local_tz.localize(dt)

        bar = BarData(
            symbol=self.history_req.symbol,
            exchange=self.history_req.exchange,
            datetime=dt,
            interval=self.history_req.interval,
            volume=ib_bar.volume,
            open_price=ib_bar.open,
            high_price=ib_bar.high,
            low_price=ib_bar.low,
            close_price=ib_bar.close,
            gateway_name=self.gateway_name
        )

        self.history_buf.append(bar)

然后运行后:

ERROR -1 2106 HMDS data farm connection is OK:ushmds
ERROR -1 2158 Sec-def data farm connection is OK:secdefhk
2021-03-09 16:30:00
Exception in thread Thread-4:
Traceback (most recent call last):
  File "C:\vnstudio\lib\threading.py", line 917, in _bootstrap_inner
    self.run()
  File "C:\vnstudio\lib\threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "C:\vnstudio\lib\site-packages\vnpy\gateway\ib\ib_gateway.py", line 833, in run
    self.decoder.interpret(fields)
  File "C:\vnstudio\lib\site-packages\ibapi\decoder.py", line 1280, in interpret
    handleInfo.processMeth(self, iter(fields))
  File "C:\vnstudio\lib\site-packages\ibapi\decoder.py", line 517, in processHistoricalDataMsg
    self.wrapper.historicalData(reqId, bar)
  File "C:\vnstudio\lib\site-packages\vnpy\gateway\ib\ib_gateway.py", line 606, in historicalData
    dt = datetime.strptime(ib_bar.date, "%Y%m%d %H:%M:%S")
  File "C:\vnstudio\lib\_strptime.py", line 578, in _strptime_datetime
    tt, fraction, gmtoff_fraction = _strptime(data_string, format)
  File "C:\vnstudio\lib\_strptime.py", line 359, in _strptime
    (data_string, format))
ValueError: time data '20210309' does not match format '%Y%m%d %H:%M:%S'

20210309

后面的都是一样的,但多了这一行
2021-03-09 16:30:00
这是我设定的开始时间。

Member
avatar
加入于:
帖子: 93
声望: 14


print(ib_bar)
输出的内容变成了

2021-03-12 16:25:05.089920  服务器时间: 2021-03-12 16:25:02.000000
2021-03-09 16:30:00
Date: 20210309, Open: 64.810000, High: 64.950000, Low: 63.630000, Close: 64.010000, Volume: 187650, Average: 64.272000, BarCount: 81660

怎么感觉我想要的是分钟数据,他给了我日线数据??

Member
avatar
加入于:
帖子: 93
声望: 14

我明白了,是我把interval=Interval.MINUTE
参数给错了。

但是,当我要求分钟数据的时候

Date: 20210311  05:53:00, Open: 64.680000, High: 64.690000, Low: 64.640000, Close: 64.650000, Volume: 108, Average: 64.662000, BarCount: 57
Date: 20210311  05:54:00, Open: 64.650000, High: 64.670000, Low: 64.650000, Close: 64.660000, Volume: 65, Average: 64.659000, BarCount: 30
Date: 20210311  05:55:00, Open: 64.660000, High: 64.660000, Low: 64.630000, Close: 64.640000, Volume: 117, Average: 64.645000, BarCount: 50
Date: 20210311  05:56:00, Open: 64.650000, High: 64.670000, Low: 64.630000, Close: 64.650000, Volume: 83, Average: 64.652000, BarCount: 45
Date: 20210311  05:57:00, Open: 64.660000, High: 64.660000, Low: 64.640000, Close: 64.640000, Volume: 38, Average: 64.651000, BarCount: 35
Date: 20210311  05:58:00, Open: 64.650000, High: 64.670000, Low: 64.640000, Close: 64.660000, Volume: 52, Average: 64.655000, BarCount: 36
Date: 20210311  05:59:00, Open: 64.660000, High: 64.710000, Low: 64.660000, Close: 64.690000, Volume: 82, Average: 64.682000, BarCount: 31
[BarData(gateway_name='IB', symbol='CL-20210322-USD-FUT', exchange=<Exchange.NYMEX: 'NYMEX'>, datetime=datetime.datetime(2021, 3, 9, 22, 30, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>), interval=<Interval.MINUTE: '1m'>, volume=1527, open_interest=0, open_price=64.81, high_price=64.81, low_price=64.71, close_price=64.75), BarData(gateway_name='IB', symbol='CL-20210322-USD-FUT', exchange=<Exchange.NYMEX: 'NYMEX'>, datetime=datetime.datetime(2021, 3, 9, 22, 31, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>), interval=<Interval.MINUTE: '1m'>, volume=2061, open_interest=0, open_price=64.74, high_price=64.75, low_price=64.58, close_price=64.65), BarData(gateway_name='IB', symbol='CL-20210322-USD-FUT', exchange=<Exchange.NYMEX: 'NYMEX'>, datetime=datetime.datetime(2021, 3, 9, 22, 32, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>), interval=<Interval.MINUTE: '1m'>, volume=1064, open_interest=0, open_price=64.65, high_price=64.69, low_price=64.6, close_price=64.65), BarData(gateway_name='IB', symbol='CL-20210322-USD-FUT', exchange=<Exchange.NYMEX: 'NYMEX'>, datetime=datetime.datetime(2021, 3, 9, 22, 33, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>), interval=<Interval.MINUTE: '1m'>, volume=1233, open_interest=0, open_price=64.63, high_price=64.64, low_price=64.52, close_price=64.52), BarData(gateway_name='IB', symbol='CL-20210322-USD-FUT', exchange=<Exchange.NYMEX: 'NYMEX'>, datetime=datetime.datetime(2021, 3, 9, 22, 34, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>), interval=<Interval.MINUTE: '1m'>, volume=1053, open_interest=0, open_price=64.52, high_price=64.58, low_price=64.51, close_price=64.53), BarData(gateway_name='IB',

5点59分钟之前的数据是整齐的,到后面也就是今天开盘,数据变了

回到
https://www.vnpy.com/forum/topic/3751?page=2

这个问题了。

看起来当天的数据和历史数据是不同的,采用了不同的数据结构。

该咋办???

Member
avatar
加入于:
帖子: 93
声望: 14

我弄错了,后面的数据并不是今日的数据,后面的数据和前面的是一样的,前面的数据可能是从后面的数据中提取出来的。这么看来,还是没有当日的一分钟数据。我还以为把后面的数据处理一下就能够解决这个问题呢!!

Member
avatar
加入于:
帖子: 93
声望: 14

又试了一下外汇,是有当日的一分钟数据的。


start = datetime.strptime("2021-03-10 16:30:00", "%Y-%m-%d %H:%M:%S")
end = datetime.strptime("2021-03-12 19:30:00", "%Y-%m-%d %H:%M:%S")
print(start)
historyreq = HistoryRequest(
        symbol="EUR-USD-CASH",
        exchange=Exchange.IDEALPRO,
        start=start,
        end=end,
        interval=Interval.MINUTE
)

bardatalist = engine.main_engine.query_history(historyreq,"IB")
print(bardatalist)

结果是:

Date: 20210312  19:01:00, Open: 1.191755, High: 1.191815, Low: 1.191705, Close: 1.191715, Volume: -1, Average: -1.000000, BarCount: -1 

Date: 20210312  19:02:00, Open: 1.191715, High: 1.191755, Low: 1.191615, Close: 1.191615, Volume: -1, Average: -1.000000, BarCount: -1 

Date: 20210312  19:03:00, Open: 1.191615, High: 1.191760, Low: 1.191585, Close: 1.191760, Volume: -1, Average: -1.000000, BarCount: -1 

Date: 20210312  19:04:00, Open: 1.191760, High: 1.191815, Low: 1.191725, Close: 1.191760, Volume: -1, Average: -1.000000, BarCount: -1 

Date: 20210312  19:05:00, Open: 1.191760, High: 1.191930, Low: 1.191760, Close: 1.191905, Volume: -1, Average: -1.000000, BarCount: -1 

[BarData(gateway_name='IB', symbol='EUR-USD-CASH', exchange=<Exchange.IDEALPRO: 'IDEALPRO'>, datetime=datetime.datetime(2021, 3, 11, 6, 15, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>), interval=<Interval.MINUTE: '1m'>, volume=-1, open_interest=0, open_price=1.19272, high_price=1.192755, low_price=1.191865, close_price=1.192745), BarData(gateway_name='IB', symbol='EUR-USD-CASH', exchange=<Exchange.IDEALPRO: 'IDEALPRO'>, datetime=datetime.datetime(2021, 3, 11, 6, 16, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>), interval=<Interval.MINUTE: '1m'>, volume=-1, open_interest=0, open_price=1.192745, high_price=1.19284, low_price=1.192745, close_price=1.19281), BarData(gateway_name='IB', symbol='EUR-USD-CASH', exchange=<Exchange.IDEALPRO: 'IDEALPRO'>, datetime=datetime.datetime(2021, 3, 11, 6, 17, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>), interval=<Interval.MINUTE: '1m'>, volume=-1, open_interest=0, open_price=1.19281, high_price=1.19283, low_price=1.19281, close_price=1.192825), BarData(gateway_name='IB', symbol='EUR-USD-CASH', exchange=<Exchange.IDEALPRO: 'IDEALPRO'>, datetime=datetime.datetime
Member
avatar
加入于:
帖子: 12
声望: 0

print(ib_bar.date) #就是这里加入
----加了这一行,
好像还是读不了数据
信息通知,代码:321,内容: Error validating request.-'bT' : cause - Date formatting selection of 0 rejected.
跟这个贴子https://www.vnpy.com/forum/topic/3751-qing-jiao-xia-zen-yang-ibying-tou-li-esde-li-shi-shu-ju?page=1
下载数据量0条一样的。

Member
avatar
加入于:
帖子: 337
声望: 27

majeste wrote:

print(ib_bar.date) #就是这里加入
----加了这一行,
好像还是读不了数据
信息通知,代码:321,内容: Error validating request.-'bT' : cause - Date formatting selection of 0 rejected.
跟这个贴子https://www.vnpy.com/forum/topic/3751-qing-jiao-xia-zen-yang-ibying-tou-li-esde-li-shi-shu-ju?page=1
下载数据量0条一样的。
原帖的问题是因为使用的商品合约代码不对,可以检查一下合约代码。

Member
avatar
加入于:
帖子: 12
声望: 0

青青子荆 wrote:

majeste wrote:

print(ib_bar.date) #就是这里加入
----加了这一行,
好像还是读不了数据
信息通知,代码:321,内容: Error validating request.-'bT' : cause - Date formatting selection of 0 rejected.
跟这个贴子https://www.vnpy.com/forum/topic/3751-qing-jiao-xia-zen-yang-ibying-tou-li-esde-li-shi-shu-ju?page=1
下载数据量0条一样的。
原帖的问题是因为使用的商品合约代码不对,可以检查一下合约代码。
ok,我这边代码没问题。

Member
avatar
加入于:
帖子: 337
声望: 27

请贴一下完整的报错信息,可以打印一下HistoryRequest的start和end time比对一下
majeste wrote:

青青子荆 wrote:

majeste wrote:

print(ib_bar.date) #就是这里加入
----加了这一行,
好像还是读不了数据
信息通知,代码:321,内容: Error validating request.-'bT' : cause - Date formatting selection of 0 rejected.
跟这个贴子https://www.vnpy.com/forum/topic/3751-qing-jiao-xia-zen-yang-ibying-tou-li-esde-li-shi-shu-ju?page=1
下载数据量0条一样的。
原帖的问题是因为使用的商品合约代码不对,可以检查一下合约代码。
ok,我这边代码没问题。

Member
avatar
加入于:
帖子: 12
声望: 0

青青子荆 wrote:

请贴一下完整的报错信息,可以打印一下HistoryRequest的start和end time比对一下
majeste wrote:

青青子荆 wrote:

majeste wrote:

print(ib_bar.date) #就是这里加入
----加了这一行,
好像还是读不了数据
信息通知,代码:321,内容: Error validating request.-'bT' : cause - Date formatting selection of 0 rejected.
跟这个贴子https://www.vnpy.com/forum/topic/3751-qing-jiao-xia-zen-yang-ibying-tou-li-esde-li-shi-shu-ju?page=1
下载数据量0条一样的。
原帖的问题是因为使用的商品合约代码不对,可以检查一下合约代码。
ok,我这边代码没问题。
2021-04-12 17:30:46.869621 信息通知,代码:2106,内容: HMDS data farm connection is OK:ushmds
2021-04-12 17:30:46.869621 信息通知,代码:2158,内容: Sec-def data farm connection is OK:secdefhk
ERROR 3 321 Error validating request.-'bT' : cause - Historical data requested duration is invalid.
2021-04-12 17:30:46.877448 服务器时间: 2021-04-12 17:30:45.000000
2021-04-12 17:30:46.878418 信息通知,代码:321,内容: Error validating request.-'bT' : cause - Historical data requested duration is invalid.

代码如下,从楼上抄的基本上:
req1 = SubscribeRequest("GC-20210628-USD-FUT", Exchange.NYMEX) # 创建行情订阅
engine.main_engine.subscribe(req1, "IB")

start = datetime.strptime("2021-4-8 16:30:00", "%Y-%m-%d %H:%M:%S")
end = datetime.strptime("2021-4-9 17:30:00", "%Y-%m-%d %H:%M:%S")
print(start)
historyreq = HistoryRequest(
symbol="GC-20210628-USD-FUT",
exchange=Exchange.NYMEX,
start=start,
end = end,
interval=Interval.MINUTE
)

bardatalist = engine.main_engine.query_history(historyreq,"IB")
print(bardatalist)

Member
avatar
加入于:
帖子: 12
声望: 0

改成这样是这个错误
start = datetime.strptime("2021-4-11 11:30:00", "%Y-%m-%d %H:%M:%S")
end = datetime.strptime("2021-4-12 17:30:00", "%Y-%m-%d %H:%M:%S")
2021-04-11 11:30:00

2021-04-12 18:10:33.027355 信息通知,代码:321,内容: Error validating request.-'bT' : cause - Date formatting selection of 0 rejected.

Member
avatar
加入于:
帖子: 93
声望: 14

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui

参考一下这个问题,有个参数需要修改。
否则得不到非交易时段的数据。

Member
avatar
加入于:
帖子: 93
声望: 14

https://www.vnpy.com/forum/topic/6123-ying-tou-jie-kou-5fen-zhong-xian-bing-xian-shi-tu-biao

下载数据的代码,可以参考这个帖子。

Member
avatar
加入于:
帖子: 12
声望: 0

黄裳 wrote:

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui

参考一下这个问题,有个参数需要修改。
否则得不到非交易时段的数据。
好的,谢谢,我改完之后再来汇报

Member
avatar
加入于:
帖子: 12
声望: 0

majeste wrote:

黄裳 wrote:

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui

参考一下这个问题,有个参数需要修改。
否则得不到非交易时段的数据。
好的,谢谢,我改完之后再来汇报

问题解决,按照黄裳的建议

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui?page=1#pid21592
然后还有本帖,就可以解决问题。

Member
avatar
加入于:
帖子: 12
声望: 0

majeste wrote:

majeste wrote:

黄裳 wrote:

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui

参考一下这个问题,有个参数需要修改。
否则得不到非交易时段的数据。
好的,谢谢,我改完之后再来汇报

问题解决,按照黄裳的建议

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui?page=1#pid21592
然后还有本帖,就可以解决问题。

不过 interval=Interval.DAILY还是会继续报错,下载日线也仍然会有问题,ValueError: time data '20210322' does not match format '%Y%m%d %H:%M:%S',日线以下的没问题。

Member
avatar
加入于:
帖子: 4618
声望: 284

majeste wrote:

majeste wrote:

majeste wrote:

黄裳 wrote:

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui

参考一下这个问题,有个参数需要修改。
否则得不到非交易时段的数据。
好的,谢谢,我改完之后再来汇报

问题解决,按照黄裳的建议

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui?page=1#pid21592
然后还有本帖,就可以解决问题。

不过 interval=Interval.DAILY还是会继续报错,下载日线也仍然会有问题,ValueError: time data '20210322' does not match format '%Y%m%d %H:%M:%S',日线以下的没问题。

可参考17和20楼。

Member
avatar
加入于:
帖子: 12
声望: 0

xiaohe wrote:

majeste wrote:

majeste wrote:

majeste wrote:

黄裳 wrote:

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui

参考一下这个问题,有个参数需要修改。
否则得不到非交易时段的数据。
好的,谢谢,我改完之后再来汇报

问题解决,按照黄裳的建议

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui?page=1#pid21592
然后还有本帖,就可以解决问题。

不过 interval=Interval.DAILY还是会继续报错,下载日线也仍然会有问题,ValueError: time data '20210322' does not match format '%Y%m%d %H:%M:%S',日线以下的没问题。

请参考17和20楼。
ib_gateway.py里面的625行是这样的,
dt = datetime.strptime(ib_bar.date, "%Y%m%d %H:%M:%S")
从而导致本帖的那段代码报错;
781行是这样的,end_str = end.strftime("%Y%m%d %H:%M:%S"),会在数据日线下载的地方报错。

当设置成不是daily,分钟或者小时线的时候,ib_bar.date的格式没有问题20210423 06:00:00这样的
但是当设置成daily日线的时候,ib_bar.date的格式是20210423这样的,这个是自动生成的格式,没有手动调整的地方,格式不匹配,从而报错。
所以这是twsapi处理的时候日线和其他周期的不一致导致的。

https://www.vnpy.com/forum/topic/3845-qiu-zhu-:cong-ibdu-qu-li-shi-xing-qing-shi-bai-qing-jiao-xia-yuan-yin-ni-duo-xie-~?page=1#pid21512
跟这个一样的。
没想好怎么解决,不过不影响其他周期使用。

Member
avatar
加入于:
帖子: 337
声望: 27

可以写个判断语句。判断当为日线的时候,格式是%Y%m%d,否则为%Y%m%d %H:%M:%S。
majeste wrote:

xiaohe wrote:

majeste wrote:

majeste wrote:

majeste wrote:

黄裳 wrote:

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui

参考一下这个问题,有个参数需要修改。
否则得不到非交易时段的数据。
好的,谢谢,我改完之后再来汇报

问题解决,按照黄裳的建议

https://www.vnpy.com/forum/topic/6097-guan-yu-ying-tou-jie-kou-de-zhong-da-wen-ti-fan-kui?page=1#pid21592
然后还有本帖,就可以解决问题。

不过 interval=Interval.DAILY还是会继续报错,下载日线也仍然会有问题,ValueError: time data '20210322' does not match format '%Y%m%d %H:%M:%S',日线以下的没问题。

请参考17和20楼。
ib_gateway.py里面的625行是这样的,
dt = datetime.strptime(ib_bar.date, "%Y%m%d %H:%M:%S")
从而导致本帖的那段代码报错;
781行是这样的,end_str = end.strftime("%Y%m%d %H:%M:%S"),会在数据日线下载的地方报错。

当设置成不是daily,分钟或者小时线的时候,ib_bar.date的格式没有问题20210423 06:00:00这样的
但是当设置成daily日线的时候,ib_bar.date的格式是20210423这样的,这个是自动生成的格式,没有手动调整的地方,格式不匹配,从而报错。
所以这是twsapi处理的时候日线和其他周期的不一致导致的。

https://www.vnpy.com/forum/topic/3845-qiu-zhu-:cong-ibdu-qu-li-shi-xing-qing-shi-bai-qing-jiao-xia-yuan-yin-ni-duo-xie-~?page=1#pid21512
跟这个一样的。
没想好怎么解决,不过不影响其他周期使用。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】