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

5.5 KiB

回测 / 快速回测

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:调用基类实现

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:调用示例

//新建子类继承基类
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:调用示例

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:调用示例

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;