vn.py MainEngine类主引擎

MainEngine是vn.py架构的核心,负责对接交易接口和应用模块。它通过add_gateway添加交易接口,使用connect、send_order等函数交互。同时,通过add_app添加应用并提供数据缓存、风险管理等服务。源码分析包括__init__、add_xxx、get_xxx函数和gateway交互功能。
摘要由CSDN通过智能技术生成

1 MainEngine的地位

MainEngine位于vnpy/trader/engine.py文件中,该文件还包含BaseEngine、LogEngine、OmsEngine、EmailEngine。MainEngine类是vntrader的主引擎,它位于整个vn.py架构的中间层,向下对接各种交易接口,往上服务于各种应用模块,它还通过于LogEngine、OmsEngine、EmailEngine的交易提供数据缓存、风险管理、订单路由等一系列的量化交易通用功能。交易接口的通过add_gateway添加,通过connect、send_order、cancel_order、query_history等系列函数提供对交易接口的访问。上层应用由add_app函数添加,add_app会创建app对象,将app的引擎添由add_engine函数创建引擎对象,并添加到engines字典中,返回引擎对象。

2 源码阅读分析

为了方便介绍,将MainEngine类中的方法分为以下五类:__init__函数、add_xxx函数、get_xxx函数、gateway交互函数、工具函数。

2.1 __init__函数

init函数就是进行一些常规的定义工作,需要注意的是事件引擎的启动放在初始化里进行,从而保证程序运行的逻辑没有问题。MainEngine的gateways、apps这种字典形式的设计,使得vn.py可以同时支持多个接口,同时运行加载多个应用,与之对应的就是UI界面打开时交易接口的选择和加载应用的选择了

    main_engine = MainEngine()

2.2 add_xxx函数

2.2.1添加引擎

	def add_engine(self, engine_class: Any) -> "BaseEngine":
	     """
        Add function engine.
        这种实现机制真神奇
        传入的是engine_class,就是一个类
        在函数实现里创建这个类,这种设计可以使得不会出现engines字典内有同一个引擎的情况?
        BaseEngine的构造函数可以看出,一个引擎在创建的过程中,会传入主引擎、事件引擎、引擎名,这可真绕
        这样在BaseEngine所派生的引擎里,就可以调用主引擎提供的接口
        class BaseEngine(ABC):
             def __init__(
                self,
                main_engine: MainEngine,
                event_engine: EventEngine,
                engine_name: str,
            ):
        """

2.2.2添加网格

 返回添加的网管对象
 def add_gateway(self
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值