IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> vn.py MainEngine类主引擎 -> 正文阅读

[Python知识库]vn.py MainEngine类主引擎

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, gateway_class: Type[BaseGateway]) -> BaseGateway:
 例:
    event_engine = EventEngine()
    main_engine = MainEngine(event_engine)
    main_engine.add_gateway(BinanceGateway)

2.2.3添加应用

 返回添加应用的引擎对象
 def add_app(self, app_class: Type[BaseApp]) -> "BaseEngine": 
 例:
    event_engine = EventEngine()
    main_engine = MainEngine(event_engine)
    main_engine.add_app(CtaStrategyApp)

2.3 get_xxx函数

    def get_gateway(self, gateway_name: str) -> BaseGateway:
        """
       按名称返回网关对象。
        """

    def get_engine(self, engine_name: str) -> "BaseEngine":
        """
        按名称返回引擎对象。
        """


    def get_default_setting(self, gateway_name: str) -> Optional[Dict[str, Any]]:
        """
		按名称网关的默认设置dict。
        """


    def get_all_gateway_names(self) -> List[str]:
        """
        获取所有添加的getewasy的名字
        """


    def get_all_apps(self) -> List[BaseApp]:
        """
        获取所有应为的名字
        """


    def get_all_exchanges(self) -> List[Exchange]:
        """
        获取所有交易所
        """

2.4 gateway交互函数

gateway交易函数主要就是一些接口连接、关闭、向交易接口订阅行情、发送订单、取消订单、查询历史等操作,函数名如其义,实现也不难理解。

    def connect(self, setting: dict, gateway_name: str) -> None:
        """
	      连接特定网关的连接。
        """
    def subscribe(self, req: SubscribeRequest, gateway_name: str) -> None:
        """
        订阅特定网关的数据更新。
        """

    def send_order(self, req: OrderRequest, gateway_name: str) -> str:
        """
        向特定网关发送新订单请求。
        """


    def cancel_order(self, req: CancelRequest, gateway_name: str) -> None:
        """
        向特定网关发送取消订单请求。
        """


    def send_orders(self, reqs: Sequence[OrderRequest], gateway_name: str) -> List[str]:
        """
        批量向特定网关发送新订单请求。
        """

    def cancel_orders(self, reqs: Sequence[CancelRequest], gateway_name: str) -> None:
        """
        批量向特定网关发送取消订单请求。
        """

    def query_history(self, req: HistoryRequest, gateway_name: str) -> Optional[List[BarData]]:
        """
        查询条历史数据。
        """

    def close(self) -> None:
        """
        关闭连接
        """

2.5 工具函数

	def init_engines(self) -> None:
        """
        初始化引擎
        """
     def write_log(self, msg: str, source: str = "") -> None:
        """
        写日志
        """
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:28:29  更:2021-09-04 17:31:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:02:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码