WonderTrader
是一个基于C++
核心模块的,适应全市场全品种交易的,高效率、高可用的量化交易开发框架。
WonderTrader
依托于高速的C++
核心框架,高效易用的应用层框架(wtpy),致力于打造一个从研发、交易、到运营、调度,全部环节全自动一站式的量化研发交易场景。
WonderTrader
于0.9
开启了一个新的UFT引擎,针对超低延时交易的需求进行实现,经过一系列的优化以后,系统延迟在175纳秒之内。
WonderTrader
的实盘运行架构
WonderTrader
的优势丰富的交易引擎
- CTA引擎,也叫同步策略引擎,一般适用于标的较少,计算逻辑较快的策略,事件+时间驱动。典型的应用场景包括单标的择时、中频以下的套利等。Demo中提供的DualThrust策略,单次重算平均耗时,Python实现版本约70多微秒,C++实现版本约4.5微秒。
- SEL引擎,也叫异步策略引擎,一般适用于标的较多,计算逻辑耗时较长的策略,时间驱动。典型应用场景包括多因子选股策略、截面多空策略等。
- HFT引擎,也叫高频策略引擎,主要针对高频或者低延时策略,事件驱动,系统延迟在1-2微秒之间
- UFT引擎,也叫极速策略引擎,主要针对超高频或者超低延时策略,事件驱动,系统延迟在200纳秒之内
完善的开发接口
- 高效易用的数据接口:每个策略都会有独立的上下文模块,上下文会自动缓存策略所需要的数据,策略直接调用即可。
- 简洁的信号接口:策略只需要设置目标仓位,后台自动执行。
- 上下文无关的策略逻辑:策略不需要自己记录任何数据,每次只需要向接口查询即可,数据全部缓存在内存中,访问效率有保障。
专业的策略管理
- 策略组合统一管理:采用策略组合的方式,主要为了配合专业机构的产品管理。一个组合盘,对应若干个策略的若干个标的,再设置一个基本的单位资金量,这就是产品管理的基本组合盘,方便扩展。
- 目标仓位合并执行:目标仓位合并以后,避免了自成交的风险,同时降低了保证金占用和佣金开销。
- 理论部位独立存储:策略的理论部位是独立存储的,组合盘的整体绩效也是独立核算的,轻松胜任内部管理。
- 多账户并发执行:组合的目标头寸确定以后,就通过多个交易通道同步执行,可以有效的保障不同的账户的绩效的一致性。
全类型的回测支持
- 语言支持全:不论是
C++
开发的策略还是wtpy
下开发的python
策略,或者其他语言子框架下开发的策略,都在统一的回测引擎中统一回测。- 回测效率高:回测引擎采用
C++
开发,回测效率高,速度快。不管是C++
策略还是Python
策略,都能快速验证。- 策略支持完备:除了CTA策略、SEL策略可以回测,HFT策略、UFT策略和执行单元也能回测
高效的数据伺服
- 本地数据伺服:
WonderTrader
内置的存储引擎采用本地存储,在本地建立数据伺服,通过udp
端口广播实时行情,实现1+N
的服务结构,可以同时向多个组合盘提供无差别数据服务。专业数据供应商级别的架构,支持搭建多级分发体系,轻松应对各种需求场景。- 缓存历史数据:交易过程中,历史数据全部缓存到内存中,同时采用内存直接引用内存数据切片的机制,从根本上避免数据拷贝,提高访问效率。
- 高效存储引擎:实时数据采用
mmap
文件,读写高速并且不会丢失数据。同时支持mysql数据库存储历史数据,更方便在此基础上搭建自有的投研数据库。
灵活的风险控制
- 组合盘资金风控:组合盘有预设的资金规模,可以针对组合盘的虚拟资金,进行组合盘的资金风控。最大的优点是,如果组合盘处于下行阶段,触发风控以后,即使资金账户没有打到风控线,也不会再继续下行了。
- 通道流量风控:主要针对合规风险,控制的是总撤单笔数、短时间内下单次数和撤单次数等指标。
- 账户资金风控:和一般意义上的资金风控一致,主要控制账户资金的回撤等。
- 紧急人工介入:提供一个紧急的人工介入的入口,通过上传一个配置文件,达到控制的目的。主要适用于单品种出现风险,如果全市场风险,人工停止系统即可。
- 离合器机制:离合器机制依托于信号和执行分离的机制的,主要是如果策略或组合发生风险,通过离合器机制,直接断开信号执行。优点是不影响策略的逻辑,只断开信号的执行,可以继续观察策略在特定行情阶段的表现,和理论研究相互印证。
- 组合盘运行监控:可以查看实时运行日志、策略理论数据、交易通道数据等,并提供手动启停的入口。
- 自动调度服务:全自动调度定时任务(启动、停止、重启),支持按周设置任务重复,支持进程守护。
- 实时事件通知:监控服务接收组合盘推送的事件,然后转发给监控端,提示给用户。
- 在线回测分析:全自动远程部署以后,提供在线回测服务,并进行结果分析和图形化展示。
- 全自动远程部署(在建):全自动在线远程部署,提供回测环境、实盘环境等多种应用场景的自动化部署服务。
环境准备好了以后,还需要确定我们准备使用什么方式存储数据。WonderTrader实盘环境下只支持:自有文件存储。而回测环境下,还支持直接从csv读取数据(仅限于历史K线数据)。 文件存储 历史K线数据文件,采用zstd压缩后存放。高频历史数据,包括tick数据,股票level2的委托明细、成交明细、委托队列,也采用压缩存放的方式。A股全市场一天的level2数据,压缩以后也就是大概2G不到的
WonderTrader是什么 WonderTrader是一个基于C++核心模块的,适应全市场全品种交易的,高效率、高可用的量化交易开发框架。 面向于专业机构的整体架构 数十亿级的实盘管理规模 从数据落地清洗、到回测分析、再到实盘交易、运营调度,量化交易所有环节全覆盖 WonderTrader依托于高速的C++核心框架,高效易用的应用层框架(wtpy),致力于打造一个从研发、交易、到运营、调度,全
最终策略源码如下 from wtpy import BaseStrategy from wtpy import Context class StraDualThrust(BaseStrategy): def __init__(self, name:str, code:str, barCnt:int, period:str, days:int, k1:float, k2:float, isForSt
1. WTRunner 是项目启动文件; 2. 需要添加依赖库和动态库;(include 和 lib) 3. 不出意外的话,此时WtRunner编译后,终端会生成9个成功,1个失败;(error:copyfiles.bat相关的错误) 4. 将 Porter下面的5个子文件(TestPorter,Wtcore,WtExecMon,WtPorter,WtRunner)挨个生成一边; 5. 不出意外的
Time: ~30 mins 面试之前 hr 让我准备交易策略方向的内容,但实际上根本没问过。 自我介绍,之后就是问八股 1. MySQL 的索引 (经典老八股) 2. 量化的优点 3. C++ 项目讲一下 项目中 Socket用的什么?线程用的什么? 4. C++ 用过哪些开源的网络库? 5. 介绍一下 RabbitMQ (自己根本没有用过,消息队列只用过 Kafka,也没写在简历上,还好之前看
作为无基础的初学者,只想先大概了解一下 Python,随便编个小程序,并能看懂一般的程序,那些什么 JAVA 啊、C 啊、继承 啊、异常啊通通不懂怎么办,于是我找了很多资料,写成下面这篇日记,希望以完全初学者的角度入手来认识 Python 这个在量化领域日益重要的语言
在VNODE的后台中,墨客的交易格式定义如下: type txdata struct { AccountNonce `json:"nonce" gencodec:"required"` SystemContract `json:"syscnt" gencodec:"required"` Price `json:"gasPrice" gencode
web3.eth.sendTransaction()方法向以太坊网络提交一个交易。 调用: web3.eth.sendTransaction(transactionObject [, callback]) 参数: transactionObject:Object - 要发送的交易对象,包含以下字段: from - String|Number: 交易发送方账户地址,不设置该字段的话,则使用web3
即将秋招,投的实习,在这儿记下时间线,后面可能当成秋招记录贴 6.29笔试,a了1+0.4+0.1 第一题简单没印象了 第二题给定点查询所处区间数量,当时没用前缀和被卡了runtime 第三题多重背包问题,刷题没仔细研究背包,直接放弃 7.1发的一面邀请,找hr推迟到7.3 7.3面试五十分钟左右,面试官针对简历提问,没有问学习范围外的问题,也是简历内容太少让面试官没有什么问的,在这列出提到的C+
发面经,攒好运 timeline 6.20笔试 2.1 6.21约一面 6.26一面,第二天约二面 7.3二面 一面 上来先自我介绍,面试官看到我是人工智能专业的,问了下我简历上写的比赛,谈了下喜欢的游戏,活跃了下氛围。 然后从笔试中没有a的那题(第三题,板块有分享过)开始谈,主要谈了下思路(复盘) 下面就是常规八股,vector list的区别,c++内存空间分配情况,static,动态库与静态