分享一个开源量化交易系统BetterQuant

分享一个开源量化交易系统BetterQuant

传送门:

v1 alpha.3 release notes:

内置web服务,可通过web服务向指定策略发起人工干预指令或者查询历史行情。按照指定速度回放历史行情。模拟成交功能,结合历史行情回放可实现简单的回测功能。

betterquant的主要功能和特点包括:

这是一个设计目标为支持多账户、多策略、多个产品、多托管主机并行的可水平扩展的分布式量化交易系统。也就是说,未来你可以看到类似自营资金跨托管主机、跨账户借仓这样牛X的功能。

支持c++和python两种语言编写交易策略,整个系统几个命令即可完成安装部署。

目前的设计中只需要柜台或者交易所提供了委托回报和查询订单信息两个接口(实际理论上也只需要这两个接口),系统就可以帮你精确计算账户、策略、子策略等各个层面的pnl和手续费信息,系统崩溃后的各种信息的恢复,无视各种类型的交易所或者柜台接口,只需这两个接口即可。

强大的灾备功能,任何子系统崩溃,不会导致最终的数据异常‼️。交易服务崩溃,重启后会重建仓位和PNL信息,交易网关崩溃重启后会自动处理崩溃期间产生的未处理的订单状态变化,风控子系统崩溃后重启,同样会恢复各种风控指标。上述的恢复过程无需撤销任何未完结的订单。

所有子系统,包括行情子系统、策略引擎、交易服务、交易网关、风控子系统都通过无锁共享内存交互❕。成功的消灭常规方案也就是子系统间通过tcp/domainsocket的百微秒级别的延时❕。用共享内存做子系统之间的ipc,使得系统兼具单进程的性能,同时也具备多进程的安全性,即任意系统crash不会导致其他子系统crash。当然虽然 目前子系统之间是通过共享内存交互的,但这并不是一个单机版的交易系统❕,后续会架设web服务,提供restful和websocket接口,接受远端报单、回报和其他业务功能,同时也将多台托管服务器联系起来。

内置web服务,可以通过web服务的restful接口查询历史行情,也可以通过web服务向指定策略发起人工干预指令‼️。

每个子系统有自己独立的PUB_CHANNEL,你可以往自己的PUB_CHANNEL发布TOPIC,比如行情子系统可以发布新合约上线、合约参数的变化情况、风控子系统可以定制自己的风控指标,发布到风控子系统的PUB_CHANNEL,每个子系统可以通过系统的统一的格式订阅和发布自己感兴趣的TOPIC‼️。

账户、策略、子策略、用户等各个层面独立的仓位和订单管理功能。

很多系统收到报单后会针对订单做事前风控的处理,这个环节成为了这些系统的瓶颈所在,系统默认对收到的订单按照账户维度做了分流,实现了无锁并行的风控处理,使得这个环节变得畅通无阻✈️,当然也可以对代码稍加修改或者以后增加配置项,根据配置指定参数实现更细粒度维度的请求分流。

插件式的风控指标管理 ,可以根据系统统一的格式撰写动态链接库形式的风控指标,在交易系统运行中你可以启用、禁用或者升级这些风控插件‼️,从而实现风控指标的动态管理,满足7*24小时交易需要,开放式的api接口使得你可以在风控指标接口里得到你任何想要的数据,通过这些数据结合自己的需求定制灵活多样化的风控指标。

强大的pnl实时监控功能‼️,你可以在任何子系统(比如策略端)实时订阅并监控账户、策略、子策略、用户、市场、标的、多头头寸、空头头寸等每个维度的已实现盈亏、未实现盈亏(浮动盈亏)、手续费使用情况,或者说任意维度组合的以任意币种计价的已实现盈亏、未实现盈亏(浮动盈亏)、手续费使用情况‼️,你也可以同时监控多个策略组合,计算策略组合的已实现盈亏、未实现盈亏和手续费的使用情况,通过这些盈亏数据,你甚至可以撰写一个专门监控其他策略的监控策略❕,触发风控后往其他策略发送干预指令等种种灵活的功能。当然以后增加算法交易功能之后,你也可以 实时跟踪某一个算法单(包含多个子单)的盈亏情况。

系统外状态码动态维护功能,由于交易系统可能会接入多个交易所/交易柜台,每个外部交易服务都有自己特定的状态码,策略执行过程中也会收到未知的外部状态,系统在收到这些外部状态之后会自动收录,你可以在运行期间将其映射到指定的内部状态码,由此策略端就能够正确的处理新的状态码的业务逻辑。整个过程无需重启任何子系统❕。

交易代码表动态维护功能,系统为定时检测交易所代码表变动情况,除了新代码上下线还有他的一些最大最小的交易以及金额的变动单位等等,如果有变化立刻更新本地码表。

每一个策略可以指定若干套参数的子策略,子策略集合由一个线程池管理,子策略的参数可以在运行期间修改并自动更新,也可以在运行中增加或者禁用子策略❕。这一点对于一些7*24小时交易的市场尤为重要。

历史行请的保存和回放,可以设定历史行情按照一定的倍速回放,比如100倍或者0.01倍的速度回放保存的历史行情。

模拟成交,可以设定一个模拟订单最终状态为全成、部成或者废单等,结合上面的历史行情回放可以实现简单的回测功能。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Proudly powered by WordPress | Theme: HoneyWaves by SpiceThemes