是2.0.4版本升级,数据库结构变化导致的。
群主在q群上上传了2个文件,直接运行即可解决
可以先跑一下策略回测,在策略的on_bar()中print一下K线的信息(如时间,高开低收),和KDJ指标。先确保策略回测是正常的
在期货公司开个仿真交易吧,simnow估计要等到7月份
是类似的命名函数,举个例子,tiger_gateway.py的查询委托以及历史委托回报函数如下:
def query_order(self):
""""""
try:
data = self.trade_client.get_orders()
data = sorted(data, key=lambda x: x.order_time, reverse=False)
except: # noqa
traceback.print_exc()
self.write_log("查询委托失败")
return
self.process_order(data)
self.process_deal(data)
def process_order(self, data):
""""""
for i in data:
symbol, exchange = convert_symbol_tiger2vt(str(i.contract))
local_id = self.get_new_local_id()
order = OrderData(
symbol=symbol,
exchange=exchange,
orderid=local_id,
direction=Direction.NET,
price=i.limit_price if i.limit_price else 0.0,
volume=i.quantity,
traded=i.filled,
status=STATUS_TIGER2VT[i.status],
time=datetime.fromtimestamp(
i.order_time / 1000).strftime("%H:%M:%S"),
gateway_name=self.gateway_name,
)
self.ID_TIGER2VT[str(i.order_id)] = local_id
self.on_order(order)
self.ID_VT2TIGER = {v: k for k, v in self.ID_TIGER2VT.items()}
def process_deal(self, data):
"""
Process trade data for both query and update.
"""
for i in data:
if i.status == OrderStatus.PARTIALLY_FILLED or i.status == OrderStatus.FILLED:
symbol, exchange = convert_symbol_tiger2vt(str(i.contract))
self.tradeid += 1
trade = TradeData(
symbol=symbol,
exchange=exchange,
direction=Direction.NET,
tradeid=self.tradeid,
orderid=self.ID_TIGER2VT[str(i.order_id)],
price=i.avg_fill_price,
volume=i.filled,
time=datetime.fromtimestamp(
i.trade_time / 1000).strftime("%H:%M:%S"),
gateway_name=self.gateway_name,
)
self.on_trade(trade)
通过gateway文件里面的on_querry_order()和on_querry_trade()可以查询到历史委托和历史成交,不同的接口查询到的历史记录不同,有些接口甚至只能查询到当天的成交记录。
委托回报函数on_order或者on_trade推送的实时信息,一般委托通过组件/成交组件/活动委托组件显示出来。
提供一些报错截图?
相关json配置文件放在“C:\Users\Administrator.vntrader”文件夹里
打包方式不同:
由于之前vnconda是把vnpy打包到minconda,尽管mincodna非常强大,但是打包进来出现兼容性问题。
新的vnstudio是直接把python和vnpy相关依赖库进行打包,稳定性提高
请提供用cta_backtester下载AP88时,cmd的报错信息
连接行情和交易接口,只需关注:password,host,port这3个字段
一键安装失败,那试一下最原始的手动安装吧:
安装时候看看cmd有什么报错,有的话再截图过来
在策略层,如on_bar()函数里面第一个逻辑应该是self.cancel_all(),目的是清空为成交的委托(包括本地停止单,限价单),保证当前时间点委托状态是唯一的。
若在非交易时间发单,服务器收到这个委托会推送一个拒单的委托回报。
尝试一下,卸载干净python环境,安装vnstudio2.0.4.
若还是显示”python出现问题“,建议重装系统了
试一下手动粘贴vnpy。
在Anaconda3中找到运行vnpy目录,例如我的是C:\ProgramData\Anaconda3\Lib\site-packages\vnpy-1.9.2-py3.7.egg,然后下载master或者dev分支,解压后把里面的vnpy文件直接粘贴(替换)到运行目录里。
或者彻底删除Anaconda/删除其余python环境,按照vnstudio2.0.4
因为戳和机制 cross_stop_order 和cross_limit_order只关心direction,并不看offset
仿真交易情况:
先基于策略,如DualThrstStrategy创建策略示例,在这里可以输入品种信息(vt_symbol),示例名称,策略参数等等。
然后是默认使用rqdata来下载前几天的数据用于策略的初始化,此时,初始化状态为True,策略参数也会显示出计算出来的数值
最后,鼠标点击“启动”,即可运行cta策略
重复连接接口会导致崩溃,这个bug在修复中。
可以连其他接口试一下
日期要引入trade.datetime