VeighNa量化社区
你的开源社区量化交易平台
jameslai's Avatar
Member
离线
36 帖子
声望: 0

搞定了。
原来是合约代码的问题;订阅的时候只需要指定几月份的合约,无需指定日期。获取数据的时候的合约需要指定日期。我在tws里面看到是截止日期是19日,不知为何实际上是16日。改了就好了

这个我是故意的,因为我记得下载数据的合约要加上具体日期。
不过两种格式我都试过,都不行的

从我上面帖子的第一站图,是否可以证明已经订阅成功了?(行情已经显示出来)

我已经购买了数据,也连接了(如图),但是还是下载不了历史数据。我看代码种好像没有获取到合约,如下,代码应该是走到else里面去了。那么为啥我scribe了 ES这个合约,contract 却没有呢? 是什么动作才能i将合约添加到合约列表呢?

   def download_bar_data():
        vt_symbol: str = f"{symbol}.{exchange.value}"
        print("engine: query_bar_history:",vt_symbol)

        contract: Optional[ContractData] = self.main_engine.get_contract(vt_symbol)
        print("ContractData:", self.main_engine.get_contract(vt_symbol))
        if contract and contract.history_data:
            data: List[BarData] = self.main_engine.query_history(
                req, contract.gateway_name
            )
        # Otherwise use datafeed to query data
        else:
            print("engine: query_bar_history")

description

description

我看到文档上说支持如下7种data feed,这些和IB有关么?现在我是默认使用了RQData(提示“找不到数据服务驱动vnpy_,使用默认的RQData数据服务”),但是如何直接从IB获取数据呢?应该用哪个feed?谢谢

RQData
Udata
TuShare
TQSDK
Wind
iFinD
Tinysoft

解释的很清楚。那么,像这些vnpy_rqdata的代码,哪里能看到呢? 如果看不到,那算是半开源了?

改了下可以下载了,多谢!

description
如图,下载不了连续合约的数据。 我用的合约是: ES-USD-CONTFUT
单个月份合约是可以下载的。
我看到有个帖子(https://www.vnpy.com/forum/topic/4256-guan-yu-vnpyzhong-lian-xu-he-yue-dai-ma-gui-ze-de-zi-xun)说是支持的,但是我这里是不行。
合约订阅也不行,会程序报错,因为这里没有定义“CONTFUT”
PRODUCT_IB2VT = {
"STK": Product.EQUITY,
"CASH": Product.FOREX,
"CMDTY": Product.SPOT,
"FUT": Product.FUTURES,
"OPT": Product.OPTION,
"FOT": Product.OPTION
}

想问问这种情况大体是什么思路。
开仓失败的时候,我可以放弃开仓。但平仓失败的时候,我总不能放弃平仓吧? 如果平仓失败,下一根bar继续平仓,还是可能失败。似乎无解了?

实盘也有类似问题。

1分钟K线有缺失的时候(比如休市半小时,那么合成30min barj),合成也有问题,见这个帖子:
https://www.vnpy.com/forum/topic/6523-tickhe-cheng-de-barshu-ju-que-shao-dang-ri-zui-hou-yi-gen-kxian-yi-ji-hui-ce-shi-pan-shu-ju-zhou-qi-bu-yi-zhi-wen-ti

原来是由于IB数据有“休市”引起的。
如下图,5:15-5:30之间是不交易的,所以不会有5:29这一根1 minute K线,那么最后合成的30分钟K线就会缺少一根。请问各位大佬这个问题会修复吗?
description

请问能否打个包?网页上没搞清楚修改部分是哪些

多谢指教。那么这个问题呢?
如果实盘的策略要回测的话,那岂不是只能先在IBAPI下载一分钟的数据来回测,而不能直接使用IBAPI下载的30分钟的数据来回测? 因为策略是用1分钟的bar来合成30分钟的。这样的话,回测显示出来的K线图又是基于一分钟数据的,这个几乎没法看啊。

也就是在实盘中,IB只会有tick事件供我们处理,没有提供bar事件给我们处理?

如图,tick数据合成的30分钟bar的最后一根k线有问题。我记得论坛有人说到过这个问题,这个是有fix吗?
description

另外,如果以30分钟bar为基础来回测策略,我们可以直接在IB接口下载30分钟的bar。
但是在实盘的时候,我们只能用tick数据来合成30分钟bar,然后基于30分钟的bar来些策略。
如果实盘的策略要回测的话,那岂不是只能先在IBAPI下载一分钟的数据来回测,而不能直接使用IBAPI下载的30分钟的数据来回测? 因为策略是用1分钟的bar来合成30分钟的。这样的话,回测显示出来的K线图又是基于一分钟数据的,这个几乎没法看啊。请问各位怎么做的?

应该不是800行代码的问题。 因为我这个log里面已经显示倒数第三个参数是 “1”了。现在报错是为啥这个duration是0??: 'durationStr': '0 D',
log如下:
2021-04-27 22:56:01,087 - client.py[line:88] - INFO: REQUEST reqHistoricalData
{'reqId': 3,
'contract': 2503562790672: 0,ES,FUT,20210618,0.0,,,GLOBEX,,USD,,,False,,combo:,
'endDateTime': '20210427 22:56:01',
'durationStr': '0 D',
'barSizeSetting': '1 min',
'whatToShow': 'TRADES',
'useRTH': 0,
'formatDate': 1,
'keepUpToDate': False,
'chartOptions': []}

如下图,报错如下,说是duration无效,这个是怎么回事?
2021-04-27 22:56:01,087 - client.py[line:88] - INFO: REQUEST reqHistoricalData {'reqId': 3, 'contract': 2503562790672: 0,ES,FUT,20210618,0.0,,,GLOBEX,,USD,,,False,,combo:, 'endDateTime': '20210427 22:56:01', 'durationStr': '0 D', 'barSizeSetting': '1 min', 'whatToShow': 'TRADES', 'useRTH': 0, 'formatDate': 1, 'keepUpToDate': False, 'chartOptions': []}
2021-04-27 22:56:01,087 - client.py[line:77] - INFO: SENDING reqHistoricalData b'\x00\x00\x00W20\x003\x000\x00ES\x00FUT\x0020210618\x000.0\x00\x00\x00GLOBEX\x00\x00USD\x00\x00\x000\x0020210427 22:56:01\x001 min\x000 D\x000\x00TRADES\x001\x000\x00\x00'
2021-04-27 22:56:01,088 - wrapper.py[line:48] - INFO: ANSWER error {'reqId': 3, 'errorCode': 321, 'errorString': "Error validating request:-'bS' : cause - Historical data requested duration is invalid."}
2021-04-27 22:56:01,089 - wrapper.py[line:56] - ERROR: ERROR 3 321 Error validating request:-'bS' : cause - Historical data requested duration is invalid.
description

另外,在用模拟账户准备运行策略的时候,没有地方指定我策略中的一根bar代表的周期啊,比如5分钟还是30分钟,这个系统是怎么弄的呢?

回测的时候(不会真正的发单),平台如何决定交易是否成功呢?

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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