5.5 KiB
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;