鱼与熊掌,我偏要兼得!AT量能全新高速回测结构,隆重发布!

AT量能重磅更新,推出全新回测引擎

 

 

半年,我们没有发布大版本更新,就为这一刻······

 

超过4000小时内测,多至3000标的分钟级反复消耗性压力检验。

 

AT量能引来重大版本更新!

 

这可能是至今为止

 

Matlab平台最快的回测结构!

 

 

AT全新BT回测引擎

正式发布

 

准确还是高效,一个头疼的问题

AT量能策略研究终端的回测结构一直以准确性傲视同行,它坚决防止未来函数在回测结构的发生,比如这样:

 

它在回测函数调用坚持以严谨的实际买卖逻辑进行下单根据回测时间刷新频率以每Bar进行条件判断买卖下单。在一些轻量级的策略编写软件中,你非常轻易地获得一条完美曲线比如这个:

 

 

实际上,他是这一个:

 

 

 

但是,它带来了时间消耗的代价。准确度和效率之间似乎有着一条跨不去的坎。

 

比如在全市场股票扫描的分钟级调用中,这个利器变得有心无力,以准确为目标的回测结构导致了大量的耗时。

 

面对Auto-Trader策略的精细回测,丰富全面的绩效计算这条“大鱼”似乎只能牺牲掉时间这个“熊掌“。

全新AT量能的BT回测引擎在准确和效率上克服了这个技术瓶颈!

 

数据提取也将给您极致体验

新版本下,量化交易数据提取速度进一步提升,利用数字动能独有的海量数据专利提取技术,新版本的下载速度将迎来更大的使用体验。

 

百兆bps桌面带宽速度之下,行情数据提取速度提升到极限:

 

 

鱼和熊掌我们皆诚意奉上

Auto-Trader继完成精细化、缜密的回测结构之后,大胆突破,进一步优化结构,完成全新的回测结构的开发工作,在保留其一贯精准的高品质要求的基础上,大幅度提高回测的效率。新结构之下,即使股票的全市场扫描,在新回测结构下也与单品种相差无几。

 

新旧结构对比与实现机理

回测结构的介绍如下图所示:

 

 

我们也精心奉上茶点,供您评鉴

基于新回测结构的所有原示例已经全部升级至V2结构,我们列出部分V2结构的策略

Probabilistic Momentum

 

统计一段时间的波动率,当前波动率异常低的时候,决定进场。

波动率低,今日收盘价大于昨日收盘价,且收盘价在30日均线上,多头入场。

波动率高,今日收盘价小于昨日收盘价,且收盘价在30日均线下,空头入场。

 

资金流向

 

此策略主要从持仓量,成交量入手,同时结合了短期移动平均和长期移动平均。

 

CalendarStrategy Plus

 

统计过去一段时间的最低价的最大值与最小值的差占最高价的最大值与最低价的最小值的差在一定范围内

同时满足收盘价在60日均线之上的条件下,做多

统计过去一段时间的最高价的最大值与最小值的差占最高价的最大值与最低价的最小值的差在一定范围内

同时满足收盘价在60日均线之下的条件下,做空

出场使用3:1的合约价值止盈止损比,并滚动式提高止盈止损。

 

 

Cups& Caps Overnight

 

判断某一区域的最低价的极小值出现之后,紧接着掉头向上走,同时收盘价也满足极小值区域拐头向上走,

同时满足收盘价在60日均线之上的条件下,做多

判断某一区域的最高价的极大值出现之后,紧接着掉头向下走,同时收盘价也满足极大值区域拐头向下走,

同时满足收盘价在60日均线之下的条件下,做空

出场使用3:1的合约价值止盈止损比

 

 

 

看得见的荣誉,看不见的功夫

AT量能 V2.2版本在半年的使用中,用户提出了大量的有用建议,我们一直在聆听,细心记录并快速完善。我们修复了这半年以来发现的各类大小问题,同时对各类使用体验进行大量细微调整。

 

部分修复问题清单:

Auto-Trader Pro V2.3.12017-09-11

1. 新增导出配置交易的配置列表功能。
2. 解决多实盘账户启动startRealTrade无法全部启动的问题。
3. 解决回测时在策略内部使用补齐的获取方式,只能获取到固定频率的问题。
4. 解决历史数据获取部分缺失的问题。
5. 解决手续费率显示错误问题。
6. 修正界面显示买卖点有所便宜等显示问题。

 

以一个ATR的示例策略为例:

1、参数入参

旧结构下,一个策略函数可以写成任意形式的入参,然而在新结构下,入参的格式得到了固定,分别为bInit,bDayBegin,cellPar固定三个。如图所示:

 

lensshareNum, stoploss, stopprofit, traillinggap为5个策略所需的变量,都依次存进cellPar里。

 

2、初始化

而bInit和bDayBegin分别指代俩种特定的场景,如图所示:

If bInit 代表判定为策略开启的时刻,来进行一些初始化的设定,包括一些数据的订阅和函数的调用都可以在此完成。

 

If bDayBegin代表判定为交易日的第一根Bar, 来进行一些日内的初始化,包括一些参数的重新计算等。

 

bInitbDayBegin都是为了使用者能够更加方便,简洁的编写策略。

 

3、数据订阅

新结构下,在策略的开头订阅数据是一个很重要的部分。订阅数据的方法也非常的简便。

首先要先申明一个全局变量g_idxK用于存储订阅数据后返回的标识,然后进行数据的订阅。

4、逻辑函数

如上,我们已经订阅了回测期内所有的1分钟数据。那么我们要怎么用这些数据呢?

 

首先,我们可以将我们策略每次的判断逻辑写成函数,然后将该函数在订阅的数据上一次性算完,每个时间点都给出对应的计算结果。

MyATR即为自定义的函数,g_idxK则是之前储存的所订阅数据的一个标识,作为参数传入。返回的g_idxATR为另一个全局变量,同样需在策略开头申明,用于存储该函数计算结果的一个标识。

在策略刷新过程中,通过以上调用该标识可以拿到当前时点最近的n个计算结果,此例中n为1。MyATR函数的详细定义如下:

 

5、数据处理

主要通过traderGetRegKData来获取的数据来进行相应的计算。其中第一个参数是标的数据的标识,此例中写为idxK(i, :)是指获取第i个标的的数据,对应出来的数据结构如下:

 

 

列为时间轴顺序。第一行为时间,每个品种的价量数据占8行,分别为2行open;3行high;4行low;5行close;6行volume;7行amount(成交金额);8行openInterest(持仓量)。也可以一次获得所有标的的数据,则返回的矩阵向下延伸,每增加一个品种则增加8行。注意获取所需的数据进行计算。注意返回参数的维度对应的是标的的个数。

 

6、交易逻辑

当订阅好数据和计算完结果后,便可进入正常的策略刷新结构,即else

该框架下仍然和旧结构类似,按时间轴的顺序进行逻辑判断和交易信号的发出,不同的是不需要再去一次次获取数据进行计算,直接提取对应时间点上的计算结果作为判断依据即可。

traderGetRegUserIndi即返回当前时间点上的该函数的计算结果用以判断。

新结构下并行计算和矩阵的应用得到了加强,从而得以大大提升了回测的效率,使得更多复杂的策略在编写上和回测上都变得更加有效率。

 

【新结构的小Tips】

那么在从普通回测结构转向在新结构的使用中,我们需要注意以下几点:

 

1. 结构中通常读取的是标的的市场和代码,而在v2结构中通常改为标的的序号,即标的在整个标的序列里的位置。

 

2. 结构中读取数据需要在策略运行的第一根bar注册数据,返回注册数据的index, 在策略中通过访问index来获取数据,即通常我们有以下的用法

注意到在bInit部分,我们注册所有标的5分钟频率数据,注册数据traderRegKData返回的是一个矩阵,包含着每个标的数据的index,在else部分,我们使用traderGetRegKData访问数据的indexlength是我们希望从当前bar往前取bar的数量,false表明采用不补齐的数据。

 

3. 在新结构中,我们支持用户使用traderRegUserData函数从外部导入数据。

 

4. 采用并行计算因子的方式 通过在策略中if bInit阶段调用traderRegUserIndi函数来注册用户自建的外部因子,例如在策略中实现了子函数myMean如下:

 

那还在等什么呢?

下载新版的Auto-Trader

用起我们的全新回测结构吧!