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

是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推送的实时信息,一般委托通过组件/成交组件/活动委托组件显示出来。

提供一些报错截图?

  1. 安装最新的把,是vnstudio 2.0.4
  2. 默认数据库是sqlite,mongoDb是要另外安装

相关json配置文件放在“C:\Users\Administrator.vntrader”文件夹里

打包方式不同:
由于之前vnconda是把vnpy打包到minconda,尽管mincodna非常强大,但是打包进来出现兼容性问题。
新的vnstudio是直接把python和vnpy相关依赖库进行打包,稳定性提高

请提供用cta_backtester下载AP88时,cmd的报错信息

连接行情和交易接口,只需关注:password,host,port这3个字段

一键安装失败,那试一下最原始的手动安装吧:

  • 卸载干净python环境和vnpy
  • 下载安装最新的anaconda3 64位
  • 在github上下载并安装最新release的vnpy

安装时候看看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

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

沪公网安备 31011502017034号

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