博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习笔记_vnpy实战培训day03
阅读量:4293 次
发布时间:2019-05-27

本文共 2228 字,大约阅读时间需要 7 分钟。

这一节纯干货,讲解了vnpy的项目结构(代码结构),核心功能引擎

建议先看视频,在阅读代码,然后在回来看视频,这样理解的更为透出,否则仅仅看视频很难有深入的理解。

vnpy特点及和其他系统区别

vnpy特点:

1,将多个金融市场交易与数据接口,进行标准化定义与封装  2,基于事件引擎的量化交易平台,参考国外流行的事件驱动交易系统,自建Python高性能事件驱动引擎  3,整合交易接口,基本覆盖了国内外常规交易品种(证券、期货、期权、外汇、CFD)  4,提供完整的CTA策略交易模块和界面  5,风控体系

和其他系统区别

1,vnpy交易核心,pyalgotrade测试是核心,  2,时间快,常规22ms,c++改写5ms,其他tc等500ms  3,侧重于对接实盘,覆盖证券期货

安装环境

pycharm安装,启动图形界面等

事件引擎

事件:有类型和内容的消息。

订阅:关心某类型的消息,指定其监听函数。
事件通知:有消息到达,逐一对登记的监听函数进行调用,发送消息。

基础对象

1、Queue,先进先出的消息队列
Put():把需要推送的事件,放进队列。
Get():提取最前一个事件。

2、Handlers,事件注册表

Type:事件的类型
Dict:内容体,数据字典
Handler List:监听函数清单
Register():添加监听函数

3、Thread,事件推送线程

逐一提取事件,根据类型找出Handler list
对List的监听函数,逐一调用推送

vnpy:理解为管道,核心事件引擎,事件引擎调用相关模块,mongo作为存储

事件类型

系统相关

EVENT_TIMER = 'eTimer' # 计时器事件,每隔1秒发送一次
EVENT_LOG = 'eLog' # 日志事件,全局通用
Gateway相关
EVENT_TICK = 'eTick.' # TICK行情事件,可后接具体的vtSymbol
EVENT_TRADE = 'eTrade.' # 成交回报事件
EVENT_ORDER = 'eOrder.' # 报单回报事件
EVENT_POSITION = 'ePosition.' # 持仓回报事件
EVENT_ACCOUNT = 'eAccount.' # 账户回报事件
EVENT_CONTRACT = 'eContract.' # 合约基础信息回报事件
EVENT_ERROR = 'eError.' # 错误回报事件
CTA模块相关
EVENT_CTA_LOG = 'eCtaLog' # CTA相关的日志事件
EVENT_CTA_STRATEGY = 'eCtaStrategy.' # CTA策略状态变化事件
行情记录模块相关
EVENT_DATARECORDER_LOG = 'eDataRecorderLog' # 行情记录日志更新事件

行情/交易接口执行流程

如下图:

看第一条路径:1-2-3-4-5-6

CTAENGIND调用mainengine的sendorder,mainEngine转给gateway,gateway直接调用封装的接口。接口python会调用具体的dll文件。
注意:这里没经过eventEngine,系统大部分操作都会经过eventEngine,进行处理
这里整个过程是同步的,一股脑执行的。
个人倾向于将其看做传送带,传送带上外面看起来放的是event,本event本质上是函数调用,所以eventEngine其实是一个个函数调用的传送带,或者函调调用list

上面的逻辑做了简化,阅读代码时可以发现,完整调用链(执行逻辑)如下

(回测状态)策略的Sender->CtaTemplate.sendOrder(父类)->ctaEngine.sendOrder ->BacktestingEngine.sendOrder->vtEngine.sendOrder -> CtpGateway.sendOrder

第二条路径:a-b-c-d

这个是撮合引擎撮合后,反馈的成交信息,dll反馈给封装的python接口,python将信息存入eventEngine
这个操作是一起操作。事件完结了,但是事情只干了一半,交给eventEngine了

第三条路径:1*-2*-3*

这个是eventEngin里面有个轮训函数(遍历函数),函数会调用event的方法部分。
发起调用其实是eventengine,但是执行的函数内容是ctaEngine的(其实是strategy的)

主引擎MAINENGINE

负责实例化相关引擎

实例化策略引擎(CtaEngine)
实例化事件引擎(EventEngine)
实例化数据引擎(DataEngine)
。。。

提供gateway的通用方法封装

添加gateway,连接/断开
订阅/取消,委托/撤单
查询账号/持仓

提供dataEngine的方法封装

查询合约/所有合约
查询委托/活跃委托
提供对数据库的方法封装
清空数据/保存数据

CTA引擎

策略容器

加载/初始化/启动/停止
策略参数与运行监控
持久化策略数据
定时触发器
风控
gateway接口封装
委托/撤单/全撤
本地停止单
行情订阅
数据支持
合约数据
tick/Bar数据

DATAENGINE数据引擎

看做一个字典或javamap结构就行了,没有实际逻辑

转载地址:http://heyws.baihongyu.com/

你可能感兴趣的文章
Linux(SUSE 12)安装Tomcat
查看>>
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
Socket深度探究4PHP(三)
查看>>
可继承扩展的单例实现
查看>>
VS调试技巧
查看>>
C++线程池实现
查看>>
std::function与回调类
查看>>
类型擦除
查看>>
QML动画按钮实现
查看>>