Files
playbook/skills/tsl-api-reference/references/codegen/module/quick-back-testing.md
T
2026-08-14 17:15:41 +08:00

285 lines
5.5 KiB
Markdown

# 回测 / 快速回测
## `QuickBackTesting`
声明:class
执行简化的比例类组合回测,并查询组合与基准收益序列
<!-- tags: 调用 历史模拟 策略验证 比较基准 业绩基准 快速测试 -->
### `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
执行快速回测主流程,循环调仓日期、生成目标持仓并完成清算
<!-- tags: 历史模拟 快速回测 策略验证 -->
可见性:`public`
返回:array
### `getTimeSeries()`
声明:function
获取快速回测的调仓日期时间序列;可重写
<!-- tags: 查询 调仓周期 时序 -->
可见性:`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
获取指定时点的目标持仓调仓数据;策略子类必须重写
<!-- tags: 查询 成交明细 交易指令 -->
可见性:`public`
| 参数 | 类型 | 说明 |
| --------- | --------- | -------------- |
| `v_end_t` | date_time | 日期,当前时点 |
返回:array
### `getPortfolioReturn()`
声明:function
获取区间资产数据,返回字段同 GetPortfolioReturn(),此方法可指定区间
<!-- tags: 查询 投资组合 资产组合 -->
可见性:`public`
返回:array
### `getPortfolioReturn(v_beg_t, v_end_t)`
声明:function
获取区间资产数据,返回字段同 GetPortfolioReturn(),此方法可指定区间
<!-- tags: 查询 投资组合 资产组合 -->
可见性:`public`
| 参数 | 类型 | 说明 |
| --------- | -------- | ------ |
| `v_beg_t` | datetime | 开始日 |
| `v_end_t` | datetime | 截止日 |
返回:array
### `getPortfolioReturn2(v_beg_t, v_end_t)`
声明:function
获取区间组合累计收益率(%)
<!-- tags: 查询 回报率 投资收益 投资组合 资产组合 -->
可见性:`public`
| 参数 | 类型 | 说明 |
| --------- | -------- | ------ |
| `v_beg_t` | datetime | 开始日 |
| `v_end_t` | datetime | 截止日 |
返回:float
### `getPortfolioReturn3(v_beg_t, v_end_t)`
声明:function
获取区间内组合、基准、超额及累计收益率序列
<!-- tags: 查询 组合收益率 基准收益率 -->
可见性:`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;
```