程序员的量化交易之路(2)----Esper文档学习之技术概览(1)

转载请注明出处:http://blog.csdn.net/minimicall/

在接下来的20个工作日中,我将坚持翻译或者略翻译Esper的官方文档。

为什么需要学习Esper,因为我们需要理解复合事件处理 Complex Event Processing (CEP)。在量化交易系统中,CEP是必不可少的。它负责处理海量的实时事件。

关于CEP更多知识,大家可以翻阅网络相关资料。我这里集中在学习开源的CEP系统,Esper。。

今天开始第一篇:技术概览。

1. CEP和事件序列分析

Esper引擎主要解决现实中某类应用对事件的分析和响应的需求。这类需求的典型代表有:

1)商业管理和自动化(商业事件监听,BAM,异常事件紧急处理)

2)金融(程序化交易,欺诈检测,风险管理)

3)网络和应用的监管(入侵检测,SLA监管)

4)传感网络应用(RFID读取,生产线的控制和调度,空中航线监管)

这类应用的共同点就是需要实时地处理事件Event(消息Message),或者至少是接近实时。这种系统也叫Complex Event Processing(CEP),或者事件序列分析。这类系统的关键特性是吞吐量、延迟性和复杂逻辑的需求。

1)高吞吐量 - 应用需要处理大量的事件(每秒处理1000至100K)

2)低延时 - 应用需要在事件发生时立即做出响应(从几毫秒到数秒内)

3) 复合计算 - 应用支持对事件的复杂处理,例如事件之间的模式(Patterns among events),过滤事件(Filter events),合并特定时间窗口或者长度窗口的事件,事件序列的合并,基于事件缺失的触发处理。

Esper 引擎就是为了简化应用实现CEP功能而生。

2. CEP和关系型数据库

关系型数据库和SQL语言主要是面向绝大多数数据是静态数据,大多数查询是简单查询的场景。大多数数据库也是将数据保存在磁盘上(除了in-memory 数据库),它们的优化也是针对磁盘存取的。

为了从数据库中获取数据,那么必须对数据库进行查询。如果应用每秒需要得到数据10次,那么势必触发10次数据库查询,这中方法很难扩展到每秒成千上万的查询量。

当数据的数据需要更新时,数据库的trigger会被激发,然后这种数据库触发器执行速度很慢,并且不擅长复杂的条件检测和逻辑处理。

In-memory数据库比传统的关系型数据库更适合CEP应用,因为它具备更好的性能。但,它并没有为CEP的实时查询结果以及事件序列分析进行设计和优化。

3. Esper作为CEP引擎

Esper和关系型数据不一样的点在于,它并不保存数据,相反,它保存查询。而数据是通过查询来处理。当一个数据(Event)来到时,它将通过我们预订的查询语句,决定下一个动作。

Esper提供两种机制处理事件流:事件模板(event patterns)和事件流查询(event stream queries)

Esper提供事件模板语言,用于基于表达式(expression-based)的事件模板匹配。模板匹配引擎是通过状态机来实现的。这种方法可以处理预料的事件序列、事件缺失和事件融合。它也提供了事件在时间方面上的相关性分析。

Esper也提供了事件序列查询方法,用于满足CEP应用对事件序列的分析需求。事件序列查询(Event series queries)提供窗口(window),统计(aggregation),合并(join)和分析函数,用于处理事件流。这些查询遵循EPL语法。EPL有点类似与SQL,但它是处理视图(View)的,而非表格(Table)。视图,代表了对一个事件序列的处理以及产生新的事件序列。

Esper 采用统一的API接口提供的这两种方法。

4. 需要的第三方库

Esper需要如下第三方库:

1)ANTL

2) CGLIB

3) Apache commons logging ,Log4J.

4)Junit

5)Mysql的连接库

本章完毕。。。

时间: 2024-10-04 03:07:30

程序员的量化交易之路(2)----Esper文档学习之技术概览(1)的相关文章

程序员的量化交易之路(12)--Guice库的学习

Google Guice学习 在学习Cointrader的代码时候,要用到Google的guice用于依赖注入(Dependence Injection).所以,在这里系统的学习一遍.这里我主要是对其官方文档进行有选择性的学习翻译. 动机 写类对象之间的组合关系是非常麻烦的一件事情.这里以一个网站订披萨作为案例: public interface BillingService { /** * Attempts to charge the order to the credit card. Bot

程序员的量化交易之路(1)----规划开篇

其实,一直对量化交易有一定的理解和情节.早在中大读研究生的时候实验室师兄,已经去了中国平安核心投资团队,做高频交易研究的国源师兄的影响,就开始对金融世界产生了浓厚的兴趣.看了丁磊编著的<量化投资--策略与技术>和艾琳.奥尔德里奇的<高频交易>,反复的看,但是都入不了味,现在回过头来想,一个连股都不炒的人怎么可能入味呢.对一些金融的基本概念都不懂. 2013年7月出社会工作后,在10月份确立目标.需要炒股,而且需要一个深入的理解金融的世界.所以确定去考一个证券从业考试,选了证券基础和

程序员的量化交易之路(13)--Cointrader类图(1)

转载须注明出处:http://blog.csdn.net/minimicall?viewmode=contents, htpp://cloudtrader.top 今天开始正式切入到Cointrader的源码分析学习中,其主页为:https://github.com/timolson/cointrader. 它是基于Esper的一个比特币云交易托管平台.和我想做的事情比较相近.而且虽然现在没什么功能,但代码量相对少,对于学习非常好. 下面是它的一个类图.: 后面我们会根据这个类图一步步的剖析整个

程序员的量化交易之路(19)--Cointrader之Bar实体(7)

转载需注明出处:http://blog.csdn.net/minimicall,http://cloudtrader.top 1. 代码 package org.cryptocoinpartners.schema; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; public class Bar extends Event { private long times

程序员的量化交易之路(20)--Cointrader之Assert实体(8)

转载需说明出处:http://blog.csdn.net/minimicall, http://cloudtrade.top 任何可交易的都可以称之为Assert,资产.其类代码如下: package org.cryptocoinpartners.schema; import javax.persistence.Basic; import javax.persistence.Cacheable; import javax.persistence.Entity; import javax.pers

程序员的量化交易之路(24)--Cointrader之RemoteEvent远程事件实体(11)

转载需注明出处:http://blog.csdn.net/minimicall,http://cloudtrader.top/ 在量化交易系统中,有些事件是远端传来的,比如股票的价格数据等.所以,在这一节我们定义了一个远端事件实体. 它是一个基类,并不单独生成数据表.具体代码如下: package org.cryptocoinpartners.schema; import javax.annotation.Nullable; import javax.persistence.Basic; imp

程序员的量化交易之路(38)--Lean之实时事件处理接口IRealTimeHandler和RealTimeEvent6

转载需注明出处:http://blog.csdn.net/minimicall?viewmode=contents,http://cloudtrade.top/ 这节开始我们要开始说明另外一个模块:实时事件处理模块. 这个模块的工作是什么呢.它就是用来设置一些在特定时间需要执行的任务.比如,每天开盘的时候,你可以做一个什么动作,比如每天收盘的时候你也可以做一个动作.当然还有更为广泛的运用. 在Lean中,是开启一个单独的线程来处理这种定时任务的. 实时事件:RealTimeEvent 实时事件处

程序员的量化交易之路(36)--Lean之数据读取SubscriptionDataReader4

转载需注明出处:http://blog.csdn.net/minimicall?viewmode=contents,http://cloudtrade.top 数据读取需要定义一个读者.直接见下面代码: namespace QuantConnect.Lean.Engine.DataFeeds { /******************************************************** * CLASS DEFINITIONS ***********************

程序员的量化交易之路(29)--Cointrader之Tick实体(16)

转载需注明出处:http://blog.csdn.net/minimicall,http://cloudtrade.top Tick:什么是Tick,在交易平台中非常常见,其实就 单笔交易时某只证券的基本数据. 我们通过代码来学习吧: package org.cryptocoinpartners.schema; import javax.annotation.Nullable; import javax.persistence.Entity; import javax.persistence.M