-
WonderTrader
是一个基于C++
核心模块的,适应全市场全品种交易的,高效率、高可用的量化交易开发框架。- 面向于专业机构的整体架构
- 数十亿级的实盘管理规模
- 从数据落地清洗、到回测分析、再到实盘交易、运营调度,量化交易所有环节全覆盖
-
WonderTrader
依托于高速的C++
核心框架,高效易用的应用层框架(wtpy),致力于打造一个从研发、交易、到运营、调度,全部环节全自动一站式的量化研发交易场景。
- 丰富的交易引擎
- CTA引擎,也叫同步策略引擎,一般适用于标的较少,计算逻辑较快的策略,事件+时间驱动。典型的应用场景包括单标的择时、中频以下的套利等。
- SEL引擎,也叫异步策略引擎,一般适用于标的较多,计算逻辑耗时较长的策略,时间驱动。典型应用场景包括选股系统、多因子CTA等。
- HFT引擎,也叫高频策略引擎,主要针对高频或者低延时策略,事件驱动。
- 完善的开发接口
- 高效易用的数据接口:每个策略都会有独立的上下文模块,上下文会自动缓存策略所需要的数据,策略直接调用即可。
- 简洁的信号接口:策略只需要设置目标仓位,后台自动执行。
- 上下文无关的策略逻辑:策略不需要自己记录任何数据,每次只需要向接口查询即可,数据全部缓存在内存中,访问效率有保障。
- 专业的策略管理
- 策略组合统一管理:采用策略组合的方式,主要为了配合专业机构的产品管理。一个组合盘,对应若干个策略的若干个标的,再设置一个基本的单位资金量,这就是产品管理的基本组合盘,方便扩展。
- 目标仓位合并执行:目标仓位合并以后,避免了自成交的风险,同时降低了保证金占用和佣金开销。
- 理论部位独立存储:策略的理论部位是独立存储的,组合盘的整体绩效也是独立核算的,轻松胜任内部管理。
- 全类型的回测支持
- 语言支持全:不论是
C++
开发的策略还是wtpy
下开发的python
策略,或者其他语言子框架下开发的策略,都在统一的回测引擎中统一回测。 - 回测效率高:回测引擎采用
C++
开发,回测效率高,速度快。不管是C++
策略还是Python
策略,都能快速验证。 - 策略支持完备:除了CTA策略、SEL策略可以回测,HFT策略和执行单元也能回测
- 语言支持全:不论是
- 高效的数据伺服
- 本地数据伺服:
WonderTrader
内置的存储引擎采用本地存储,在本地建立数据伺服,通过udp
端口广播实时行情,实现1+N的服务结构,可以同时向多个组合盘提供无差别数据服务。专业数据供应商级别的架构,支持搭建多级分发体系,轻松应对各种需求场景。 - 缓存历史数据:交易过程中,历史数据全部缓存到内存中,同时采用内存直接引用内存数据切片的机制,从根本上避免数据拷贝,提高访问效率。
- 高效存储引擎:实时数据采用
mmap
文件,读写高速并且不会丢失数据。同时支持mysql数据库存储历史数据,更方便在此基础上搭建自有的投研数据库。
- 本地数据伺服:
- 灵活的风险控制
- 组合盘资金风控:组合盘有预设的资金规模,可以针对组合盘的虚拟资金,进行组合盘的资金风控。最大的优点是,如果组合盘处于下行阶段,触发风控以后,即使资金账户没有打到风控线,也不会再继续下行了。
- 通道流量风控:主要针对合规风险,控制的是总撤单笔数、短时间内下单次数和撤单次数等指标。
- 账户资金风控:和一般意义上的资金风控一致,主要控制账户资金的回撤等。
- 紧急人工介入:提供一个紧急的人工介入的入口,通过上传一个配置文件,达到控制的目的。主要适用于单品种出现风险,如果全市场风险,人工停止系统即可。
- 离合器机制:离合器机制依托于信号和执行分离的机制的,主要是如果策略或组合发生风险,通过离合器机制,直接断开信号执行。优点是不影响策略的逻辑,只断开信号的执行,可以继续观察策略在特定行情阶段的表现,和理论研究相互印证。
- 强大的控制台(wtpy的监控服务)
- 团队内控
策略组合管理的方式,给团队内部管理提供了完美的解决方案。
- 一方面,不同投研人员,不同的策略可以组合成一个组合运行,而且每个策略都有自己的理论部位,即使交易相同标的也不会互相干扰;
- 另一方面,C++级别的代码可以提供最大的策略保密性,投研人员不用担心策略的泄露;
- 策略的绩效是独立核算的,团队内部的考核指标可以很容易实现。
- 多账户交易(多产品配置)
对于不同行情周期下的策略组合,一般团队都会有一个当下最适应的策略组合。但是同一时期,团队可能会同时管理很多个账户,而其实这些账户用到的策略组合都是相同的。这个时候
WonderTrader
平台提供的1+N执行架构就能够完美的满足这个需求。- 首先,策略组合有自己的单位资金容量和对应的风险参数,以及各个策略的单位交易数量;
- 其次,不同的账户有不同的资金规模和风险偏好,这个时候只需要根据这些要求配置不同的手数倍率即可;
假如某组合盘P基本资金规模为500w,预期收益30%,最大回撤10%,收益风险比3:1;A账户使用该组合盘P交易,A账户的资金量为1000w,可以接受的最大回撤也是10%;B账户也使用该组合盘P交易,资金量也是1000w,但是可以接受的最大回撤为20%;这个时候因为A账户风险参数和基本盘一致,所以A账户的手数放大倍数为资金规模/基本盘的资金规模=1000w/500w=2倍;B账户因为可以忍受最大回撤20%,所以手数比例还要再放大一倍,即B账户可以配置4倍。
- 第三,不同的账户可以配置独立的风控逻辑,账户之间不会互相影响。
- 多标的跟踪
一些用解释型语言(如
Python
)开发核心模块的量化交易平台,在标的数不多的情况下,能够胜任各种不同的应用场景。但是当需要跟踪的标的数达到100个以上,甚至是50个以上时,就无法满足需求了。一方面资源占用大,利用multiprocess等机制,虽然各个标的独立运行,但是上百个标的就要新建上百个进程,内存和CPU开销都非常大;另一方面策略效率低,资源争强严重的情况下,策略反应也会变慢。 WonderTrader核心采用C++开发,数据伺服更是一开始就设计成向多个组合同时提供服务的架构,同时策略和执行剥离,信号执行和策略计算完全在两个不同的线程中独立运行。在这样的架构下,就能够很好的满足多标的跟踪的需求。 - 大计算量策略
一些策略计算量会非常惊人,比较典型的就是选股策略,不管是用多因子也好,还是基本面也好,都会从数千只股票中,逐步筛选,从而得到最后的目标股池。另外,一些多标的的多因子框架也具有较大的计算量。这样的策略,计算量非常庞大,耗时也长。
WonderTrader
的SEL引擎就是为了满足这方面的需求而定制的。SEL引擎采用异步时间驱动的模式,通过向引擎注册重算时间调度(支持日内,每日、每周、每月的等多种周期),定时触发重算,然后调整多标的的目标仓位,从而输出信号。
wtpy
是构建在WonderTrader
核心模块之上的,使用Python3
开发的WonderTrader
的Python3
子框架Python
作为量化领域最流行的语言,在时序数据处理上有许多非常受欢迎的强大的第三方库Python
作为一种解释型语言,代码编写和调试都非常方便,不需要编译就可以直接运行Python
的跨平台属性也使Python
可以应用到更多的场景中wtpy
主要功能是作为WonderTrader
在Python
语言的外延- 同时
wtpy
还内置了一个强大的监控服务组件WtMonSvr
。该组件提供了远程的webui
的监控界面,可以实时监控策略组合的运行情况,还提供全天24×7
的自动调度服务,为你的交易保驾护航。
-
WonderTrader
的github
地址:https://github.com/wondertrader/wondertrader -
wtpy
的github
地址:https://github.com/wondertrader/wtpy -
wtpy
获取地址:https://pypi.org/project/wtpy/wtpy
可以直接在python3.5
以上的版本安装pip install wtpy
WonderTrader
开源以后,虽然没有专门进行过推广,但是也吸引了一些愿意第一批吃螃蟹的用户。WonderTrader
还不够成熟的当下,还能够得到这些用户的认可,这是WonderTrader
开发团队的荣幸。在这里要特别感谢@sibaba8888,他提出了不少宝贵的改进意见,同时也要感谢@sunphoenix,他给我们也提供了很多的有用的信息。
- 关注公众号
wondertrader
,可以收到WonderTrader
的实时资讯 - 用户交流QQ群上线:
610730738
(加入前请先star
一下, 然后提供github
用户名) - 更多
WonderTrader
的文档请看https://wondertrader.github.io/