[转]vnpy乱乱谈 02架构

vnpy乱乱谈 02架构

 

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

 

听到架构这个词先不要惧怕. 其实这部份内容仍是挺简单的. 通常而言, 一个交易系统咱们能够简单的分红输入, (系统)处理, 输出三个部分.github

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

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

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

更进一步, 是否是还缺点东西? 试想一下若是你的model不当心写错了, 会疯狂的下单, 那么会致使怎么样的后果? 或者是原本要买100手的变成10000手, 不用想都知道后果基本都挺严重的对吧. 因此咱们须要一个东西来审查一下咱们下的单子是不是正常的, 通常而言这个东西叫作风控, 对应的还有一个东西叫作流控.app

风控通常是作安全检查的, 比方说检查你的单子价格是否正确, 是否是负数啊, 数量是否正确, 是否等于0或者是过大啊之类的. 而流控呢则是控制单位时间内能够下多少单子, 不少地方风控流控不作严格区分的, 讲风控通常也包含流控. 因此如今咱们的交易系统变成了下面这样dom

试想一下, 若是不一样的交易所的行情和交易指令有不一样的格式, 那么若是咱们的交易系统要支持多个交易所, 是否是还缺点什么? 通常来说咱们都比较喜欢把不一样可是相似的东西统一来处理. 对行情来说通常咱们不直接处理交易所过来的原始数据, 而是作一下转化, 转化为咱们内部的一种数据结构来处理, 这样多家不一样的交易所的行情最终都是转化为咱们本身的数据结构处理的. 而对交易来讲, 则是咱们内部的下单指令转化到各个交易所特有的指令. 这个转化的部件能够叫adapter也能够叫gateway. 因此咱们的结构演变成下面这样了.ide

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

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

咱们再来看看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

相关文章
相关标签/搜索