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

如题,我发现engine.close()并不能起到关闭引擎的作用。
而用gateway.close()关闭接口后,整个主进程也会随之关闭。这样每天都要再重新运行一次。

各位大神,
有什么办法可以在收盘后断开ctp,而不关闭主进程,
这样主进程循环到特定时间会重新登录CTP,
省去了每日重新手动再次运行登录CTP的烦恼。
难道只有每次新开一个进程才行么,这样感觉效率较低。

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

发现ctp_gateway.close()中的代码是直接exit()退出进程。简单粗暴啊,不知道封装的时候有没有disconnect的方法而不用直接exit还能继续执行下面的程序的

Administrator
avatar
加入于:
帖子: 4122
声望: 229

没吧,贴下哪里exit退出进程的代码?

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

用Python的交易员 wrote:

没吧,贴下哪里exit退出进程的代码?<
我用的是2.0.9版本
在vnpy/gateway/ctp/ctp_gateway.py文件中,
class ctpgateway的.close代码是

    def close(self):
        """"""
        self.td_api.close()
        self.md_api.close()

调用的是td_api和md_api的.close()方法,
而在class CtpMdApi(MdApi)和class CtpTdApi(TdApi)类中.close()方法的代码是

    def close(self):
        """"""
        if self.connect_status:
            self.exit()

因此在脚本模式里我自己加了个直接用

        gateway = get_gateway(gateway_name)
        if gateway:
            gateway.close()

获取gateway然后用ctpgateway的.close()方法想要断开ctp接口,直接主程序就会退出。在接口py文件中也没有找到其他关闭或者断开ctp接口的函数

Administrator
avatar
加入于:
帖子: 4122
声望: 229

这里的self.exit,调用的是CTP封装中的函数,是在退出程序的时候才用的。

vn.py的CTP接口目前在设计上还是到点需要直接关闭进程,不支持直接退出销毁对象。

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