vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 50
声望: 0

使用2.0.4版本,之前连接实盘不进行交易,只把信号写入log文件,然后复盘看效果如何,但是我连接实盘后,发现没有日志文件,同时交割单也找不到,请问日志和交割单在那里可以看到?

Administrator
avatar
加入于:
帖子: 185
声望: 24

通过gateway文件里面的on_querry_order()和on_querry_trade()可以查询到历史委托和历史成交,不同的接口查询到的历史记录不同,有些接口甚至只能查询到当天的成交记录。
委托回报函数on_order或者on_trade推送的实时信息,一般委托通过组件/成交组件/活动委托组件显示出来。

Member
avatar
加入于:
帖子: 50
声望: 0

请问是在策略文件里加上on_querry_order()这个函数吗:
比如:
def on_querry_order(self, order):
pass

def on_querry_trade(self, trade):
pass

谢谢

Member
avatar
加入于:
帖子: 50
声望: 0

getway文件里没找到on_querry_order()和on_querry_trade()两个函数啊,我用的是2.0.4版本

Administrator
avatar
加入于:
帖子: 185
声望: 24

是类似的命名函数,举个例子,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)
Member
avatar
加入于:
帖子: 50
声望: 0

老师,在ctp_gateway文件里没有这两个函数啊,是手动加进去吗?
还有2.0.4的仓位判断只有self.pos这个属性,如果我同时持有多仓和空仓怎么判断仓位呢?

Administrator
avatar
加入于:
帖子: 185
声望: 24

1) ctp_gateway有相关的函数,命名不同而已,可以仔细阅读一下原代码
2) vnpy是可以判断仓位的多空,今仓昨仓的,如converer.py 就有仓位调整的细致操作,如上期所模式,中金所平今惩罚模式。

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3