# 回测 / 快速回测 ## `QuickBackTesting` 声明:class 执行简化的比例类组合回测,并查询组合与基准收益序列 ### `fEndT` 声明:field 回测截止时间 当前系统时间 可见性:`public` 类型:date_time ### `fCycle` 声明:field 调仓周期 月线 可见性:`public` 类型:string ### `fPoint` 声明:field 初始点位 1000 可见性:`public` 类型:integer ### `fIndexId` 声明:field 基准代码 SH000300 可见性:`public` 类型:string ### `fRateType` 声明:field 比例类组合资金分配方式 4:等权重 可见性:`public` 类型:integer ### `quickBackTest()` 声明:function 执行快速回测主流程,循环调仓日期、生成目标持仓并完成清算 可见性:`public` 返回:array ### `getTimeSeries()` 声明:function 获取快速回测的调仓日期时间序列;可重写 可见性:`public` 返回:array #### 示例 范例01:调用基类实现 ```tsl obj := createObject("QuickBackTesting"); obj.FBegT := intToDate(20130101); obj.FEndT := intToDate(20130108); obj.FCycle := cy_day(); ret := obj.GetTimeSeries(); echo toStn(ret); return ret; // 输出:array(41278.0,41281.0,41282.0) ``` ### `getTradeOrder(v_end_t)` 声明:function 获取指定时点的目标持仓调仓数据;策略子类必须重写 可见性:`public` | 参数 | 类型 | 说明 | | --------- | --------- | -------------- | | `v_end_t` | date_time | 日期,当前时点 | 返回:array ### `getPortfolioReturn()` 声明:function 获取区间资产数据,返回字段同 GetPortfolioReturn(),此方法可指定区间 可见性:`public` 返回:array ### `getPortfolioReturn(v_beg_t, v_end_t)` 声明:function 获取区间资产数据,返回字段同 GetPortfolioReturn(),此方法可指定区间 可见性:`public` | 参数 | 类型 | 说明 | | --------- | -------- | ------ | | `v_beg_t` | datetime | 开始日 | | `v_end_t` | datetime | 截止日 | 返回:array ### `getPortfolioReturn2(v_beg_t, v_end_t)` 声明:function 获取区间组合累计收益率(%) 可见性:`public` | 参数 | 类型 | 说明 | | --------- | -------- | ------ | | `v_beg_t` | datetime | 开始日 | | `v_end_t` | datetime | 截止日 | 返回:float ### `getPortfolioReturn3(v_beg_t, v_end_t)` 声明:function 获取区间内组合、基准、超额及累计收益率序列 可见性:`public` | 参数 | 类型 | 说明 | | --------- | -------- | ------ | | `v_beg_t` | datetime | 开始日 | | `v_end_t` | datetime | 截止日 | 返回:array #### 示例 范例01:调用示例 ```tsl //新建子类继承基类 Type MyQKBackTesting=class(QuickBackTesting) public function GetTimeSeries();override; function GetTradeOrder(vEndT);override; end; //重写GetTimeSeries方法 function MyQKBackTesting.GetTimeSeries();override; begin //具体代码省略 end; //重写GetTradeOrder方法 function MyQKBackTesting.GetTradeOrder(vEndT);override; begin //具体代码省略 end; ``` 范例02:调用示例 ```tsl Function MyQKBackTesting(BegT,EndT,MyPortfolioArr); Begin //创建对象 obj := CreateObject('MyQKBackTesting'); //初始化实例,给变量赋值(其他变量可参考成员变量介绍) obj.FBegT := BegT; obj.FEndT := EndT; //回测:调用对象obj的backtest方法 obj.QuickBackTest(); //通过调用类提供的查询方法得到回测结果 return array( "资产配置":obj.GetPortfolioReturn(BegT,EndT), "组合收益率":obj.GetPortfolioReturn2(BegT,EndT), '区间组合收益率序列':obj.GetPortfolioReturn3(BegT,EndT) ); End; ``` 范例03:调用示例 ```tsl Function TSFL_QuickBackTesting_File(Begt,Endt,IndexId,IniPoint,Ratetype,Mydata); Begin obj := CreateObject('QKbackTestEg'); //用户导入的配置数据 obj.MyPortfolioArr := mydata; //回测开始时间 obj.FBegT := BegT; //回测截止时间 obj.FEndT := EndT; //基准代码 obj.FIndexId := IndexId; //比例配比方式(本范例以用户自定义输入) obj.FRateType := Ratetype; //初始资金 obj.FPoint := IniPoint; //回测 obj.QuickBackTest(); //获取返回结果(返回结果可根据需要选择) return array( '资产配置':obj.GetPortfolioReturn(begt,endt), '区间收益率':obj.GetPortfolioReturn2(begt,endt), '组合和基准收益率序列':obj.GetPortfolioReturn3(begt,endt) ); End; Type QKbackTestEg=class(QuickBackTesting) public MyPortfolioArr; function GetTimeSeries();override; function GetTradeOrder(vEndT);override; end; function QKbackTestEg.GetTimeSeries();override; begin //从导入的配置文件中获取调仓日序列 return MyPortfolioArr[:,'截止日'] union2 array(); end; function QKbackTestEg.GetTradeOrder(vEndT);override; begin //查询某个调仓日的配置数据 t := Select * from MyPortfolioArr where ['截止日']=vEndT end; return t; end; ```