Python量化交易平台开发教程系列6-中层引擎设计

ptrade从零开始学习量化交易第11期【ptrade策略引擎简介之on_order_response - 委托主推(可选)】 on_order_response - 委托主推(可选) on_order_response(context, order_list) 使用场景 该函数仅在交易模块可用 接口说明 该函数会在委托主推回调时响应,比引擎、get_order()和get_orders()函数更新Order状态的速度更快,适合对速度要求比较高的策略。 注意事项: 目前可接收股票、可转债、ETF、LOF、期货代码的主推数据。 当接到策略外交易产生的主推时(需券商配置默认不推送),由于没有对应的Order对象,主推信息中or 阅读详情

原创文章,转载请注明出处:用Python的交易员

前言

中层引擎在设计上主要是为了进一步封装底层接口所暴露出的API函数,使得其更容易被上层的GUI和策略组件调用。本篇的内容会相对简单,主要以LTS接口DEMO为例介绍一些设计方面的思路。

相关的示例都是基于vn.demo中的LTS接口DEMO,发布在:https://github.com/vnpy/vnpy/tree/master/vn.demo/ltsdemo

中层引擎设计

构造函数

########################################################################
class MainEngine:
    """主引擎,负责对API的调度"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        self.ee = EventEngine()         # 创建事件驱动引擎

        self.md = DemoMdApi(self.ee)    # 创建API接口
        #self.md = DemoL2Api(self.ee)   # 如果使用L2行情就改为这行
        self.td = DemoTdApi(self.ee)

        self.ee.start()                 # 启动事件驱动引擎

        # 循环查询持仓和账户相关
        self.countGet = 0               # 查询延时计数
        self.lastGet = 'Account'        # 上次查询的性质
        self.ee.register(EVENT_TDLOGIN, self.initGet)  # 登录成功后开始初始化查询

        # 合约储存相关
        self.dictInstrument = {}        # 字典(保存合约查询数据)
        self.ee.register(EVENT_INSTRUMENT, self.insertInstrument)
  1. 首先以主引擎成员变量的形式创建事件驱动引擎ee、行情接口md和交易接口td的对象,两个接口对象创建时传入事件驱动引擎ee对象作为构造函数的参数。

  2. 在创建以上三个对象后,立即启动事件驱动引擎,此后当用户调用接口的连接、登录等功能收到事件推送后,ee可以立即推送到监听这些事件的组件进行处理。

  3. LTS和CTP接口的持仓情况和账户情况并不会通过回调函数主动推送,只有在投资者调用查询函数时才会返回,我们的DEMO作为一个手动交易终端,选择使用循环查询的模式不断获取持仓和账户情况的更新。这里的每次查询都会占用网络带宽导致系统延时的增加,对于某些运行全自动策略的程序,可以选择不进行查询,而通过对成交、行情等数据的统计来自行计算持仓和账户情况(甚至对于某些策略可以直接忽略该步骤,进一步降低延时水平)。

  4. LTS和CTP发送主动查询指令时,存在流量控制(通常限制在1秒一次查询),因此选择间隔发送查询账户和查询持仓的指令。

  5. 在登录成功后,我们需要查询柜台上所有可交易的合约信息,将这些信息保存到字典dictInstrument中,方便后面需要时进行查询。这里很好的体现出了Python的方便,笔者在设计封装API的回调函数时特别选择使用Python字典的形式推送信息,包含合约信息的字典收到后,可以直接插入到dictInstrument字典进行保存(字典嵌字典),查询时直接使用合约代码即可。而用C++语言开发时通常还需要用到Sqlite之类的内存数据库进行保存,麻烦了不少。

其他主动函数

    #----------------------------------------------------------------------
    def login(self, userid, mdPassword, tdPassword, brokerid, mdAddress, tdAddress):
        """登陆"""
        self.md.login(mdAddress, userid, mdPassword, brokerid)
        self.td.login(tdAddress, userid, tdPassword, brokerid)

    #----------------------------------------------------------------------
    def subscribe(self, instrumentid, exchangeid):
        """订阅合约"""
        self.md.subscribe(instrumentid, exchangeid)

    #----------------------------------------------------------------------
    def getAccount(self):
        """查询账户"""
        self.td.getAccount()

    #----------------------------------------------------------------------
    def getInvestor(self):
        """查询投资者"""
        self.td.getInvestor()

    #----------------------------------------------------------------------
    def getPosition(self):
        """查询持仓"""
        self.td.getPosition()

    #----------------------------------------------------------------------
    def getInstrument(self):
        """获取合约"""
        event = Event(type_=EVENT_LOG)
        log = u'查询合约信息'
        event.dict_['log'] = log
        self.ee.put(event)

        self.td.getInstrument()

    #----------------------------------------------------------------------
    def sendOrder(self, instrumentid, exchangeid, price, pricetype, volume, direction, offset):
        """发单"""
        self.td.sendOrder(instrumentid, exchangeid, price, pricetype, volume, direction, offset)

    #----------------------------------------------------------------------
    def cancelOrder(self, instrumentid, exchangeid, orderref, frontid, sessionid):
        """撤单"""
        self.td.cancelOrder(instrumentid, exchangeid, orderref, frontid, sessionid)

    #----------------------------------------------------------------------
    def getAccountPosition(self, event):
        """循环查询账户和持仓"""
        self.countGet = self.countGet + 1

        # 每5秒发一次查询
        if self.countGet > 5:
            self.countGet = 0   # 清空计数

            if self.lastGet == 'Account':
                self.getPosition()
                self.lastGet = 'Position'
            else:
                self.getAccount()
                self.lastGet = 'Account'

    #----------------------------------------------------------------------
    def initGet(self, event):
        """在交易服务器登录成功后,开始初始化查询"""
        # 打开设定文件setting.vn
        f = shelve.open('setting.vn')

        # 尝试读取设定字典,若该字典不存在,则发出查询请求
        try:
            d = f['instrument']

            # 如果本地保存的合约数据是今日的,则载入,否则发出查询请求
            today = date.today()
            if d['date'] == today:
                self.dictInstrument = d['dictInstrument']

                event = Event(type_=EVENT_LOG)
                log = u'合约信息读取完成'
                event.dict_['log'] = log
                self.ee.put(event)

                self.getInvestor()

                # 开始循环查询
                self.ee.register(EVENT_TIMER, self.getAccountPosition)                 
            else:
                self.getInstrument()
        except KeyError:
            self.getInstrument()

        f.close()

    #----------------------------------------------------------------------
    def insertInstrument(self, event):
        """插入合约对象"""
        data = event.dict_['data']
        last = event.dict_['last']

        self.dictInstrument[data['InstrumentID']] = data

        # 合约对象查询完成后,查询投资者信息并开始循环查询
        if last:
            # 将查询完成的合约信息保存到本地文件,今日登录可直接使用不再查询
            self.saveInstrument()

            event = Event(type_=EVENT_LOG)
            log = u'合约信息查询完成'
            event.dict_['log'] = log
            self.ee.put(event)

            self.getInvestor()

            # 开始循环查询
            self.ee.register(EVENT_TIMER, self.getAccountPosition)

    #----------------------------------------------------------------------
    def selectInstrument(self, instrumentid):
        """获取合约信息对象"""
        try:
            instrument = self.dictInstrument[instrumentid]
        except KeyError:
            instrument = None
        return instrument

    #----------------------------------------------------------------------
    def exit(self):
        """退出"""
        # 销毁API对象
        self.td = None
        self.md = None

        # 停止事件驱动引擎
        self.ee.stop()

    #----------------------------------------------------------------------
    def saveInstrument(self):
        """保存合约属性数据"""
        f = shelve.open('setting.vn')
        d = {}
        d['dictInstrument'] = self.dictInstrument
        d['date'] = date.today()
        f['instrument'] = d
        f.close()
  1. LTS和CTP的行情和交易账户通常是由经纪商一起提供的,为了简洁起见,把两个接口的登录一起封装在了login函数中。

  2. subscribe, getAccount, getPosition, getInvestor, getInstrument, sendOrder, cancelOrder都只是直接调用行情和交易接口的功能,做这种设计的目的是为了让用户在写上层组件代码时,可以直接写self.mainEngine.subscribe('IF1506', 'CFFEX'),而不必去写self.mainEngine.md.subscribe('IF1506', 'CFFEX'),很小的区别,但是相信我,程序规模大了后会让你烦到崩溃。

  3. getAccountPosition用于实现循环查询账户和持仓,这里我设为了每5秒发一次,基本够用就好。

  4. initGet和insertInstrument两个函数实现了登录后初始化查询相关的功能。首先登录完成后,程序用shelve模块打开本地保存的文件setting.vn,检查其中的合约信息数据,如果该数据的更新日期为今日,则直接读取使用,无需再次查询可交易合约信息(一般该信息每天日内保持不变)。否则调用getInstrument函数查询合约信息,insertInstrument函数负责将收到的合约信息插入到dictInstrument字典中,当所有合约信息都插入完成后,通过saveInstrument函数将该字典保存到setting.vn中,即可实现日内再次登录无需查询直接读取。

  5. 合约信息查询完成后,通常会再查询一次投资者姓名getInvestor,主要用于输出在程序的标题栏上(方便用户检查,防止登录错账户等),并将循环查询函数getAccountPosition注册到每秒触发的定时器事件监听上,开始循环查询。

  6. 当用户退出程序时,需要调用主引擎的exit函数,释放行情和交易API接口对象(在C++环境中会自动析构),并停止事件驱动引擎的工作线程(否则可能报线程退出错误等)。

总结

中层引擎的设计思路主要是封装底层接口,从而让用户在开发顶层GUI和策略组件时无需直接调用底层接口的主动函数,降低开发和维护的复杂度。

DEMO中的这个中层引擎非常简单,功能上只实现了个循环查询(其实也可以在接口层中实现,视乎需求)。而在实际开发中,中层引擎通常会包含用户最常用的一些功能模块,比如做期权策略的会加入期权定价引擎,做期现套利的会加入持仓组合的敞口监控对冲引擎等等。

vnpy量化交易平台的深入剖析与实战应用 本文还有配套的精品资源,点击获取 简介:vnpy(VNPY)是一个基于Python的开源量化交易平台开发框架,旨在通过模块化设计简化量化交易系统的开发流程。它支持多种金融市场的交易,包括期货、股票、外汇和期权,并覆盖数据获取、回测、模拟交易到实盘交易的各个环节。vnpy的架构包括行情接口、交易接口、策略引擎、回测系统、数据管理、图形化界面和云服务等组成部分,通过其强大的社区... 阅读详情

相关推荐

MDNet视频目标跟踪PyTorch源码(Python 2.7版本)

本源码是MDNet视频目标跟踪算法在Github上共享的、适用于Python 2.7版本的Python源码。一种可行的运行环境为:CUDA 8.0.61 for Ubuntu 16.04、cuDNN 5.1 for CUDA 8.0、Python 2.7、PyTorch 0.2.0。

python获取股票数据接口

#部分网站api数据有bug,这个bug问题不是自身程序的问题,而是第三方公司股票的问题 author = ‘nooper’ import re from math import ceil import datetime from httpGet import httpGetContent from common import decimal def _get_content(content): “处理腾讯股票数据接口信息” regex = re.compile(r’"(.*)"’) result = re

weixin_45788869的博客 3160

8.5/Q1,Charls最新高分文章解读!

8 257名受试者中,672人(8.14%)在9年内发生过卒中。在调整的多因素cox回归模型中,TyG和ABSI仍然是卒中的预测因素,TyG的HR为1.25(95%CI:1.06~1.47),ABSI的HR为1.33(95%CI:1.06~1.68)。TyG和ABSI联合诊断效能最高(AUC:0.579,95%CI:0.553~0.597),而TyG(AUC:0.566,95%CI:0.544~0.587)和ABSI(AUC:0.533,95%CI:0.524~0.597)的诊断效能最低。

gsky_sci的博客 1017

对冲策略及Python实现

但前面的介绍提示我们,就算没有现成的期权在市场上交易,投资者完全也可以通过动态交易股票,构造出一个这样的期权来保护自己的组合。组合的 Gamma 越大,这条曲线的曲率就越大,Delta 对冲的对冲误差就越大。由于这个组合完全复制了衍生品在 1 时刻的支付,由无套利的原理,这个组合 0 时刻的价格就应该等于衍生品 0 时刻的价格。而计算别的对冲的方式也很类似,不过想要很简单的得到特定的值,解析解很关键,某些需要用到B-S公式得出,幸运的是,B-S公式我们会!因为每天的股价都在波动,人为构造的这个组合的。

weixin_52185313的博客 4316

使用STM32F103C8T6控制舵机丝滑运转附代码

使用STM32F103C8T6控制舵机丝滑运转原理和案例,附代码。

m0_63566592的博客 4238

ROS2实战:从零部署Cartographer激光SLAM系统

本文详细介绍了在ROS2 Humble环境下,从零开始部署Cartographer激光SLAM系统的完整实战流程。内容涵盖环境准备、Cartographer安装(APT与源码编译两种方式对比)、工作空间与功能包创建、核心启动文件与Lua配置文件编写、系统构建与可视化启动,以及地图保存与实战调参技巧,帮助开发者快速构建稳定可靠的机器人SLAM应用。

weixin_29213655的博客 248

Lean — 优秀好用的开源量化交易平台

Lean 是 QuantConnect 开源的一款非常强大的开源量化交易平台,可以回测或运行Python或者C#写的策略,并在代码仓库中内置了上百个C#和Python的策略算法。这个开源的...

Oner.wv的专栏 5920

机械臂电机力矩计算

设计 6 轴机械臂时,电机力矩计算是确保机械臂负载能力、运动精度和安全性的核心环节,需围绕和两大核心展开,结合机械臂结构参数(如关节长度、质量分布)、负载需求(如末端负载重量、惯性)和运动参数(如加速度、角速度)逐步推导。

ZPC8210的博客 1857

GitHub Desktop中文汉化终极指南:5分钟免费实现全中文界面

还在为GitHub Desktop的英文界面而烦恼吗?想象一下,当你打开这款强大的Git客户端时,看到的是亲切的中文菜单和清晰的提示信息,而不是一堆让你头疼的英文术语。GitHubDesktop2Chinese正是为此而生,它能将GitHub Desktop的界面智能转换为中文,让你在熟悉的母语环境中轻松管理代码仓库。 ## 为什么你需要中文版GitHub Desktop? 你是否曾经因为看不

gitblog_01052的博客 292

SVM-支持向量机学习(1):线性可分SVM的基本型

1. foreword先看的是李航老师的书第7章,比较传统按照以下三节展开: 线性可分SVM 线性SVM 非线性SVM SMO算法 李航老师讲东西向来不拖泥带水,但本节也几乎用了40页的篇幅,足见涉及内容之多。7月底硬着头皮啃了下来,边看边在笔记上摘抄标注,花了2天时间对SVM有了基本认识。一个月过去了,如今重新整理为博客,再看轻松许多,并不断对比西瓜书的内容,启望达到融会贯通。西瓜书此节明显节奏轻

鸟恋旧林的博客 8681

系统架构设计师重难点知识脑图

大家都知道现在的软考自从变成机考后,越来越难了,教程上的内容不仅全还细,几乎任何内容都有可能考,出题老师主打一个出其不意,比如2024年5月考试,连UML时序图的片段都考,这。软件工程、系统架构基础知识、系统质量属性与架构评估、软件架构的演化和维护、信息系统架构设计、层次式架构设计、云原生架构设计、面向服务架构设计、安全架构设计、大数据架构设计等。所以对于教程上的任何知识点,都需要去记忆。因此我在这里制作了一个脑图,将所有知识点集中在一个脑图中,通过首词组句法,记忆背诵,通过一个个的展开节点,加强记忆。

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 1107

python量化交易平台开发教程系列_Python量化交易平台开发教程系列6-中层引擎设计...

#----------------------------------------------------------------------def login(self, userid, mdPassword, tdPassword, brokerid, mdAddress, tdAddress):"""登陆"""self.md.login(mdAddress, userid, mdPasswo...

weixin_39804523的博客 151

ABAP CDS View 从入门到精通教程第一篇:ABAP CDS View 在 SAP 技术体系中的重要地位

摘要:本文介绍了SAP开发技术专家提供的多套SAP开发教程,涵盖ABAP、UI5、Fiori、OData、BTP等技术领域。重点阐述了ABAP CDS View在SAP S/4HANA中的核心地位,作为虚拟数据模型(VDM)的关键技术,它实现了OLTP和OLAP的统一处理。文章还说明了学习CDS View的前置条件,包括需要SAP NetWeaver 7.50 SP01或更高版本系统,以及使用SAP ABAP Development Tool进行开发实践。作者具有16年SAP开发经验,这些教程形成了完整的S

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 900

【量化】Python量化交易平台vnpy开发-汇总笔记

文章目录0.引言1.类CTP交易API的工作原理2.类CTP交易API的Python封装设计3.vn.py项目中API封装的编译4.事件驱动引擎原理和使用5.底层接口对接6.中层引擎设计7.顶层GUI界面开发(1)8.顶层GUI界面开发(2) 文章专栏:https://zhuanlan.zhihu.com/vn-py 开源代码:https://github.com/vnpy/vnpy [5年前的文...

GreatXiang888的博客 3643

半导体器件仿真:双极型晶体管仿真_15.双极型晶体管的高级仿真技术

双极型晶体管(Bipolar Junction Transistor, BJT)是一种重要的半导体器件,广泛应用于放大、开关和调制等电路中。随着半导体技术的发展,对BJT的仿真要求也越来越高。本节将详细介绍双极型晶体管的高级仿真技术,包括器件模型的选择、仿真参数的优化、温度效应的考虑以及噪声分析等。

2401_87715305的博客 1244

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python量化交易平台开发教程系列7-顶层GUI界面开发(1)

原创文章,转载请注明出处:用Python的交易员 前言 终于有时间来写第一篇顶层GUI界面开发相关的教程了,之前实在是事情太多,跟各位读者抱个歉。 整合底层接口的各项功能到中层引擎中后,当我们开发顶层应用时(GUI或者策略算法),只需知道中层引擎对外提供的主动API函数以及事件引擎中相关的事件类型和数据形式即可。 在GUI和策略算法这两个主要类型的顶层应用中,作者选择先介绍

智能量化交易 6272

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python量化交易平台开发教程系列5-底层接口对接

原创文章,转载请注明出处:用Python的交易员 前言 从本篇教程开始,所有的开发都会在Python环境中进行(谢天谢地可以和C++说再见了)。 通常情况下,一个交易程序的架构会由以下三个部分组成: 底层接口:负责对接行情和交易API,将数据推送到系统核心中,以及发送指令(下单、数据请求等) 中层引擎:用于整合程序中的各个组件(包括底层接口、数据库接口等等)到一个

智能量化交易 8086

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

python量化交易平台开发教程系列_Python量化交易平台开发教程系列0-引言

原创文章,转载请注明出处:用Python的交易员为什么用Python来开发量化交易平台目前本人所在的公司一共有三款平台,分别基于C++, C#和Python。其中C#和Python平台都是由交易员开发;C++平台则是由专职IT团队作为一个通用平台开发,内部组件进行了封装(交易员不可见),对外提供行情、交易的API用于策略开发(除了C++ 外也包括C#和Python可用的API)。理论上这款C++平...

weixin_39695490的博客 288

[转载]Python量化交易平台开发教程系列0-引言

原文出处:http://vnpy.org/2015/03/04/20150304_Python%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93%E5%B9%B3%E5%8F%B0%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B%E7%B3%BB%E5%88%970-%E5%BC%95%E8%A8%80/ 为什么用Python来开发量...

dijiesa4351的博客 501

VeighNa:强大的Python开源量化交易平台

VeighNa(简称 VN 或 vn.py)是一个基于 Python 的开源量化交易平台,专为量化交易爱好者和专业交易员设计。VeighNa 是由国内开发者社区推动的开源项目,旨在提供一个功能丰富、灵活且易于扩展的量化交易解决方案。该框架不仅支持多种资产类别的交易,如股票、期货、期权、加密货币等,还支持多种交易接口和协议,使得用户能够轻松进行多市场、多品种的交易策略开发和部署。

Unity打怪升级 6737

【免费下载】基于Python的开源量化交易平台开发框架

多功能量化交易平台(trader),整合了多种交易接口,并针对具体策略算法和功能开发提供了简洁易用的API,用于快速构建交易员所需的量化交易应用。覆盖国内外所拥有的下述交易品种的交易接口(gateway):国内市场CTP(ctp):国内期货、期权CTP Mini(mini):国内期货、期权CTP证券(sopt):ETF期权飞马(femas):国内期货恒生UFT(uft):国内期货、ETF期权易盛(esunny):国内期货、黄金TD顶点飞创(sec):ETF期权顶点HTS(hts。

2402_83140078的博客 1800

Python量化交易平台开发教程系列4-事件驱动引擎原理和使用

原创文章,转载请注明出处:用Python的交易员 前言 从这篇开始,后面的教程都会基于Python(终于可以跟C++说再见了)。 经过上一篇复杂繁琐的API编译后,我们已经有了一个可以在Python环境中用来收行情和发单的接口,但是尽管作者在Github上也放了简单的API功能测试代码作为接口使用方法的示例,绝大部分读者应该对于如何用这个接口去开发自己的交易系统毫无头绪。

智能量化交易 8916

量化交易平台资源

史上最全量化资源整理 有些国外的平台、社区、博客如果连接无法打开,那说明可能需要“科学”上网 量化交易平台 国内在线量化平台: BigQuant - 你的人工智能量化平台 - 可以无门槛地使用机器学习、人工智能开发量化策略,基于python,提供策略自动生成器 镭矿 - 基于量化回测平台 果仁网 - 回...

James_bobo的博客 3706

揭秘VeighNa量化交易平台:事件驱动引擎与主引擎的核心工作原理

VeighNa(vn.py)是基于Python的开源量化交易平台开发框架,其核心架构采用事件驱动设计模式,通过事件驱动引擎(EventEngine)和主引擎(MainEngine)的协同工作,实现了高效、灵活的量化交易系统。本文将深入解析这两大核心组件的工作原理,帮助开发者和用户理解VeighNa的内部运行机制。 ## 事件驱动引擎:量化交易的神经中枢 事件驱动引擎(EventEngine)是

gitblog_00438的博客 900

你应该知道的21大Python量化交易工具

技术可用性的快速增长使个人交易者也能够进行系统和算法交易。下面为大家分享2022年 Python 量化交易使用最广泛的21大交易平台和框架、经纪自营商、数据提供商和其他有用的交易库等,这些交易库适用于搭建个人完整的量化分析和交易系统。一、云交易平台 对于大多数人来说,开始进行算法交易的最佳方式是使用在线交易平台。这些平台提供了自动化交易所需要的基础...

Python金融量化 1万+
上一篇: Python量化交易平台开发教程系列5-底层接口对接
下一篇: Python量化交易平台开发教程系列7-顶层GUI界面开发(1)
Trader_Python
博客等级 码龄11年 392粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值