问题描述:回测框架文档中有提供比例类-从外部导入组合配置数据的范例,数量类能不能也提供一个类似的范例?
A:当然可以,我们提供了实现该需求的函数,用户可以自行导入或根据自身需求进行修改
附件:
附件:TSFL_TSBackTesting_File_02.fun
使用范例如下:
//截止日
EndT := 20241230T;
//基准代码
IndexId := "SH000300";
//初始资金
IniCash := 100000000;
//成交价类别(收盘价)
PriceType := 2;
//成交量取整模式(不取整)
VolModType := -1;
//分红不再投资
DividendType := 0;
//不参与配股
AllotmentType := 0;
//开仓模式(固定成交量)
OpenVolType := 1;
//平仓模式(固定成交量)
CloseVolType := 1;
//费用类别(费率法)
FeeType := 1;
rdo2 importFile(ftCSV(),'',"C:\\Users\\Test\\Desktop\\配置组合.csv",MyPortfolioArr);
backtest_result:=TSFL_TSBackTesting_File_02(EndT,MyPortfolioArr,IndexId,IniCash,PriceType,VolModType,DividendType,AllotmentType,OpenVolType,CloseVolType,FeeType);
return backtest_result;
其中,外部组合配置数据如下
结果:
注:附件中函数代码如下
Function TSFL_TSBackTesting_File_02(EndT,MyPortfolioArr,IndexId,IniCash,PriceType,VolModType,DividendType,AllotmentType,OpenVolType,CloseVolType,FeeType);
Begin
BegT := vselect minof(['截止日'])from MyPortfolioArr end;
obj := CreateObject('TSMyBackTestingQuantity');
//用户导入的配置数据
obj.MyPortfolioArr := MyPortfolioArr;
//回测开始时间
obj.FBegT := BegT;
//回测截止时间
obj.FEndT := EndT;
//组合类型(数量类组合)
obj.FGroupType := 2;
//基准代码
obj.FIndexId := IndexId;
//初始资金
obj.FIniCash := IniCash;
//成交价类别
obj.FPriceType := PriceType;
//成交量取整模式
obj.FVolModType := VolModType;
//是否分红再投资
obj.FDividendType := DividendType;
//是否参与配股
obj.FAllotmentType := AllotmentType;
//数量类成员变量
//开仓模式
obj.FOpenVolType := OpenVolType;
//平仓模式
obj.FCloseVolType := CloseVolType;
//费用类别
obj.FFeeType := FeeType;
//回测
obj.BackTest();
//获取返回结果(返回结果可根据需要选择)
return array(
//---组合基础
'交易明细':obj.GetTradeData(BegT,EndT),
"资产配置":obj.GetAssetData(BegT,EndT),
"持仓明细":obj.GetHoldData(BegT,EndT),
"行业配置":obj.GetSectorAllocation(BegT),
//---组合盈亏、交易
"组合盈亏":obj.GetGainandLoss(BegT,EndT),
"交易汇总":obj.GetTradingAmount(BegT,EndT),
"组合盈亏(按证券)":obj.GetGainandLossBySecurity(BegT,EndT),
"交易汇总(按证券)":obj.GetTradingAmountBySecurity(BegT,EndT),
//---组合收益
'区间组合收益率':obj.GetPortfolioReturn(BegT,EndT),
'组合和基准收益率序列':obj.GetPortfolioReturn2(BegT,EndT),
'阶段收益':obj.GetTrailingReturn(EndT),
'滚动收益':obj.GetRollingReturn(BegT,EndT,cy_month()),
//----组合评价
'风险回报':obj.GetReturnandRisk(BegT,EndT),
'相对回报':obj.GetRelativePerformance(BegT,EndT)
);
End;
Type TSMyBackTestingQuantity=class(TSBackTesting)
public
MyPortfolioArr;
function GetTimeSeries();override;
function GetTradeOrder(vEndT);override;
end;
function TSMyBackTestingQuantity.GetTimeSeries();override;
begin
//从导入的配置文件中获取调仓日序列
return SSelect distinct['截止日']from MyPortfolioArr order by['截止日'] end;
end;
function TSMyBackTestingQuantity.GetTradeOrder(vEndT);override;
begin
//查询某个调仓日的配置数据
t := Select * from MyPortfolioArr where['截止日']=vEndT end;
return t;
end;