contact@digquant.com.cn
400-1860-552
官方群:463071731

Auto-Trader -V2 全新回测结构介绍

**Auto-Trader 迎来了又一次技术革新,这次我们为大家带来了 Auto-Trader 全新的回测结构版本!,我们把它简称为`AT-V2`。** **下载地址:[Auto-Trader 新版本2.3.1](https://www.digquant.com.cn/at.php "Auto-Trader 新版本")** **`AT-V2`结构结合了Matlab的并行计算,使得回测效率大大提升。同时通过针对回测时间轴的提前提取,提前计算好所有策略买卖逻辑中需要的因子判断条件,并行计算多因子、多标的,大大缩短由于多标的多因子而造成的单线程循环所消耗的时间。下面就为大家详细介绍一下`AT-V2`结构。** **同时,参加此次`横琴杯`大赛的同学也需要使用`AT-V2`结构进行策略编写。希望全新的`AT-V2`结构让你的策略更加精确和高效!** ##AT-V1(旧结构)与 AT-V2(新结构)的对比## ###1、速度### 在**`AT-V1`**结构下,策略每次刷新的时候,会获取所需的数据,并对数据做相应的计算得出结果,然后根据结果发出各类交易的信号。 ![](./data/attachment/forum/201709/19/155512uz63nh3rqqx7hh9k.png) 然而,在**`AT-V2`**结构下,所有回测要用到的数据都需要在策略开头做一个订阅申明,回测开启时,会首先开启Matlab的并行计算功能,将策略中的各种运算在订阅的数据上进行运算,所有的运算结果形成对应的时间序列方便后续提取。然后,当策略按着时间轴获取数据时,也能一并获得时间轴上的计算结果进行策略逻辑的判断。**这种结构避免了重复提取数据以及循环运算的繁琐,大大缩短了回测时间。** ###2、时效对比### ![](./data/attachment/forum/201709/19/160036mqqtdst7iitliavl.png) 1、AT-V2结构提升速度平均为AT-V1的10倍。 2、针对精细程度越为细致的策略,AT-V2结构能够提升的速度较明显。 3、多品种回测时,AT-V2回测结构并行计算远远优于AT-V1回测。几乎与单品种计算同时间级别。 ##AT-V2结构介绍## ###回测结构### ####1、坚决防止未来函数#### ![](./data/attachment/forum/201709/19/153717j8h0ciicnkbt2t40.png) 为保持回测的真实性与交易状况一致,防止未来函数等预设性问题,回测函数调用坚持以**`严谨的实际买卖逻辑进行下单,根据回测时间刷新频率,以每Bar进行条件判断买卖下单`**。 ####2、精细#### Auto-Trader支持对**`全市场`**的回测,包含每日、分钟、tick三个级别,不仅在策略中的止盈止损会精确到tick级别计算,还可以将整个策略以tick级别进行回测。 ####3、高效#### 将数据矩阵化处理,采用并行云端,能够高效快速进行回测,回测速度与同类相比**`最快`**。 对比结果(仅以分钟线做测试,多品种) ![](./data/attachment/forum/201709/19/161634aj36p56f61gw6411.png) ####4、详尽#### 回测结果展示近百个指标的详尽绩效分析报告,精细展示买卖点,并能够在多品种回测中按单个标的进行分析。 ![](./data/attachment/forum/201709/19/162015dm7mphfzfq2qmwhl.png) ####4、轻松从模拟交易转化成实盘交易#### 我们提供完全仿真与实盘的模拟交易所,完善用户在模拟研究方面的需求。用户在完成策略研究后,只需添加实盘交易账号,将策略中的账户指向该交易账号即可进行**`策略实盘下单`**。 ####5、信息安全#### 针对大型机构的使用用户,本地软件的形式可以将所有的策略信息全部保存在本地,完全保护了用户的在开发研究以及交易过程中的**`私密性`**。研究过程中的策略代码无需上传,买卖交易中的下单信息直接对接交易所,极大的保障了用户的信息安全。 ####6、强大稳健的系统架构#### 基于稳定强大的系统架构,使得能够对**`多品种、多周期、多账户、多交易市场`**、以及**`多策略`**等复杂架构进行支持。 ## AT-V2结构策略示例## ###ATR的示例策略为例:### ####1、参数入参#### `AT-V1`结构下,一个策略函数可以写成任意形式的输入参,然而在**`AT-V2`**结构下,输入参数的格式得到了固定,分别为`bInit`,`bDayBegin`,`cellPar`固定三个。如图所示: ![](./data/attachment/forum/201709/19/165441mozrnygr2n4e2qzc.png) `lens`,`shareNum`, `stoploss`,`stopprofit`,`traillinggap`为5个策略所需的变量,都依次存进`cellPar`里。 ####2、初始化#### 而`bInit`和`bDayBegin`分别指代俩种特定的场景,如图所示: ![](./data/attachment/forum/201709/19/165634t9c66gxdx9p600tx.png) `If bInit`: 代表判定为策略开启的时刻,来进行一些初始化的设定,包括一些数据的订阅和函数的调用都可以在此完成。 `If bDayBegin`:代表判定为交易日的第一根Bar, 来进行一些日内的初始化,包括一些参数的重新计算等。 `bInit`和`bDayBegin`都是为了使用者能够更加方便,简洁的编写策略。 ####3、数据订阅 #### 新结构下,在策略的开头订阅数据是一个很重要的部分。订阅数据的方法也非常的简便。 ![](./data/attachment/forum/201709/19/170027pxu6450g5peo6npl.png) 首先要先申明一个全局变量`g_idxK`用于存储订阅数据后返回的标识,然后进行数据的订阅。 ![](./data/attachment/forum/201709/19/170115of0q06fxl2xls5ih.png) ####4、逻辑函数#### 如上,我们已经订阅了回测期内所有的1分钟数据。那么我们要怎么用这些数据呢? 首先,我们可以将我们策略每次的判断逻辑写成函数,然后将该函数在订阅的数据上一次性算完,每个时间点都给出对应的计算结果。 ![](./data/attachment/forum/201709/19/170520aaf4f4k72qf7cbck.png) ` MyATR`即为自定义的函数,`g_idxK`则是之前储存的所订阅数据的一个标识,作为参数传入。返回的`g_idxAT`R为另一个全局变量,同样需在策略开头申明,用于存储该函数计算结果的一个标识。 ![](./data/attachment/forum/201709/19/170532p1767rvffzfb7567.png) 在策略刷新过程中,通过以上调用该标识可以拿到当前时点最近的n个计算结果,此例中n为1。 `MyATR`函数的详细定义如下: ![](./data/attachment/forum/201709/19/170650d4bovq4oztan0nrh.png) ####5、数据处理#### 主要通过`traderGetRegKData`来获取的数据来进行相应的计算。其中第一个参数是标的数据的标识,此例中写为`idxK(i, :)`是指获取第i个标的的数据,对应出来的数据结构如下: ![](./data/attachment/forum/201709/19/170940vvkexk8v8vff8v8z.png) 列为时间轴顺序。第一行为时间,每个品种的价量数据占8行,分别为2行`open`;3行`high`;4行`low`;5行`close`;6行`volume`;7行`amount(成交金额)`;8行`openInterest(持仓量)`。也可以一次获得所有标的的数据,则返回的矩阵向下延伸,每增加一个品种则增加8行。注意获取所需的数据进行计算。注意返回参数的维度对应的是标的的个数。 ####6、交易逻辑#### 当订阅好数据和计算完结果后,便可进入的正常的策略刷新结构,即`else`下 该框架下仍然和`AT-V1`类似,按时间轴的顺序进行逻辑判断和交易信号的发出,不同的是不需要再去一次次获取数据进行计算,直接提取对应时间点上的计算结果作为判断依据即可。 ![](./data/attachment/forum/201709/19/171456iz0k44gaag24vgkv.png) `traderGetRegUserIndi`即返回当前时间点上的该函数的计算结果用以判断。 **`AT-V2`**结构下并行计算和矩阵的应用得到了加强,从而得以大大提升了回测的效率,使得更多复杂的策略在编写上和回测上都变得更加有效率。 ####7、AT-V2 结构小Tips#### 1、`AT-V1`结构中通常读取的是标的的市场和代码,而在**`AT-V2`**结构中通常改为标的的序号,即标的在整个标的序列里的位置。 2、**`AT-V2`**结构中读取数据需要在策略运行的第一根bar注册数据,返回注册数据的`index`, 在策略中通过访问`index`来获取数据,即通常我们有以下的用法: ```matlab function demoStart(bInit, bDayBegin, cellParam) if bInit index = traderRegKData('min', 5) ··· else dataMatrix = traderGetRegKData(index, length, false); end end ``` 注意到在`bInit`部分,我们注册所有标的5分钟频率数据,注册数据`traderRegKData`返回的是一个矩阵,包含着每个标的数据的`index`,在`else`部分,我们使用`traderGetRegKDat`a访问数据的`index`,`length`是我们希望从当前bar往前取bar的数量,`false`表明采用不补齐的数据。 3、在新结构中,我们支持用户使用`traderRegUserData`函数从`外部导入数据`。 4、采用并行计算因子的方式 通过在策略中`if bInit`阶段调用`traderRegUserIndi`函数来注册用户自建的外部因子,例如在策略中实现了子函数`myMean`如下: ```matlab function value = myMean(cellPer, bpPFCell) ··· end ``` ## 总结## 以上就是**`AT-V2`**结构的全部介绍啦,后面我们会推出更多基于此结构的策略案例。供大家参考学习! 那还在等什么呢? 快速下载新版的Auto-Trader 用起我们的全新回测结构吧!