我看到文档上说支持如下7种data feed,这些和IB有关么?现在我是默认使用了RQData(提示“找不到数据服务驱动vnpy_,使用默认的RQData数据服务”),但是如何直接从IB获取数据呢?应该用哪个feed?谢谢
RQData
Udata
TuShare
TQSDK
Wind
iFinD
Tinysoft
如图,下载不了连续合约的数据。 我用的合约是: 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继续平仓,还是可能失败。似乎无解了?
实盘也有类似问题。
如图,tick数据合成的30分钟bar的最后一根k线有问题。我记得论坛有人说到过这个问题,这个是有fix吗?
另外,如果以30分钟bar为基础来回测策略,我们可以直接在IB接口下载30分钟的bar。
但是在实盘的时候,我们只能用tick数据来合成30分钟bar,然后基于30分钟的bar来些策略。
如果实盘的策略要回测的话,那岂不是只能先在IBAPI下载一分钟的数据来回测,而不能直接使用IBAPI下载的30分钟的数据来回测? 因为策略是用1分钟的bar来合成30分钟的。这样的话,回测显示出来的K线图又是基于一分钟数据的,这个几乎没法看啊。请问各位怎么做的?
如下图,报错如下,说是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.
另外,在用模拟账户准备运行策略的时候,没有地方指定我策略中的一根bar代表的周期啊,比如5分钟还是30分钟,这个系统是怎么弄的呢?
比如onbar函数里面条件满足的,以close价格(假如为10块)买入一首合约;
但是下一根K线开始的开盘价是12块,收盘价是13块,那么这个买入动作就会失败。这个时候怎么处理?
因为下一根K线也就只有open,close,high,low四个价格,如果之前onbar里面买入的时候使用的close价格没有在这四个价格之间,那回测也是买入失败,仓位不会增加。
而且未来也不能保证买入成功。
这对于开仓还好说,大不了不开仓了。但是对于平仓来讲,如果下单不成功,那这个回测似乎没啥意义了?
请各位老司机指点。
如题,测试双均线策略的时候,onbar函数的cross over和cross below的时候打印出交易记录。
if cross_over:
print(">>> bar cross over.", bar.datetime, bar.close_price, self.fast_ma0, self.fast_ma1, self.slow_ma0, self.slow_ma1)
if self.pos == 0:
self.buy(bar.close_price, 1)
elif self.pos < 0:
self.cover(bar.close_price, 1)
self.buy(bar.close_price, 1)
elif cross_below:
print(">>> bar cross below.", bar.datetime, bar.close_price, self.fast_ma0, self.fast_ma1, self.slow_ma0, self.slow_ma1)
在回测的时候,发现在上一步骤打印出的交易记录和回测K线图上的交易箭头指示不匹配。
随后我就在class CandleChartDialog(QtWidgets.QDialog)的如下函数打印出来trade记录, 发现和第一步走打印出的交易记录不匹配。这个trade list里面的记录少了一些。请问是怎么回事呢?
def generate_trade_pairs(trades: list) -> list:
""""""
long_trades = []
short_trades = []
trade_pairs = []
idx = 0
for trade in trades:
trade = copy(trade)
idx += 1
print(">>>trade[",idx,"]:", trade) //加日志打印出trade记录。