中天证券量化交易系统简介与策略开发指南20_第1页
中天证券量化交易系统简介与策略开发指南20_第2页
中天证券量化交易系统简介与策略开发指南20_第3页
中天证券量化交易系统简介与策略开发指南20_第4页
中天证券量化交易系统简介与策略开发指南20_第5页
已阅读5页,还剩107页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

日程Apama

CEP简介功能优势中天证券量化交易平台介绍目标客户群体为目标客户带来的价值Apama

EPL策略开发培训Apama

Studio:新建项目工程EPL特性简介:Monitor和Listener程序测试与调试:

QMC期权定价策略实时界面监控:

DataView和Dashboard开发策略优化:

spawn和contexts并行计算中天证券策略框架培训Apama资本市场专用包的改造:多账号与订单中天ATS策略框架介绍与路线图策略实例:

CrossOver

第一页,共112页。1998算法:一元、多元统计测试组合管理(实现):均值方差组合优化1999算法:增强型因子模型实现:加限制条件的组合优化2000-2001算法:再分类,簇类分析(clusteranalysis),特有资料组分析实现:程序化交易2002-2003算法:时间序列分解,厚尾分布,概率,贝叶斯实现:基于阿尔法衰减的交易策略2004算法:MarketRegime实现:多种金融工具交易(ETF,Futuresetc.),出现高频交易2005-2006算法:神经网络,遗传算法实现:高频交易2007-2009算法:神经网络,遗传算法,ICA,状态转换图实现:多交易策略与衍生品整合世界发达国家数量化投资的发展美国顶级定量投资经理(算法和执行策略)的发展历程5第二页,共112页。世界发达国家数量化投资的发展

数量化投资的快速发展是伴随着计算机的不断进步而出现的。因此,我们可以将其发展也分为数据,系统层面的发展,策略,执行的发展,下表展示了这一发展的过程:(以美国市场顶级定量投资经理的发展为例)1997-2000数据:公共金融数据(Compustat等)专业数据,如盈利预测等(IBES等)IT:Excel工具VisualBasic第三代编程语言(C,Pascal,C++等)+Facset2001-2003数据:加入了分析师分析的评估预测数据(Starmine等)和公司内部调整数据IT:第三代编程语言+数据整合工具(Facset等)第四代统计语言及SQL(R等)2004-2005数据:在原有基础上加入公司内部调整的各种经济数据IT:进入第四代编程语言时代,关系数据库2006数据:公司特有数据IT:多维数据库技术(MDDB)2007-2009数据:特有数据完全预处理的公司数据IT:内存数据存储技术+CEP4第三页,共112页。10年来应用于250家金融行业客户算法交易策略交易实时市场监控交易行为合规外汇交易做市/债券定价实时精准营销交易可视化第四页,共112页。10年沉淀形成的资本市场专用包交易执行算法做市合规监管外汇多市场集中交易定价引擎适用衍生品、债券风控防火墙投组与自动对冲第五页,共112页。中国市场的定量投资现状(2010)中国市场的定量投资处于起步阶段数据:基础的原始数据(万得,国泰安)+盈利预测数据(朝阳永续)IT构架:具有完整程序化交易平台的基金和券商是凤毛麟角投资理念:由于有大量的海外定量策略的参考,定量策略的研究超越可交易范畴交易实施:雏形期,也没有多少机构在研究中国市场的定量投资将进入快速发展阶段股指期货和融资融券业务的开展和实施大量海外优秀有经验的数量化投资人归国发展系统交易化平台成为各多家软件公司的开发重点中国市场的定量投资存在的问题多数基金和基金经理不认可定量投资的理念,认为很“玄”市场的不理智以及初级会直接影响定量策略的运作金融工具过少,融资融券成本过高,T+1无法实施高频交易6第六页,共112页。定量研究的基本过程定量策略的一般流程4收集想法构建模型数据处理历史数据回测模拟盘实测实盘投资收集想法:收集论文,寻找合理有效的投资理念构建模型:结合文献想法,构建自己的数量化模型数据处理:将数据处理成模型所需的形式,实现模型历史数据回测:提取历史数据,进行回溯测试模拟盘实测:使用现有模型,实时跟踪模型的运行情况实际投资:模拟测试通过后,投入真实资金进行投资第七页,共112页。花旗JP摩根大通德意志银行高盛法国巴黎银行荷兰银行英国金融监管局荷兰国际集团巴克莱资本日本三菱UFJ金融集团

Apama

在金融行业尤其是国内的典型客户在国外以买方为主,国内以卖方为主第八页,共112页。为实时事件应用程序提供了完整的的开发环境与运行平台Apama

–国际领先的实时决策平台策略研发历史回测数据沉淀内存数据库Web页面部署实时界面构建图形化开发策略EPL语言开发策略策略订单事件沪深/CTP行情成交回报委托单策略状态监控信息核心引擎第九页,共112页。1999剑桥大学第一个商业化CEP产品2003X64、多核技术逐渐普及程序化交易广泛采用2005JP摩根等机构纷纷采用ApamaProgress收购Apama2009年程序化交易算法交易实时风控流动性风险市场监管外汇交易电信应用灾难识别CEP领域评测第一名2013年DBS成功上线Apama反欺诈SoftwareAG收购Apama产品线11月推出大数据实时决策平台

Apama

CEP的发展轨迹Dr.JohnBatesDr.GilesNelson军工安全研究项目事件驱动架构(EDA)ComplexEventProcessing

第十页,共112页。Apama

EPL,开发策略的专用语言

1年编程经验的客户即可快速掌握,客户只需关注业务实现

第十一页,共112页。Apama图形化开发策略,无需编程功底这种模式是未来应用的趋势,目前暂时没有体现在中天平台中原因是需要客户有较完整的团队,即:策略开发人员与编程人员岗位分离第十二页,共112页。实时的DashBoards加速应用开发支持B/S结构的Web部署模式70多种实时监控通用控件,第十三页,共112页。

100多种专业接口直连期货、期权交易所如:芝加哥、欧交所接入MatLAB、Quanlib等数学计算工具直连股票交易所如:德交所WebServiceExcel路透终端彭博终端第十四页,共112页。功能综述Apama国际领先的量化交易平台1.集成策略开发环境Eclipse

EPL语言开发策略图形化开发策略千倍加速历史回测、加快策略开发速度支持断点调试策略工程打包、加密,保护知识产权2.实时分析引擎(服务端)流计算动态复合处理含有内存数据库、日志管理支持Linux、Windows3.实时策略监控界面(客户端)70多种资本市场常用控件Web部署、无需安装界面程序4.资本市场专用包CMF策略模板实时风控框架虚拟交易所5.接口规范稳定、开放的IAF(C\C++\Java)Matlab、quantlib彭博、路透、CME等最佳买方、卖方策略开发平台开发策略方便核心架构已经完善只需关注业务实现各类策略模板与基础部件1年编程经验、1周后可上手开发复杂策略2.定制策略监控界面容易开发方式与VB类似高效开发、快速见效3.策略测试方便虚拟交易所历史回测实况回放

断点调试4.高性能引擎毫秒级低延迟多线程并行处理

低级编译,根据CPU芯片动态优化。

复杂策略比C++更快19%

优势每秒钟计算BS期权公式的次数,越高越好第十五页,共112页。

Apama在全球资本市场的应用评价AiteGroupCEPReport,Nov2011:Leaderin:performance,integration,solutionsandreputation2013

BestSecurity&RiskProjectAward

DBSBankandProgressApama第十六页,共112页。日程Apama

CEP简介功能优势中天证券量化交易平台介绍目标客户群体为目标客户带来的价值Apama

EPL策略开发培训Apama

Studio:新建项目工程EPL特性简介:Monitor和Listener程序测试与调试:

QMC期权定价策略实时界面监控:

DataView和Dashboard开发策略优化:

spawn和contexts并行计算中天证券策略框架培训Apama资本市场专用的改造:多账号与订单中天ATS策略框架介绍与路线图策略实例:

CrossOver

第十七页,共112页。中天证券量化交易平台客户试点1)专为国内外机构客户、高净值投资者设计;2)基于国际领先算法交易技术ApamaCEP,毫秒级低延迟触发交易;3)支持多市场数据、对接券商内部高频数据;4)支持跨市场交易,对接专用交易通道;5)丰富的基础组件,处理行情和交易指令、虚拟交易所,Tick级高速回测;6)支持实时限额风控,以用户为核心,管理资金账户、子账户;7)客户基于Web浏览器来执行策略,策略放置于服务端生产运行;8)策略版权属于客户,客户可自行编写策略,策略打包加密;9)对客户基本信息和量化策略进行物理隔离、确保账户安全;10)生产环境和回测环境分离,经历回测的策略易于迁移到生产环境。第十八页,共112页。中天证券量化交易平台目标客户中天证券存量客户对于算法交易、策略交易有需求的高端客户增量客户客户的策略需求容易满足?股市模拟T+0(T-1日加仓)、股市信用T+0(融资融券)Yes公募基金、保险资产公司的传统手工下单No公募基金、保险资产公司的算法提示、手工下单Yes量化选股No期现套利、套期保值Yes配对交易、展期交易、统计套利、ETF套利Yes趋势跟踪、动量交易、价差交易、多空对冲(事件驱动型)、相对价值型方案、纯粹单边交易(如波动率)Yes场内外期权买卖价差交易Yes组合交易、一篮子交易YesTWAP、VWAP、Iceberg算法拆单Yes止损、止盈策略Yes客户类别对于策略交易的需求程度对于算法交易的需求程度传统私募基金中高对冲基金高高保险资产低高保险资产另类投资高高公募集金低高QFII中中第十九页,共112页。目标客户的差异化服务可自写策略类提供内网高速行情信息、提供高速或VIP优先下单通道服务提供可编程客户端APAMA

Studio,客户自行编写交易策略客户自行回测,券商提供复盘检验、亏损调试、策略优化建议租赁专属生产服务器、租赁专属测试服务器接口标准化类提供行情信息\高速或VIP优先下单通道服务基于FIX国际标准协议,提供行情和下单接口服务客户可以选用非Apama策略编写工具进行开发,借助通用语APAMA

EPL,提供非APAMA策略的回测、复盘服务租赁专属生产服务器、租赁专属测试服务器合作开发类提供内网高速行情信息、提供高速或VIP优先下单通道服务券商提供策略ODM服务客户提出策略构想券商进行策略开发、仿真测试、交付培训一条龙服务额外增值服务:亏损调试、策略优化建议期限分别在10天、30天、40天、60天内完成固化策略类提供券商内网高速交易行情服务提供券商程序化交易自有策略、含内网一般下单通道服务高端机构客户QFII一般机构客户和高净值人士广大散户第二十页,共112页。为目标客户带来的应用价值增量客户量化交易需求运行效率快开发策略容易容易招工分仓喜欢先进平台但不想买、寻服务程序接口快速通道策略加密安全如果客户需要:容易调整策略,响应市场变化容易开发策略,迎接市场创新量化策略回测跨账户交易那么就是我们的目标客户第二十一页,共112页。日程Apama

CEP简介功能优势中天证券量化交易平台介绍目标客户群体为目标客户带来的价值Apama

EPL策略开发培训Apama

Studio:新建项目工程学习EPL语言程序测试与调试:

QMC期权定价策略实时界面监控:

DataView和Dashboard开发策略优化:

spawn和contexts并行计算中天证券策略框架培训Apama资本市场专用包的改造:多账号与订单中天ATS策略框架介绍与路线图策略实例:

CrossOver

第二十二页,共112页。Apama及中天附加模块的安装Apama5.0及的安装包下载路径Win_x64安装包的下载地址:

http://115.com/lb/5lba3dcr59pwWin32和Linux及其的下载地址:

http://115.com/lb/5lbq1izc安装顺序:中天附加模块介绍,无需安装,但需要了解Apama基础后才能操作量化策略开发模板工程。需要手工导入到Apama

Studio中

5)

文件夹:AlgorithmicTradingSystem后台服务支持模块。需要手工拷贝到Apama资本市场专用包安装目录下6)文件夹:Bundles7)文件夹:customization第二十三页,共112页。Apama

EPL策略开发培训

-

Apama

Studio:

安装后的处理默认编码调整ApamaDeveloperIDE环境的默认编码为UTF-8有利于将Windows环境下编写的策略工程迁移到Linux生产环境复制Apama软件许可证license.txt到工作目录下的\license文件夹中,例如:[D:\Progress\ApamaWork_5.0]\license\license.txt.如果license.txt过期或无效,将无法运行Apama引擎Correlator;如果license.txt不存在,Apama引擎Correlator不能持续运行超过30分钟;当30分钟过后,用户可以再次启动运行,但仍然只能运行30分钟。自学Apama安装路径中的文件结构.\Doc\pdf文件夹,为程序开发者提供的培训手册.

例如,

Apma简介与入门getting_started.pdf

EPL策略开发指南

developing_epl.pdf

界面监控开发指南

building_dashboards.pdfsamples文件夹,分类了的代码样例EPL策略样例代码..\monitorscript周边接口程序样例..\engine_client

(可忽略)第二十四页,共112页。Apama

EPL策略开发培训

-

Apama

Studio:新建项目工程第二十五页,共112页。学习EPL语言Lesson1第二十六页,共112页。学习目标必须了解Apama

EPL(旧称MonitorScript)基本语法Apama引擎的工作原理

Correlator时间概念发送事件的途径 Routes,enqueues,andemitsevents必须掌握在EPL中定义事件 eventdefination编写Monitor去监听特定事件Monitorandlisteners在Monitor主体中定义方法 actions声明变量和数据类型

variablesanddatatypes程序循环与条件表达式 While/for

loopsandif/else

conditions并行计算:sub-monitor

monitor

instancesandsendmessages妥善终结monitors/listeners

quit,die

and

not第二十七页,共112页。学习内容Apama引擎Correlator的工作原理什么是EPL(旧称MonitorScript)?Monitors,Packages,Events,andEventTypesListeners事件匹配式EventTemplatesandEventExpressionsActionsRoutingandEmittingEventsVariablesandDataTypesCodeConstructsMonitors,MonitorInstances,andSpawningContexts,ParallelProcessing,andEnqueueingEvents第二十八页,共112页。correlator是一个进程,针对外部事件,基于socket协议传递后,实现了一系列的远程处理基本工作包括:Sendingeventstothecorrelator(input)Subscribingtoeventsfromnamed(orall)channels(output)Injectingcode对外来讲,只有一个输入队列和一个输出队列inputqueueandoneoutputqueue:什么是EventCorrelatore5e3e2e1e4InputQueueOutputQueueo1o2o3o4o5ApamaEPLcode默认模式单线程第二十九页,共112页。correlator怎样处理事件?

优化模式:并行处理Parallelprocessinge5e3e2e1e4InputQueueOutputQueueo1o2o3o4o5ApamaEPLcode第三十页,共112页。关于Correlator的处理事件currentTime

并非系统时间,而是事件放到队列里的时间TheEventCorrelatormaintainsanotionof“timenow”Availablefromread-onlyfloatvariable‘currentTime’Holdssecondssince‘epoch’(midnight01-Jan-1970UTC)ThisisdifferentfromsystemtimeSystemtimeisusuallyfurtheradvancedCorrelatortimeisthetimethatthecorrelatorqueuereceivesaneventFortime-triggeredlogic,correlatortimeisthetimethetriggerexecutesThus,‘currentTime’doesnotchangeduringprocessingofanyeventAllMonitorScripttemporaloperatorsusecurrentTimeprint"timeis"+currentTime.toString()+"seconds";第三十一页,共112页。学习内容Apama引擎Correlator的工作原理什么是EPL(旧称MonitorScript)?Monitors,Packages,Events,andEventTypesListeners事件匹配式EventTemplatesandEventExpressionsActionsRoutingandEmittingEventsVariablesandDataTypesCodeConstructsMonitors,MonitorInstances,andSpawningContexts,ParallelProcessing,andEnqueueingEvents第三十二页,共112页。什么是EPL(旧称MonitorScript)?类似解释型的脚本语言,生产运行时可以自动转为编译型的事件处理语言强类型的、大小写敏感注释C语言风格://and/*...*/syntax支持基本和引用型数据类型integer,float,boolean,stringsequences,dictionaries,classes(即events)事件可以有自己的方法methods(actions)完全意义的事件驱动架构消息即事件Informationispassedasevents松耦合Enforcesloosecoupling持续适应业务调整,更快更易用Consequentlymakesadaptingtochangesandextendingapplicationsfasterandeasier第三十三页,共112页。EPL中的术语Monitors和

MonitorInstancesMonitors是一个完整组织事件处理代码的逻辑单元Monitors内有主方法onload,类似一个带有main函数的类Classes,Monitorinstances(或称sub-monitor)

类似对象objects,依赖spawnEvents事件,是被monitor处理的数据结构,或称消息Events类似一个带有main函数的类Classe,一旦初始化后,或被赋值,就成为对象ListenersandEventsExpressionsListeners监听器,是EPL的独特特征,需要重点掌握Listeners使用事件匹配式EventsExpressions,针对各种事件进行过滤Variables,Actions,andCodeConstructs与其它高级语言类似RoutingEvents在monitorinstances之间使用Route作为通讯手段EmittingEventscorrelator向下游数据消费方传递消息的的手段第三十四页,共112页。HelloWorld观察DemoOne在MSExamples\SimpleTrainingExamples\monitors\

:monitor是一个逻辑单元Theonload()action是入口点Similartomain()inJava/C/C++print是标准输出,在Apama

Studio开发环境中,输出到console显示,但不记录到日志中log会记录到日志中monitorHelloWorld

{actiononload{print"Helloworld!";}}第三十五页,共112页。什么是Event?一个Event就是一条活数据,用来表示刚刚发生的消息一个Event是数据流的组成部分例如:委托单事件Financialmarketevents:“Buy10,000sharesofIBMat$80.45”物流事件Supplychainevents:“RFIDtag121.19.1818wasscannedat1:39PMatdockdoor10”网络安全事件Securityevents:“TCP/IPaddress98justaccessedserver5”第三十六页,共112页。定义一个事件类型EventTypes必须在monitor处理逻辑之前,事先定义在*.mon文件中定义语法: 示例:事件类型分类:基础类型Primitivetypes:booleanfloatintegerstringdecimal

eventtype-name{

field-type

field-name;

field-type

field-name;

...

}

eventBestBidAsk{

stringsymbol;

floatbestBid;

floatbestAsk;

}引用类型Reference

types:dictionarylocationsequenceeventlistenercontext。。。第三十七页,共112页。在哪里定义事件类型?在代码工程中定义eventdefinition文件夹中,New也可以在任意.mon文件中的开始部分所有的monitors都可以共享这类事件松耦合的设计架构基础

任意monitor均可以发送、接收这些事件在某一个monitor内部定义私有的数据结构只有这个monitor可以处理这类事件monitorFoo{eventInnerEvent{stringfoo;}actiononload{onallInnerEvent(){}}}观察DemoTwo观察DemoThree第三十八页,共112页。定义事件类型序列化的事件格式example:特别地注意:字符串双引号DoublequotesaroundstringsBoolean是小写的trueorfalse(casesensitive)Sequences中括弧dictionaries大括弧学习Demo2.evt在MSExamples\SimpleTrainingExamples\events改写demotwo.mon,监听、打印AllTypes这个示例com.apama.lab.marketdata.BestBidAsk("IBM.N",107.04,107.5)Aneventdefinition.mon:

eventAllTypes{

strings;

integeri;

floatf;

booleanb;

sequence<integer>s;

dictionary<string,float>d;

SmallEventse;

}aEvent.evt:

AllTypes(

"foo",

10,

3.142,

true,

[1,2,3,4,5],

{"a":1.0,"b":2.0},

SmallEvent()

)改写DemoTwo第三十九页,共112页。使用包名Packages,作为前缀.mon文件前加上前缀避免不同的人之间命名冲突当monitor与事件不在同一个包内,必须使用全名若在同一个包内,可以使用短名不算.mon文件注释,必须写在.mon文件的第一行尝试改写DemoTwo,改写Demo2.evtcom.apama.training.MyEvent("KZH",18)在DemoTwo.mon文件中加入包名,注意加分号:

package;将DemoTwo.mon文件中的MyEvent替换为com.apama.training.MyEvent运行工程,发送Demo2.evtpackagecom.apama.lab.positions;

eventPosition{

//definitionomitted

}

monitorPositionService{

//implementationomitted

}改写DemoTwo第四十页,共112页。课余练习:事件与事件类型目标Lookatincoming(simulated)eventdataWriteeventtypedefinitionssothatthecorrelatorcanunderstandtheincomingevents方法指引Exercise1inthe“Exercises:MonitorScript”handout

(filename:1-145_MonitorScriptExercises.pdf)LabExercise

1第四十一页,共112页。学习内容Apama引擎Correlator的工作原理什么是EPL(旧称MonitorScript)?Monitors,Packages,Events,andEventTypesListeners事件匹配式EventTemplatesandEventExpressionsActionsRoutingandEmittingEventsVariablesandDataTypesCodeConstructsMonitors,MonitorInstances,andSpawningContexts,ParallelProcessing,andEnqueueingEvents第四十二页,共112页。Correlator中实现高速事件触发机制的核心算法方块是事件匹配式eventtemplates圆点是事件ixeventA{ floatx; wildcardintegerw; integeri;}A([3:6],*,[0:4])A([2:4],*,[1,3])A(*,*,[-2:2])理解Hypertree

第四十三页,共112页。监听器Listeners引擎correlator需要知道在事件流里,哪些事件是值得关注的你要在monitor中告诉correlator符合哪些条件的事件,是这个monitor关注的Listener的构成“on”接着是一个事件匹配式aneventexpression指明事件模式与条件一旦符合条件,马上触发逻辑,通过:一块代码Acodeblock或者转向到另一个方法Anactionon<EventExpression>{/*dothings*/}如:onOrderFinished():orderFinished{printorderFinished.toString();}

on<EventExpression>doThings();

如:onOrderFinished():orderFinishedprocessOrder(orderFinished);第四十四页,共112页。事件匹配式EventExpressionson(OrderFinished(symbol=“EUR/USD”)//<-thisisaneventtemplateor//<-thisisaneventoperatorOrderFinished(symbol=“EURUSD”))within(5.0){print“receivedorderfinishedwithinthetimelimit”;}事件匹配式类似数据查询语句,包括:单个事件条件表达式eventtemplates0个或多个操作符eventoperator

(->,all,and,not,or,xor,at,wait,within)示例:第四十五页,共112页。单个事件条件表达式EventTemplate过滤规则结构体:示例:该事件一旦过滤后,一般后续逻辑需要获取其属性,这时必须事先声明:(<FieldName><Test><Expression>,<FieldName><Test><Expression>,...)BestBidAsk(symbol=“PRGS”)//EqualitytestBestBidAsk(bestBid>12.4)//GreaterthantestBestBidAsk(bestBid>=12.4)//GreaterthanorequaltestBestBidAsk(bestAsk<12.4)//LessthantestBestBidAsk(bestAsk<=12.4)//LessthanorequaltestBestBidAsk(bestBidin[12.4:12.9])//Inrange(inclusive)testBestBidAsk(bestBidin(12.4:12.9))//Inrange(exclusive)testBestBidAsk(symbolin[“P”:”Q”))//Inrange(mixed)test事件匹配式EventExpressionsOrderFinishedorderUpdate;\\DeclarethevariableonOrderFinished(priceExecuted<12.4):orderUpdate\\co-assignment{print“QuantityExecuted();}第四十六页,共112页。多个事件条件表达式之间的逻辑组合关系操作符Operators:allX可重复的监听需要代码明确关闭这个监听,quitnot

X X一旦发生,关闭这个监听,终止后续逻辑X->

Y Y随着X一旦X发生,开始关注Y;如果Y后来也发生,则触发后续逻辑Xor

Y 只要X或者Y发生,则触发后续逻辑Xand

Y 如果X并且Y发生,则触发后续逻辑等同于“(X->Y)or(Y->X)”操作符EventOperators观察DemoFour第四十七页,共112页。HelloEvent!Anexamplethatdemonstrateslisteningforandrespondingtoanevent:eventMyEvent{stringname;}monitorHelloEvent

{actiononload{ MyEvente;onallMyEvent():e{ print"Hello“++“!”; }}}第四十八页,共112页。课余练习:MonitorsandListeners目标PracticesettingupamonitorandcreatingalistenerinMonitorScript方法指引Exercise2inthe“Exercises:MonitorScript”handout

(filename:1-145_MonitorScriptExercises.pdf)LabExercise

2第四十九页,共112页。复杂事件匹配式EventExpressionSingleTriggerEventExpressionEvaluatedwhenanOrderFinishedeventisreceivedand

thepriceExecutedfieldislessthan12.4Onceaneventinstancematchesthefilterspecification:ThelistenerfiresTheentryinthehypertreeforthistemplateisremovedUsetoimplementthecallbackforthe

“Request-Response”MonitorScriptpatternonOrderFinished(priceExecuted<12.4):orderFinishedThelistenerstartsoffasFalseandcouldtriggeragain.ThenAnOrderFinishedeventisreceivedandtheexpressionbecomesTrueandcannottriggeragain.第五十页,共112页。复杂事件匹配式EventExpressionSimpleRepeatingTriggerEventExpression

EvaluatedwheneveranOrderFinishedeventisreceivedandthepriceExecutedfieldislessthan12.4Everytimeaneventmatchesthetemplate:ThelistenerfiresTheentrystaysinthehypertreeuntilthemonitorinstancediesUsetoimplementtheupdatehandlerforthe

“SubscribetoStream”patternonallOrderFinished(priceExecuted<12.4):orderFinishedThelistenerstartsoffasFalseandcouldtriggeragain.ThenAnOrderFinishedeventisreceivedandtheexpressionbecomesTrueandcouldtriggeragain.第五十一页,共112页。复杂事件匹配式EventExpressionTerminatingRepeatingTriggerEventExpressionEvaluatedwhenever:AnOrderFinishedeventisreceivedandthepriceExecutedfieldislessthan12.4EverytimeaneventmatchestheOrderFinishedtemplate,thelistenerfiresAnEndeventisreceived监听器被移出hypertree,其中的代码块、变量也被移出内存。垃圾回收onallOrderFinished(priceExecuted<12.4):orderFinishedandnotEnd()ThelistenerstartsoffasFalseandcouldtriggeragain.Theneither:AnOrderFinishedeventisreceivedandtheexpressionbecomesTrueandcouldtriggeragain.OrAnEndeventisreceivedthatmakestheexpressionFalseanditwillalwaysremainFalse.第五十二页,共112页。复杂事件匹配式的关注生命周期EventexpressionsareevaluatedwhenanyoftheeventtemplatestheycontainmatchaneventWhenevaluated,eventexpressionstakeavaluecomposedoftwoparts,makingfourpossiblevalues:ThetriggervaluedeterminesifthecodeisexecutedonthistriggerThetriggerpotentialcontrolscleanupTriggerValueTriggerPotential1trueCouldtriggeragain2falseCouldtriggeragain3trueCannottriggeragain4falseExpressionwillalwaysbefalse移出监听器回收相关资源观察DemoSeven第五十三页,共112页。EPL的关键点:避免监听泄露-内存泄露监听泄露值得注意Occurswhenalisteneriscreatedtoaddressashort-livedconcern(suchasanorderorasubscription)butisnotcleanedupafterthatconcernhasexpiredThemostcommoncauseofperformanceandstabilityissueswithapplicationswritteninMonitorScript监听泄露的后果Whenalistenerleaks:Leakacopyofalllocalvariablesthatwereinscopewhenthelistenerwassetup–causesmemoryproblemsLeakindexes–increasestheworkthatneedstobedoneperinputevent.第五十四页,共112页。监听泄露的例子假设只有ACK和NACK是互斥的,即外部只可能传入其中一类事件结果是只有一个监听器会触发,然后终止...…但另一个监听器一定发生泄露monitorExample{

actiononload

{

onStartLeakExample(){ routeRequest(); onAck(){print"ACK";} onNack(){print"NACK";}}

}}因此要掌握监听器的生命周期观察DemoEight第五十五页,共112页。监听器的生命周期四种方法终止监听器监听器所属的monitorinstance终止了Usethediekeyword出现意外情况(例如,某数值被0除,sequence取值超出上限)不带all的on被触发了一次后事件匹配式的值永远不会触发了为监听器命名,然后当其他条件符合时,明确kill之最佳实践是使用“andnot”模式:当End()事件到来时,则事件匹配式的值为false,那么监听器永远不会触发了

listenerl:=onallAck(){}l.quit();onAck()andnotNack()观察DemoEight中的第二个monitor写法观察DemoEight中的第三个monitor写法第五十六页,共112页。NormallistenersdefinetheeventstomatchMatchoccursifatleastoneactivematchingeventtemplateUnmatchedlisteners会被触发,如果没有任何使用相同的单个事件条件表达式的其他监听器被触发的话Ifmultipleunmatchedeventtemplatesmatch,theirlistenerswillalltriggerUsing‘unmatched’isagoodwaytohandlepreviouslyunhandledconcerns但也是不安全的–有可能其它人后续建立了相关监听,并触发,就不会按之前的预期触发BettertouseadictionaryasasetOryoucanrouteaneventdeclaredinmonitor-scopeUnmatched用法onallunmatchedBestBidAsk():bba{

print"nobodycaresabout"+bba.symbol;

}观察DemoFive第五十七页,共112页。Matcheswhenaneventhasfinishedprocessing其他相关监听器执行后,再触发这个监听ThenapplicationperformssomeotherworkActslikeaclosingbracketCompleted用法onallcompletedA(f<10.0){}monitorFoo{booleanalone:=true;actiononload{routeIsAnyBodyOutThere();onImHere(){alone:=false;}oncompletedIsAnyBodyOutThere(){print“Alone?:“+alone.toString();}}观察DemoSix第五十八页,共112页。课余练习:ComplexEventExpressionsObjectiveCreateaneventexpressionthatismorecomplexInstructionsExercise3inthe“Exercises:MonitorScript”handout

(filename:1-145_MonitorScriptExercises.pdf)LabExercise

3第五十九页,共112页。附带临时时间的限制TemporalConstraintsTwoformsoftemporallisteners:waitUsuallyusedtoimplementtime-outsTakessinglefloat(seconds)argumentUsewith‘all’forperiodicticker:withinUsedwithEventTemplatestospecifymaximumdurationTakessinglefloat(seconds)argumentonallwait(10.0){

routeTenSecondsElapsed();

}onImportantEvent()within(10.0)doStuff;观察DemoNine第六十页,共112页。定时触发的用法AbsoluteTimeThe‘at’operatorprovidessupportforabsolutetimetriggersSyntax:

LikeinacrontabfileUsedwith‘on’and‘onall’tosetupabsolutetime-outs:Cansuccinctlyexpresscomplextemporalexpressions:“Every30minutesfrom9amto5pmonthefirstdayofthemonthandeveryevennumbereddaythereafter”onat(0,0,*,*,*)//nexttimeitismidnight

onallat(0,0,*,*,*)//everydayatmidnight

onallat(0,0,*,*,[1:5])//everyweekdayatmidnightonallat(*/30,9:17,[*/2,1],*,*)at(<mins>,<hours>,<days>,<months>,<weekdays>[,<seconds>])第六十一页,共112页。学习内容Apama引擎Correlator的工作原理什么是EPL(旧称MonitorScript)?Monitors,Packages,Events,andEventTypesListeners事件匹配式EventTemplatesandEventExpressionsActionsRoutingandEmittingEventsVariablesandDataTypesCodeConstructsMonitors,MonitorInstances,andSpawningContexts,ParallelProcessing,andEnqueueingEvents第六十二页,共112页。定义方法DefiningActionsAnactionisequivalenttoasubroutineormethodSyntax:action<name>([<parameters>])[returns<type>]Example:

Actionparametersemantics:Primitivetypespass-by-valueCompoundtypespass-by-referenceEventsSequencesDictionariesActionsactionfactorial(integeri)returnsinteger{

integerresult:=1;

while(i>1){

result:=result*i;

i:=i–1;

}

returnresult;

}观察DemoEleven第六十三页,共112页。Thecorrelatorismorethanafeed-forward-onlyeventstreamprocessingengineListenersdetectcomplexeventsTheseoftenneedprocessingaseventsintheirownrightTheyarederivedeventsThecorrelatorexpressesderivedeventsbyroutingthemRoutedeventsareprocessedbeforeexternaleventsWhichmeansallupdatescausedbyanexternaleventareprocessedbeforethenextoutputevent分享事件Route的使用routeBestBidAsk(“PRGS”,12.3,12.4);或者BestBidAsk

bba;route

bba;第六十四页,共112页。RoutedeventsareplacedonastackThestackisprocessedbeforeanymoreeventsaretakenfromtheinputqueueone1(){ router1; router2;}onr1(){ router3; router4;}CurrentEventr1处理次序:RoutingEventse2e1InputQueueRouteStackr2r3r4第六十五页,共112页。分享事件RoutingEvents要注意的问题Theroutestackcanappeartocauseeventre-orderingNewereventscanbeprocessedbeforeolderonesSeetheexampleonthepreviousslide:r3andr4wereroutedlastr2isprocessedlastThisoftenleadstoaneedtohaveseparateeventsfor:ConveyingdataSignalstocontroltheapplication’sbehaviorRoutingistheonlywaytosharedatabetweenmonitorinstancesUsetheroutekeyword:Routingandco-assigninganeventismoreexpensivethanusingactioncallsSodon’tusethemjustbecausetheyarefun!Withinamonitororanevent:ActioncallswillperformbetterEventsarestillusefulassignalswithinmonitorinstancesForexample,toterminatelistenersrouteBestBidAsk(“PRGS”,12.3,12.4);第六十六页,共112页。发出事件EmittingEventsEmittingeventsallowsthecorrelatortooutputdataOrderstoOrderManagementService(OMS)systemsEventsontoEnterpriseServicesBuses(ESBs)NotallclientsneedalleventsSothecorrelatorhasoutputchannelsClientssubscribetothechannelstheydesireortoallchannelsNofixedlistofchannelsEmitcanemittoastringexpressionEmitsyntaxexamples:AnemittedeventmustmatchaneventtypedefinitionemitBestBidAsk(“PRGS”,12.3,12.4)to“foo”;emitBestBidAsk(“PRGS”,12.3,12.4)togetChannel();观察RoutingEmitting.monMSexamples\AdvancedTrainingExamples\monitors第六十七页,共112页。事件处理图例:

input

queue、route、emit、outputqueue

eventqueuecurrent

matchinglistenersregisteredlistenerscurrent

e1e3e2e1

e3e2l2l1

l2l1...

router1

...

l2e3e2r1e3e2r1...

router2

router3r3r2r1e3e2

r1e2r3r2

e3第六十八页,共112页。课余练习:Actions,RoutingandEmittingEventsObjectiveAddanaction,routeandemiteventsUseatemporaloperatorInstructionsExercise4inthe“Exercises:MonitorScript”handout

(filename:1-145_MonitorScriptExercises.pdf)LabExercise

4第六十九页,共112页。学习内容Apama引擎Correlator的工作原理什么是EPL(旧称MonitorScript)?Monitors,Packages,Events,andEventTypesListeners事件匹配式EventTemplatesandEventExpressionsActionsRoutingandEmittingEventsVariablesandDataTypes自学CodeConstructs,略过Monitors,MonitorInstances,andSpawningContexts,ParallelProcessing,andEnqueueingEvents第七十页,共112页。DeclaringVariablesAvariableisanamethatisboundto:Adatavalue(forprimitivedatatypes)Thelocationofadatavalue(forreferencedatatypes)Todeclareavariable,specify:DatatypeNameInitialvalue(optional)YoumustdeclareavariablebeforeyoucanuseitinaprogramIncludingco-assignedvariables-mustbedeclaredlikeanyotherExamples:Exceptions:TheseprovidedvariableshavevaluesassignedbythecorrelatorcurrentTimeself(usedinactionsoneventstorefertotheinstance)integeruserID;

stringstockName;

floatpriceFloor;第七十一页,共112页。LevelsofVariablesMonitor-levelglobalwithinamonitorAction-levelSpecifictoanactionBlock-levelWithinbrackets{}Eventtypedefinition-levelDeclaredwithineventtypedefinitions第七十二页,共112页。Monitor-levelVariablesVariablesdefinedatthemonitor-level:Declaredafter‘monitor’statementbutbeforefirstactionCanbeexplicitlyinitializedindeclarationstatementAreimplicitlyinitializedifnotdefined(onlyappliesto

monitor-scopedvariables–allothervariablesmustbeexplicitlyinitialized)stringvariablessettoemptystring“”integervariablessetto0floatvariablessetto0.0bool

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论