《基于Flink的金融市场风险计量研究与实践.docx》由会员分享,可在线阅读,更多相关《基于Flink的金融市场风险计量研究与实践.docx(15页珍藏版)》请在第壹文秘上搜索。
1、金融市场风险是商业银行的主要风险之一。随着我国逐步融入世界经济体系,大中型银行采用巴塞尔资本协议11(以下简称“巴II”)作为风险管理的工具。目前,国内大部分金融机构采用外购软件的方式满足市场风险计量以及估值等核心功能监管要求,部分银行先后通过引入咨询与技术支持的模式实现风险计量以及估值的自主可控。巴塞尔资本协议11I(以下简称“巴in”)的发布,对资本计量的过程提出了更为全面、审慎的要求,同时巴In新内模法下的计算量估计可达现行巴II内模法的30倍以上,因此在巴HI的具体实施中,如何提升计算的运行效率是市场风险计量面临的主要挑战之一。大数据、分布式计算以及实时计算等技术的发展,为数据量大、计
2、算复杂的计量模型在准实时下的计量提供了较好的支撑,因此本文主要探讨利用FIink大数据框架来实现金融市场风险的计量。一、FIink流批一体化ApacheFlink是由APaChe软件基金会开发的开源流处理框架,其核心是用JaVa和SCala编写的分布式流引擎。FIink能在多种常见集群环境下运行,并能以内存速度和任意规模进行计算。Flink以数据并行和流水线方式执行任意流数据程序,FIink流水线运行时系统可以执行批处理和流处理程序。此外,Flink运行时本身也支持迭代算法的执行。相对简单的编程模型加上高吞吐、低延迟、高性能以及支持exactly-OnCe语义的特性,使得Flink成为主流的数
3、据处理框架,并逐步成为下一代大数据处理标准。目前FIink框架从支持流计算逐步向流批一体化的架构进行演进。从Flink-L13开始,FIink完成了统一的流批表达,实现统一的流批执行,以及统一可插拔的runtime支持。二、市场风险计量与估值1 .市场风险计量金融市场风险是指未来市场价格(利率、汇率、股票价格和商品价格)的不确定性对金融机构实现其既定目标的不利影响。金融机构通常遵照巴II以及商业银行资本管理办法的相关要求,通过敏感度指标、风险价值(VaR)、预期尾部损失(ES)等进行市场风险的计量和评估。VaR是指在一定的持有期(HoldingPeriOd)和给定的置信水平(COnfidenC
4、eLeVeI)下,利率、汇率等市场风险要素发生变化时可能对某资产组合造成的最大损失。以1天的持有期为例,在投资组合的损益(P&L)分布图上(假设损益服从正态分布)解释VaR,如图1所示,左侧的阴影部分对应的是1%的分位点,该点在横轴上的对应值即为VaR。该图表示在1天的持有期内,99%的置信水平下,投资组合的最大损失不会超过VaR。99%ES是在VaR的基础上发展出来的一种投资风险计量方法,其含义是在投资组合的损失超过某个给定的置信值时,该投资组合的平均损失值。从图1看,即超过1%置信值阴影部分的损失的平均值。2 .金融产品估值估值是金融市场业务中估算各类金融产品价值的基础性过程,其在市场风险
5、计量中是进行损益分析、VaR和ES计量的基础。估值的一般方法是对金融产品未来产生的现金流进行折现求和,但由于金融产品的多样性和复杂性,各类金融产品的现金流模式也不一样,因此各类金融产品的估值模型千差万别。以外汇远期产品估值模型为例,一份外汇远期合约的估值涉及两笔现金流:一笔是到期时收到的外币现金流,一笔是到期时支付的本币现金流。两笔现金流折现时需分别采用对应币种的折现率,同时考虑币种之间的汇率转换。现金流示意如图2所示,O为合约开始时间,T为合约结束时间,t为估值时间。Ot图2现金流示意PV =Amtf(“尸 RatelAmtd。+仍其中:PV为外汇远期在t时间的现值;Amtf为T时到期时收到
6、的现金流,Amtd为T时到期时支付的现金流;n为收到币种的折现率,L为支付币种的折现率;Rata为收到币种和支付币种在t时刻的汇率。除外汇远期产品外,金融市场上的其他金融产品,包括固息债券、浮息债券、含权债券、可转换债券、信用违约互换、期权等,其估值模型都比较复杂。3 .巴HI对市场风险计量的新要求巴HI相较巴H在市场风险计量方面更加审慎,首先是使用ES替代VaR;其次是对处置期不再设定单一的10天时间,而是对风险因子按照不同的流动性设置不同的处置期;同时,巴HI在主要风险因子类型和情景类型方面考虑不同的组合。体现在市场风险计量上,其计算量最少是现行标准法的6倍,最高可达现行内模法的30倍,因
7、此市场风险计量以及估值的高性能计算是业界面临的主要挑战。4 .计量与估值的实现基于VaR或ES的市场风险计量的复杂性在于不同交易与情景的交叉。假设待估值的交易或头寸量为10万笔,按照巴II中250个情景的要求,需计算2500万次,如考虑不同的处置期、风险因子或情景类型的交叉,计算量将以倍数增长。传统的计量与估值工具或实现方式借助单体服务器或数据库的计算资源实现,如AdaPtiv、SUMMlT等国外成熟产品,其特点是配置复杂、计算速度较慢,但功能覆盖全,能满足金融市场产品的变化;而新兴的实现方式是将估值和计量分离,如某银行通过Matlab、Python实现各类产品的估值模型,通过自研的分布式架构
8、调用估值模型实现风险计量,其特点是计算效率高,但部署和配置较复杂。当前,在地缘政治的影响以及信创工程的要求下,通过引入大数据、分布式架构探索市场风险计量引擎的自主可控意义非凡。三、基于Flink的流批计量架构基于FIink流批一体的市场风险计量引擎,是结合估值引擎、风险因子计算以及FIinkOnHiVe等技术,针对估值、计量、试算等批量和实时场景实现统一的市场风险计量引擎。市场风险计量的流计算和批处理调用流程如图3所示。估值引擎流计算数据产品估值风险因子计算目数据库Kafka联机数据库风险数 据集市公用函数 模型与方法数据库批量数据库数据补点曲线加工曲面加工Redis图3市场风险计量的流计算和
9、批处理调用流程通过批量处理框架整合交易数据和市场数据,借助流批一体化平台结合估值引擎、风险因子计算以及FIinkOnHiVe等技术,可实现通用的市场风险计量引擎。批处理时,批量处理框架按日完成交易数据以及市场数据的整合和清洗,然后通过Flink流批一体化平台调用估值引擎以及Redis中的风险因子进行分布式计算,并将批量计量结果写入HiVe。单笔试算时,前台将待试算的交易信息以及风险因子信息通过流数据模式写入Kafka,Flink流批一体化引擎中的流计算作业监控到Kafka中的数据后,启动流计算的流程开展单笔交易的估值计算,并将结果覆盖到Hive0最后通过FlinkOnHiVe进行VaR以及ES
10、等的汇总统计,并将结果保存到数据库中。批量模式和单笔计算模式的主要差别在于程序的入口不同,批量程序的入口程序每日通过调度启动,单笔计算的流模式的入口程序在第一次启动后一直运行并监控Kafka的数据。四、市场风险计量实践外汇远期是最基础的金融市场工具。计算外汇远期VaR或ES的基础是对外汇远期进行估值。本文通过历史情景模拟市场风险因子的变动,对其进行重估值,以外汇远期在Flink流批一体化引擎上实现VaR和ES的计量为例,介绍市场风险计量引擎的实践和落地的可行性。1.数据准备与预处理交易头寸、市场数据、参数和组合管理构成估值和计量的基础,本文以某系统市场风险数据为基础,选取了56笔外汇远期交易数
11、据,同时为了后续进行性能比对,通过随机数据生成方法随机生成近4万笔外汇远期交易数据,并选择路透相关曲线作为市场风险因子数据。2 .市场风险因子转换市场数据是反映金融产品当前以及历史交易的情况,包括各类市场资讯,如利率、汇率、商品价格、贵金属价格等,一般从外部数据供应商处获取。但获取的数据在市场风险计量中一般不能直接使用,需预先进行两步处理。一是补点,需对有缺失值的数据进行填充。常用方法如相邻数据的均值、最近邻数据等,实践中会根据缺失个数以及期限类型采用不同的补点方法。本文采用最近邻数据的方法,即按照相邻的日期数据进行填充。二是插值,由于标准的市场收益率曲线仅含IM、3M、6M、9M、1Y、3Y
12、、5Y、IOW20Y、30Y等期限的收益率数据,在估值日进行估值时需根据现金流日期进行插值获取匹配的数据。常用的曲线插值方法包括线性插值、三次样条插值、拉格朗日插值和牛顿插值等。此外,采用历史模拟法进行VaR和ES进行计量时,需考虑从计量日开始的过去250天的风险因子情景模拟情况。风险因子模拟有两种方式,一种是绝对模式,一种是相对模式。r以表示当前计量日的风险因子,r一表示当前计量日前第Ll日的风险因子,A表示当前计量日前第t日的风险因子,则持有期为1天的情况下,(t,tT)情景下的绝对风险因子模拟可表示为rt-rt.1,相对风险因子模拟可表示为:t-ri以当前计量日为基准,剔除非工作日的因素
13、,对每一类市场数据按照上述模式模拟过去250次的情景数据,即得到风险因子的情景数据。3 .估值和风险计量有了交易数据、市场数据以及情景数据后,即可以开展外汇远期的估值和风险计量。由于市场风险计量在考虑情景数据后的数据量急剧膨胀,本文探索基于Flink的流批一体的市场风险计量架构,借助Flink的分布式计算能力以及FlinkOnHiVe的大数据统计分析能力,提升市场风险计量的效率。估值是风险计量的基础,目前业内参考的估值模块包括QUantLib、OpenGamma等主流开源包,以及相关公司的商用估值包等。风险计量模块通过Flink的分布式算子,调用估值引擎实现不同风险情景下的估值结果。基于FIi
14、nk的分布式计算示意如图4所示。情景数据Iftft批处理数据笛卡尔操作批数据流计算数据jpKafkaFnnk流批一体化引擎FlinkOnH Me分析仓库嘉一鹤一m一n 分布式估值数据输出数据存储图4基于Flink的分布式计算示意基于估值包和Flink的分布式计算能力,市场风险计量的计算逻辑分为三步:一是读取交易数据和情景数据,并将交易数据和情景数据进行笛卡尔操作,为每一笔交易生成全量情景;二是依据全量情景的数据,按照分布式算子计算每一笔交易在每一个情景下的估值信息;三是将结果写入HiVe中,待全量业务以及情景数据估值完成后,基于FIinkOnHiVe的模式,按照情景和组合进行损益汇总,以预设的
15、置信度统计VaR和ES。4 .结果评估基于上述交易数据和市场数据,每笔交易按照250个场景进行市场风险计量和估值,计算量在IOoo万次左右。其主要计算逻辑包括读取交易数据和市场数据,根据情景对交易进行估值,估值完成后将数据写入文件HDFS中,为后续基于FlinkOnHiVe对数据进行分析提供支撑。为对比基于Flink的金融市场风险计量引擎与其他框架的差异,本文将外汇远期的市场风险计量与估值流程,分别通过JaVa批量、SPark框架和Flink流批一体化框架进行实现,并进行性能比对。首先在不考虑并发的情况下,对比三种模式下的执行时间情况。由于SPark框架和Flink框架运行对资源占用的机制不同,FIink是基于SlOts,SPark则是基于CPU和内存。以FIink的SIOtS的资源为基准单位进行资源划分,如一个SlotS资源单位为2C4G,则SPark的资源也按照2C4G为单位进行分配。同时需考虑FIink和SPark的并行度设置,FIink可基于算子、运行时环境等进行设置,Spark则根据输入的分区以及executor进行控制。在不考虑并发的情况下,Flink、JaVa和SPark的执行时间差别不大,SPark整体执行时间较长(如图5所示)。(毫秒)350000图5不考虑并发执行情况对比在考虑并发的情况下