量化软件和自己写量化程序,量化研究QRI-开源量化交易系统评测之AioQuant评测
量化软件和自己写量化程序,量化研究QRI-开源量化交易系统评测之AioQuant评测AIOQuant是一套异步事件驱动的量化交易系统,它被设计为适应中高频策略的交易系统, 底层封装了操作系统的aiohttp实现异步事件循环,业务层封装了RabbitMQ消息队列实现异步事件驱动。协程最原始的优点就是多任务处理的能力和时间的消耗,随着任务数量的增加,这种优势越明显。这里我们不做过多的技术阐述,后面我们会带着大家一起来从头开始完成一套异步多任务的量化框架,可以继续关注我们的更新。协程不参与多核CPU并行处理,协程不并行,而线程在多核处理器上是并行在单核处理器是受操作系统调度。说协程性能好的,其实真正的原因是因为瓶颈在IO上面,而这个时候真正发挥不了线程的作用。使用协程多任务的主要原因在于:
AioQuant量化交易系统其实在Python语言类得项目中算是一个比较创新型的设计理念.现在市场上很多在宣传异步量化交易框架的博主 或多或少都能找到aioquant的影子.
整体aioquant的框架结构比较简单 复杂的是对协程多任务的理解.
一、为什么要采取协程多任务?说到协程不得不提的就是线程、进程。
线程的话,在多核心处理器里面,是并行的,你启动一个线程之后你要想控制它,你得做系统调用或者最好情况是发送信号告诉线程里面的条件变量让线程自己去退出。
协程不参与多核CPU并行处理,协程不并行,而线程在多核处理器上是并行在单核处理器是受操作系统调度。
说协程性能好的,其实真正的原因是因为瓶颈在IO上面,而这个时候真正发挥不了线程的作用。
使用协程多任务的主要原因在于:
- 尽可能的节约任务调度过程中的时间消耗。
- 节约系统资源
协程最原始的优点就是多任务处理的能力和时间的消耗,随着任务数量的增加,这种优势越明显。这里我们不做过多的技术阐述,后面我们会带着大家一起来从头开始完成一套异步多任务的量化框架,可以继续关注我们的更新。
二、整体架构分析:AIOQuant是一套异步事件驱动的量化交易系统,它被设计为适应中高频策略的交易系统, 底层封装了操作系统的aiohttp实现异步事件循环,业务层封装了RabbitMQ消息队列实现异步事件驱动。
特点:
- 基于Python Asyncio原生异步事件循环,处理更简洁,效率更高;
- 跨平台(Windows、Mac、Linux),可任意私有化部署;
- 任意交易所的交易方式(现货、合约)统一,相同策略只需要区别不同配置,即可无缝切换任意交易所;
- 所有交易所的行情统一,并通过事件订阅的形式,回调触发策略执行不同指令;
- 支持任意多个策略协同运行;
- 支持任意多个策略分布式运行;
- 毫秒级延迟(10毫秒内,一般瓶颈在网络延迟);
- 提供任务、监控、存储、事件发布等一系列高级功能;
- 定制化Docker容器,分布式配置、部署运行;
- 量化交易Web管理系统,通过管理工具,轻松实现对策略、风控、资产、服务器等进程或资源的动态管理;
整体框架模块划分:
- event模块:event模块是行情数据、资产等数据接口的事件核心模块,通过订阅RabbitMQ消息重心来完成这个事件重心的消息和数据传递。
- tasks模块:协程重心的核心方法,里面封装了SingleTask单例事件模型、LoopRunTask循环事件模型
- heartbeat模块:心跳事件,在循环事件中需要使用到心跳机制来做定时任务。
- quant模块:事件循环的核心管理模块。
- market模块:上层是RabbitMQ事件重心,Aioquant框架的数据、资产模块是分开的,最为独立服务拆分成了分布式系统,通过订阅交易所行情传送给消息事件中心,实现数据的异步传输。
- trade模块:trade模块对接platform接口,交易所接口都是异步实现,通过上层封装实现异步事件调用。
- configure模块:aioquant是配置文件执行逻辑,需要通过全局配置文件来实现相关参数的定义。
以上都是这套框架的核心模块,因为采用了面向对象的设计思路,框架中针对Orderbook、Trade、Position等都定义了对应的对象。数据通过对象传输。
aioquant使用难度相比之前介绍的可能难在理解上,如果单纯从使用的角度考虑那么很容易去获得简单的效果。官方的案例中也带了很多demo供大家学习使用。难在针对协程的理解和二次开发上面,因为aioquant是半开源的方式,很多功能都是收费的,所以对于我们使用来说需要有一定的开发能力需要定制自己的接口。所以使用不难,难在二次开发和后期维护上。
如果想使用其他的交易所接口可能需要自己做一些二次开发,做一些定制化测试才行。不然几乎没法使用这套框架,或者说你直接使用现有的提供好的现货接口来使用。
官方也提供了很详细的技术文档
考虑到aioquant项目现在已经在GitHub上下架了,很多社区的人很难找得到,所以我们提供了完整的说明文档供大家学习参考。
https://545c.com/f/30567921-482718417-7fa521(访问密码:1222)
四、策略编写难度策略方面,aioquant没有很友好的策略编写模板供大家参考,所以策略方面可能需要大家自己按照自身策略的详细需求来自定义一些策略模块来实现对应的策略模块。不过整体的数据和资产、订单模块都比较详细,我们也只需要把工作重心放在策略的整体逻辑上即可。
五、风控难度对于aioquant来说谈不上任何风控能力,它本身也只是提供了交易所常用的交易接口,具体的风控功能需要使用者实行解决。
六、代码完整度aioquant本身就是半开源项目,好在核心模块全部开源出来了,市场上也有很多改进的版本供大家学习参考,所以完整度虽然原版只是缺少一些交易所接口,但是综合市场来看算是一个比较完整的项目。大家可以通过社区来获取更加完整的项目代码,或者是根据大家所缺少的模块我们会整理出一些大家缺少的模块供大家学习参考。
七、二次开发难易度对与aioquant来说,二次开发难度主要集中在对于协程多任务的理解,而不是代码上。aioquant的整体模块封装得非常完善,几乎不需要做变动,按照写好的模块照着写就行了,对应数据做好封装即可,没有很大的难度,唯一的难度就是在异步的理解上。
八、系统性能测评对于我自己本人是非常喜欢这套框架的,自己也根据这套框架做了一些改进,加了策略控制重心,和数据中台,方便自己做数据研究和策略的集中化管理。
性能来说,对于多任务模型的框架,效率自然会高一丢丢,但是也并没有想象中那么高,因为本身网络的限制,再加上python本身的一些问题。
其实可以结合GitHub上C版本的Orderbook工具,再加上一些C 实现rest接口等方式,可以将效率提升得更高,我自己是这么做的,目前使用起来也很满意。这套框架里还在设计理念和整体的思路。
也非常值得大家花时间去研究。