vnpy乱乱谈 02架构

转自:http://101.132.65.227/?p=51

听到架构这个词先不要害怕. 其实这部分内容还是挺简单的. 一般而言, 一个交易系统我们可以简单的分成输入, (系统)处理, 输出三个部分.

常见的输入就是交易所出来的行情(还有回报)了, 行情有很多其他叫法quote, tick, market data 反正都是差不多的意思.

而输出呢, 无非就是下单, 或者撤单, 或者查询.

整个处理流程是, 系统接收到一个quote, 然后系统内的模型会评估这个quote, 看看是否后面要下单, 或者撤单. 比如收到一个quote价格很便宜, 模型算出来这个quote价格被严重低估, 那么系统就会发出买入指令.好这里引入了一个新的东西叫模型, 或者叫策略. 所以现在架构看起来是这样的, 我们的交易系统里面有一个东西叫模型

更进一步, 是不是还缺点东西? 试想一下如果你的model不小心写错了, 会疯狂的下单, 那么会导致怎么样的后果? 或者是本来要买100手的变成10000手, 不用想都知道后果基本都挺严重的对吧. 所以我们需要一个东西来审查一下我们下的单子是否是正常的, 一般而言这个东西叫做风控, 对应的还有一个东西叫做流控.

风控一般是做安全检查的, 比方说检查你的单子价格是否正确, 是不是负数啊, 数量是否正确, 是否等于0或者是过大啊之类的. 而流控呢则是控制单位时间内可以下多少单子, 很多地方风控流控不做严格区分的, 讲风控一般也包含流控. 所以现在我们的交易系统变成了下面这样

试想一下, 如果不同的交易所的行情和交易指令有不同的格式, 那么如果我们的交易系统要支持多个交易所, 是不是还缺点什么? 一般来讲我们都比较喜欢把不同但是类似的东西统一来处理. 对行情来讲一般我们不直接处理交易所过来的原始数据, 而是做一下转化, 转化为我们内部的一种数据结构来处理, 这样多家不同的交易所的行情最终都是转化为我们自己的数据结构处理的. 而对交易来说, 则是我们内部的下单指令转化到各个交易所特有的指令. 这个转化的部件可以叫adapter也可以叫gateway. 所以我们的结构演变成下面这样了.

麻雀虽小五脏俱全, 现在基本上重要的东西都有了, 复杂一点的系统其实也就多拓展了一些内如, 下面是来自于AlgoTrader官方的架构图.

看着挺唬人但其实没多出来太多东西.

我们再来看看vnpy的, 大概是这样

EventEngine是整个事件引擎, 相当于AlgoTrader里面的Esper complex Event Processing Engine, 但要简单很多. 负责事件的分发处理.

gateway对外适配了CTP, FEMAS等金融接口, 对内转化为一致的数据结构.

DrEngine是行情数据记录引擎, 相当于AlgoTrader的Database部分, 主要做的事情:

  1. 记录tick数据
  2. 由tick数据生产并记录bar数据

CtaEngine模块是CTA策略引擎, 相当于algotrader的strategy模块.

RmEngine是风控引擎.

看起和AlgoTrader基本没差太多对吧? 但是呢仔细看一下, 还是有一些区别的, 在vnpy里面:

  • 界面与逻辑耦合到一起
  • IO(数据落地的mango db)和逻辑耦合到一起

这两点异同其实是会照成比较大的性能问题的. 这个问题留在后续的篇幅中继续.

本篇完.

参考:

SYSTEM ARCHITECTURE

The architecture of AlgoTrader is composed of the following components which is shown as the 1st figure

The AlgoTrader Server provides the infrastructure for all strategies running on top of it. The AlgoTrader Server holds the main Esper Complex Event Processing (CEP) engine. It is responsible for all domain model objects and their persistence in the database. Different market data adapters are available to process live and historical market data. On the other end adapters for different execution brokers and exchanges are available, which are responsible for placing orders and receiving executions.

The AlgoTrader Server also provides business components for back testing, parameter optimization, analysis, execution management, risk management, reporting, reconciliation and hedging.

On top of the AlgoTrader Server any number of strategies can be deployed. Strategies can either be coded purely in Java or in a combination of Java and Esper code. Esper based strategies make use of a dedicated Esper CEP engine. A strategy can deploy any number of SQL-like Esper statements for time-based market data analysis and signals generation. Esper statements can invoke any number of procedural actions, such as placing an order or closing a position, which are coded in Java. The combination of Esper statements and Java Code provides a best-of-both-worlds approach.

For management and monitoring of the system different GUI clients exist. The AlgoTrader HTML5 Frontend provides trading related functionality like charting, orders, positions & market data. Eclipse or IntelliJ IDE’s are used for strategy development. The EsperHQ client manages the Esper CEP engine.

For productive installations and deployment AlgoTrader uses Docker.

https://github.com/vnpy/vnpy

[转]vnpy乱乱谈 02架构的更多相关文章

  1. 浅谈MySQL架构体系

    一  数据库和数据库实例 在MySQL的学习研究中,存在两个非常容易混淆的概念,即数据库和数据库实例.在MySQL中,数据库和数据库实例定义如下: 数据库:存储数据的集合: 数据库实例:操作数据库的集 ...

  2. 浅谈SDN架构下的运维工作

    导读 目前国内的网络运维还处于初级阶段,工作人员每天就像救火一样,天天疲于奔命.运维人员只能埋头查找系统运行的日志,耗时耗力,老眼昏花不说,有时候忙了半天还一无所获,作为运维工程师的你,有木有遇到过类 ...

  3. 以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程

    JavaWeb应用开发,撇开分布式不谈,只讨论一个功能服务应用的开发,无论是使用原生的Servlet/JSP方案,还是时下的SSM架构,都有一套经过工程实践考验的最佳实践,这综合考虑了团队协作.项目管 ...

  4. SGU 乱乱开

    本解题报告 乱抄,乱写,随性随心,不喜多喷! SGU 142: 思路:一个string的字串不会超过2^20个,我们枚举出来就好了. 我出错点:数组RE #include<stdio.h> ...

  5. 解构C#游戏框架uFrame兼谈游戏架构设计

    1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...

  6. 浅谈系统架构<一>

    前言:博主刚刚从事于Web后端开发与学习不久,开发项目经验也是有限的.不过今天依旧将一些个人的想法记录下来,我的构想或许不太正确,还望各位大牛能给我多多建议. 首先:我们从编程开始讲起 博主是偏向于后 ...

  7. 从西直门立交桥谈IT架构与重构(干货)

    2015年8月13日 PM 20:00 Neeke君从一个战场奔赴至另一个战场,回到办公室,打开电脑,登陆微信,精彩的的微社群分享马上就要开始了! 大家好,我是Neeke,中文名高驰涛,PHP开发组成 ...

  8. iOS应用架构谈:架构设计的方法论

    缘由 之前安居客iOS app的第二版架构大部分内容是我做的,期间有总结了一些经验.在将近一年之后,前同事zzz在微信朋友圈上发了一个问题:假如问你一个iOS or Android app的架构,你会 ...

  9. 分布式还是混合式? 谈CDN架构对服务质量的影响

    传统分布式模型 通 常,内容分发网络(CDN)採用分布式模型.在这样的模型里, 用户的文件存放在一个源server上.而且由大量边缘server负责分发这些文件.这些边缘server的磁盘空间比較小. ...

随机推荐

  1. VFS 上传文件到sftp 报错 包含中文路径 或者中文文件名称

    之前用Apache commons-vfs工具进行ftp操作(FTP服务器是 FileZilla Server) 上传本地文件 到 ftp服务器上,如果文件名称 包含 中文 报错 org.apache ...

  2. P2886 [USACO07NOV]牛继电器Cow Relays

    题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...

  3. 专业的“python爬虫工程师”需要学习哪些知识?

    学到哪种程度 暂且把目标定位初级爬虫工程师,简单列一下吧: (必要部分) 熟悉多线程编程.网络编程.HTTP协议相关 开发过完整爬虫项目(最好有全站爬虫经验,这个下面会说到) 反爬相关,cookie. ...

  4. ORACLE一个TNS配置错误

    oracle tns配置文件格式如下 RSXT = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.26.3. ...

  5. day 22 面向对象 类与对象 名称空间操作

    一.面向对象 1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式. 优点:复杂的问 ...

  6. IP通信基础课堂笔记----以太网VLAN

    1.以太网与802.3格式差异 2.以太网MAC地址特点 3.以太网MAC帧字节范围:64-1518 4.协议CSMA:载波侦听多路访问 5.碰撞检测 6.网卡(适配器)

  7. 马凯军201771010116《面向对象与程序设计Java》第九周学习总结

    一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...

  8. 关于Java方法重载

    今天在做项目的时候发现一个问题,如果有两个方法是重载的,而且他们的参数一个是父类,一个是子类,那么调用的时候会调用哪个函数呢? 做了个测试,发现调用的是子类. 例子: public class Ani ...

  9. 2Sum问题

    2Sum问题是3Sum和4Sum的基础,很多OJ都是以此为最简单的练手题的. 题目描述: 从一个数组里找出两个和为target的数. LeetCode上的描述: Given an array of i ...

  10. python基础一之课后作业:编写登录接口

    1 # Author : Mamba 2 3 #python基础一之课后作业:编写登录接口 4 5 # 输入用户名密码 6 # 认证成功后显示欢迎信息 7 # 用户名3次输入错误后,退出程序 8 # ...