打造AQF中量化交易体系是一个综合性的工作,在这个过程中难免会出现一些问题,所以小编在这里为大家分享一下量化交易系统中的日志的一些实用技巧希望能来帮助到大家。
一、分割策略
为了便于区分不同类别的日志内容,我们一般会把这些日志分门别类的存放在相应的日志文件中,比如把异常日志存放在error.log文件中,把调试日志存放在debug.log中,而业务类的日志也会存放在相应的文件,比如可以回测流程中的产生的日志存放在backtest.log中。
由于日志在系统运行中,会持续生成,一直存放在一个文件中就会导致这个文件过大,定位困难,因此需要指定文件的分割策略。常用的策略有两种:一种是每天生成一个新文件;另外一种是指定文件大小的较大数值,一旦到了这个大小就会生成一个新文件。两种策略各有利弊,按日分割还是有可能产生十分大的文件,比如回测的日志,曾经碰到过几个小时内达到上百G的情况;那么按文件大小的分割,就可能会导致一个文件中包含好几天的日志,或者一天的日志被分割到多个文件中,如果设置的文件过小,还有可能迅速在日志目录生成很多小文件。所以要根据实际情况,确定分割方式。大部分语言的日志框架都支持日志的定向输出和文件分割,具体如何使用得看API文档。
分布式的量化交易系统,每个子系统都是独立运行,并且有些因子或者基础数据的计算模块还是可插拔的,那么生成的日志也会分布在不同的系统上。当前我们看到的就是一个分布式的日志采集系统的架构,这里我们列举了四个大的子系统数据处理子系统、策略管理子系统、交易决策子系统和交易执行子系统,每个子系统在运行过程中都会产生大量的日志。为了收集这些日志,我们需要在每台主机上安装采集日志的Agent,也就是代理程序,比如阿里云用的logtail、或者apache的flume agent等,这些代理程序需要安装到所有的主机上。代理负责实时采集子系统产生的日志,然后把这些日志发送到统一的采集通道上,也就是Collecting Channel,这个通道一般都是一个数据临时存储,比如可以用Kafka。然后呢,再接着发送到后端的存储系统,日子的存储系统需要兼顾存储效率和分析效率,一般情况下,颗粒度越细的数据,可能需要保存的时间段越短,因此这些日志就要根据分析的需求进行压缩存储。
二、分析与报告
对日志的分析,一般会包括离线分析的,这种分析一般生成的是定时报告,一种是实时分析,这种分析比较常见,比如我们经常看到5分钟的在线人数、日活跃用户这种类似的统计,这种是基于时间窗口的统计。对于日志的分析,还有一种需求就是实时的报警。AQF量化交易系统中,数据是最关键的环节,所以有关数据的任何异常可能都需要及时报警。比如,接收交易所的数据程序突然异常停止了、交易决策发的异常委托单超过了一定的阈值等等。报警的手段多种多样,最常用的有邮件和短信,现在还有一些开源的发送微信的程序可以接入微信,告警有时候也要区分重要级别,同时确保报警的准确性,否则就会变成了狼来了,失去了应有的意义。报警的接收人也要慎重选择,我们有时候可能会认为消息发送给越多人知道越好,因为总会有人看到的。其实只要不是直接关系人,一般都会直接忽略这个消息的,起不到预想的作用。
从上面的架构中,我们可以看出,日志的处理也是一项很耗大的工程,尤其是系统变得越来越庞大后,日志系统的开发和维护任务也会变得十分繁重。好在,日志分析是所有系统的共同需求,现在有不少的开源软件可以帮助我们完成这些任务。另外如果我们把系统部署到云上,也可以看到这些云服务商都会提供相应的日志分析服务,无需我们重复发明轮子。
日志对于整个系统的运行起着十分重要的作用,因此我们一定要重视日志的使用。
发表评论 评论 (0 个评论)