从你图上看,portfolio_engine.init_engine后面好像没加括号
锁仓主要是为了避免平今惩罚,而怎么判断是否平今,怎看今天有没有开仓。这个函数里的td_volume是今天反方向开仓的数量。那如果今天反方向开过仓了再去平那肯定就是平今了。
这个锁仓转换有在官网微信公众号里的vn.py全实战进阶-CTA策略的第32课锁仓转换做具体讲解,感兴趣的话可以去看一下。
那建议参考官网微信公众号里的vn.py全实战进阶-CTA策略的第29课-委托控制里的细粒度撤单的内容了
是的,郑商所的tick里时间戳和毫秒是分开推的,建议可以仿照一下ctp_gateway里def onRtnDepthMarketData函数里对timestamp的处理,处理完datetime再缓存
是的,不支持的
用RPC创建一个独立的进程应该就行了,但是sqlite只能支持单进程写入,所以如果要同时开多个进程来录制或者导入数据请使用其他几个带服务器的数据库
建议还是检查一下代码,比如参数一类的,我直接下的示例代码,无论是按你的11/22结束还是按视频里的10/7结束,都是向上的
可以在策略里print,然后用run.py或者命令行python -m vnstation打开vnstation就能看到了
vnpy.trader.converter.py里288,289行的convert_order_request_lock函数里有对这个两个交易所在有昨仓情况下先平昨的处理的
是的,这个策略是有些问题
可以在cmd中运行python -m vnstation,看看有什么报错输出
上图是simnow推送的行情。请确认一下录到的数据是全是一秒一次还是个别是一秒一次呢?如果个别的话,有可能是该合约当时成交不活跃,那么可能就是没有推送新tick。
你的日线数据是几点开始的呢?
如果有漏数据的情况,可能是日线数据时间戳导致的。在backtesting.py下的load_data函数,会直接读取输入的start和end,然后30天30天的读取。举个例子,如果你的数据是21:00:00开始,那么如果上一个end是2015.2.4:00:00:00,下一个时间段的start则会是2015.2.5:00:00:00。那么,如果你的数据是00:00:00开始应该就不会漏掉,而如果你的数据是2015.2.4:21:00:00,它又大于上一个end,小于下一个start,那么就会被漏掉。因为load_data是输入start/end/interval...去取数据的,所以是无法预知你日K线的开始时间的。
解决这个问题有几个方法,一是通过传入之前把日线统一调到0点开始。二是用jupyter跑,把start和end写清楚(不仅是日期,把开始时间也写上),这样就不会漏了。
但是这样和图形界面不统一,因为图形界面默认就是输入日期。三是直接改造load_data,这样两边都统一,但是不推荐。
我试了你的代码,在我这里是无法解决漏数据的问题的。我试着用原来的代码,jupyter和图形界面load的数据量是一样多的。如果你load的不一样,通过附上的方法解决了,能否附上截图看一下呢?