29 KiB
因子指标 / 扩展指标
tsf_factorExtindiCator_base
声明:class
因子指标计算框架
frf
声明:field
无风险收益率(%)/最低可接受收益率(%)
可见性:public
类型:real
configSet(key, value)
声明:function
设置配置项
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
key |
string | 要设置的配置项名称 |
value |
any | 要写入配置项的值 |
示例
范例01:调用示例
Obj := new tsf_factorExtindicator_Base();
Obj.configSet('总组数',5);
configGet(key)
声明:function
获取配置项
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
key |
string | 要读取的配置项名称 |
示例
范例01:调用示例
Obj := new tsf_factorExtindicator_Base();
Return Obj.configGet('总组数'); //5
defaultConfig()
声明:function
默认配置,用户可重载,来设置默认配置,如'总组数','基准指数','回测周期','是否年化'
可见性:public
返回:array
getIC(begt, endt, ic_type)
声明:function
获得 IC 数据,需要用户重载,基类未实现,返回空数组,并提示报错:getIC 方法必须重写!
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
ic_type |
int | 整数,IC 类型,用户可自行对照 |
返回:array
getDailyGroupReturnAllG(begt, endt)
声明:function
获取全部分组的日收益数据;基类未实现,使用时必须重写
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
返回:array
getDailyGroupReturn(begt, endt, group_name)
声明:function
获得指定组名的分组日收益数据
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
group_name |
string_or_array | 要返回的分组名称或名称数组;为空时返回全部分组 |
返回:array
getFactorReturn(begt, endt)
声明:function
获取因子回归分析数据;基类未实现,使用时必须重写
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
返回:array
getgroupstocks(endt, gtype)
声明:function
获取指定日、指定分组的成分股及因子值;基类未实现,使用时必须重写
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
endt |
end_date | 日期,截止日 |
gtype |
int | 分组类型:nil 全部分组;-1 最后一组;-2 多空组;正整数表示对应组号 |
返回:array
gettcrq(begt, endt)
声明:function
获得指定区间的调仓日序列
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
返回:array
get_ICI_mean(begt, endt, ic_type)
声明:function
计算 IC 均值
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
ic_type |
int | 整数,IC 类型,取值与 getIC 模型一致 |
返回:real
get_ICI_StdDev(begt, endt, ic_type)
声明:function
计算 IC 标准差
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
ic_type |
int | 整数,IC 类型,取值与 getIC 模型一致 |
返回:real
get_ICI_Absmean(begt, endt, ic_type)
声明:function
计算 IC 绝对值的均值
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
ic_type |
int | 整数,IC 类型,取值与 getIC 模型一致 |
返回:real
get_ICI_Win_pct(begt, endt, ic_type)
声明:function
计算 IC 胜率(%)
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
ic_type |
int | 整数,IC 类型,取值与 getIC 模型一致 |
返回:real
get_ICI_ICIR(begt, endt, ic_type)
声明:function
计算 ICIR
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
ic_type |
int | 整数,IC 类型,取值与 getIC 模型一致 |
返回:real
get_Ri_CumReturn(begt, endt, rt_type)
声明:function
计算区间累计收益率(%)
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
rt_type |
int | 收益率类型:0 基准;1 多头(第 1 组);2 多头超额(第 1 组减基准);3 空头(最后 1 组);4 空头超额(最后 1 组减基准);5 多空(第 1 组减最后 1 组);6 多空超额(多空减基准);7 因子收益率 |
返回:real
get_Ri_volatility(begt, endt, rt_type)
声明:function
计算区间收益率标准差(%)
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
rt_type |
int | 整数,收益率类型,取值与 Get_Ri_CumReturn模型一致 |
返回:real
get_Ri_Sharpe_ratio(begt, endt, rt_type)
声明:function
计算指定收益类型在区间内的夏普比率
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
rt_type |
int | 整数,收益率类型,取值与 Get_Ri_CumReturn模型一致 |
返回:real
get_Ri_Win_pct(begt, endt, rt_type)
声明:function
计算收益率胜率(%)
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
rt_type |
int | 整数,收益率类型,取值与 Get_Ri_CumReturn模型一致 |
返回:real
get_Ri_cagr(begt, endt, rt_type)
声明:function
计算年化收益率 (%)
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
rt_type |
int | 整数,收益率类型,取值与Get_Ri_CumReturn模型一致 |
返回:real
get_Ri_mean(begt, endt, rt_type)
声明:function
计算平均收益率
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
rt_type |
int | 整数,收益率类型,取值与Get_Ri_CumReturn模型一致 |
返回:real
get_Ri_To_CumReturn(begt, endt, rt_type)
声明:function
指定类型的累计收益率(%)序列
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
rt_type |
int | 整数,收益率类型,取值与Get_Ri_CumReturn模型一致 |
返回:array
get_Ti_AbsMean(begt, endt)
声明:function
计算 T 值绝对值的均值
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
返回:real
get_Ti_AbsSignProp(begt, endt, abstsignv)
声明:function
计算 T 值大于 abstsignv 的占比
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
abstsignv |
real | 实数 |
返回:real
get_Crowding_ValuPB(endt, alg_type)
声明:function
基于估值指标 PB 衡量的因子分化程度,其中 PB 为市净率,BP 为市净率的倒数
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
endt |
end_date | 日期,截止日 |
alg_type |
int | 整数,算法类型 取值 含义 备注 0 差值 默认 1 比率 |
返回:real
get_Crowding_ValuPE(endt, alg_type)
声明:function
基于估值指标 PE 衡量因子分化程度,其中 PE 为市盈率,EP 为市盈率的倒数;
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
endt |
end_date | 日期,截止日 |
alg_type |
int | 整数,算法类型 取值 含义 备注 0 差值 默认 1 比率 |
返回:real
get_Crowding_ValuFac(endt, alg_type)
声明:function
基于估值指标因子值衡量因子分化程度
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
endt |
end_date | 日期,截止日 |
alg_type |
int | 整数,算法类型 取值 含义 备注 0 差值 默认 1 比率 |
返回:real
get_Crowding_Corr(begt, endt, alg_type, option)
声明:function
计算不同因子值的个股收益率之间的相关性
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
alg_type |
int | 整数,算法类型 取值 含义 备注 0 多头-空头 默认 1 多头+空头 2 多头 3 空头 |
option |
int | 整数,计算相关系数的算法类型 取值 含义 备注 0 日均收益率与组内成分股 默认 1 组内成分股与成分股之间 |
返回:real
get_Crowding_Volatility(begt, endt, alg_type)
声明:function
基于波动率比率衡量因子波动率
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
alg_type |
int | 波动率比率算法:0 多头与空头的波动比率(默认);1 多头与市场的波动比率;2 多空与市场的波动比率;市场指全局配置的基准指数 |
返回:real
get_Crowding_AssetCentrality(begt, endt, ep)
声明:function
计算各分组的资产集中度,并以多头组资产集中度作为当期因子集中度;分组数使用全局配置
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
ep |
real|integer | 累计贡献度阈值或主成分个数:实数表示累计贡献度阈值,整数表示选用的主成分个数 |
返回:real
getFactor_Crowded_TopBottomStocks(begt, endt, zbarr, seq_standard, n)
声明:function
多空分组指标计算,价差法,即分别算出多组、空组股票池的指标值,加权后相减获得值
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 计算区间的开始日期 |
endt |
end_date | 计算区间的截止日期 |
zbarr |
array | 自定义拥挤指标配置表;为空时使用文档列出的六项默认指标 |
seq_standard |
int | 时序标准化方式:-1 不处理;0 百分位;1 Z 值 |
n |
int | 移动时序标准化窗口期数,默认 3 期 |
返回:array
getFactor_Discrete(begt, end_t, seq_standard, n)
声明:function
计算因子值分化度, 支持移动时序标准化处理
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
end_t |
end_date | 日期,截止日 |
seq_standard |
int | 整数,结果时序标准化方式,与 GetFactor_Crowded_TopBottomStocks一致 |
n |
int | 整数,移动窗口期数,默认为3 期,进行时序标准化处理时生效 |
返回:array
get_Seq_Rt(begt, endt, rt_type)
声明:function
返回指定类型的日收益率的一维数字序列
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
rt_type |
integer | 收益率类型选择项,取值与 Get_Ri_CumReturn 一致 |
返回:array
get_Seq_IC(begt, endt, ic_type)
声明:function
返回 IC 的一维数字序列
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
ic_type |
integer | IC 类型选择项,取值与 getIC 一致 |
返回:array
get_Seq_T(begt, endt)
声明:function
返回 T 值的一维数字序列
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
返回:array
get_Seq2_Rt(begt, endt, rt_type)
声明:function
返回指定类型的日收益率
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
rt_type |
integer | 收益率类型选择项,取值与 Get_Ri_CumReturn 一致 |
返回:array
get_Seq2_IC(begt, endt, ic_type)
声明:function
返回 IC
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
ic_type |
integer | IC 类型选择项,取值与 getIC 一致 |
返回:array
get_Seq2_T(begt, endt)
声明:function
返回 T 值
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
返回:array
getFactorReturnandIC(begt, endt, ic_type)
声明:function
同时获得因子回归分析数据和 IC 数据
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
ic_type |
integer | IC 类型选择项,取值与 getIC 一致 |
返回:array
getLongShortReturn(begt, endt, cycle)
声明:function
返回指定周期的多空收益率(%)和多空累计收益(%)
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
cycle |
cycle | 多空收益率的统计周期 |
返回:array
getGroupN()
声明:function
获取分组数,默认为系统配置的全局参数-总组数,可重载
可见性:public
返回:int
getLongName()
声明:function
获取多头组名称,默认第1 组,可重载
可见性:public
返回:string
getShortName()
声明:function
获取空头组名称,默认第最后一组,假设一共分为5 组,则返回:第 5 组,可重载
可见性:public
返回:string
transferGroupName(group_name)
声明:function
转化分组名称,将"多头"转化为"第 1 组",将"空头" ,"最后 1 组"转化为最后一组的实际组名
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
group_name |
string | 字符串或数组,被转化的数组/字符串 |
返回:array
getGroupNameByGType(g_type)
声明:function
将分组类型代码转换为分组名称
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
g_type |
int | 分组类型:-1 最后一组;-2 多空组;正整数表示对应组号 |
返回:string
getDaysInOneYear(cycle)
声明:function
根据周期获得年化系数
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
cycle |
cycle | 用于确定年化系数的统计周期 |
返回:real
getFdaysIn1y(begt, endt, rt_type)
声明:function
根据收益类型获取年化系数
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
begt |
end_date | 日期,开始日 |
endt |
end_date | 日期,截止日 |
rt_type |
int | 收益类型:0 基准;1 多头;2 多头超额;3 空头;4 空头超额 |
返回:real
示例
范例01:.4.1 范例一:如何设置配置
Obj := new tsf_factorExtindicator_test();
Obj.configSet('基准指数','SH000985'); //修改指数为中证全指
return obj.getDailyGroupReturnAllG(20260101T,20260331T);
范例02:可通过 tsf_factorExtindicator_test类来查看必须重写的方法的返回,为随机生成的数据
obj := new tsf_factorExtindicator_test();
return array('分组收益-第一组
':obj.getDailyGroupReturn(20260101T,20260331T,'第1 组'),
'分组收益':obj.getDailyGroupReturnAllG(20260101T,20260331T),
'IC': obj.getIC(20260101T,20260331T,1),
'回归分析':obj.getFactorReturn(20260101T,20260331T),
'组成分详情':obj.getgroupstocks(20260331T,1));
tsfAdapterfun_mulfactor2Extindicator(obj_ts_multi_factor, if_cache)
声明:function
将已完成回测的多因子框架对象转换为因子指标框架对象;基础 IC、分组收益和回归分析数据取自多因子框架
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
obj_ts_multi_factor |
tsl_object | 已完成回测的 TSMultiFactor 框架对象 |
if_cache |
boolean | 是否预缓存中间指标数据:1 预缓存;0 不缓存(默认) |
返回:tsl_object
示例
范例01:调用示例
//详见 mulfactor_Invoker_GetFactorMetricsOverview
begt := 20260101T;
endt := 20260529T;
//多因子框架实例:中证200 域内,20 日动量因子
obj_TSMultiFactor :=
tsmf_factory_bySigleStockFormula('stockzf2(20)','SH000904');
obj_TSMultiFactor.FBegT := begt;
obj_TSMultiFactor.FEndT := endt;
obj_TSMultiFactor.FCycle := '月线';
obj_TSMultiFactor.BackTest();
//调用转化器
obj := tsfAdapterfun_mulfactor2Extindicator(obj_TSMultiFactor,1);
//获取缓存数据
Fdata := obj.Fdata;
//计算指标
rtlb := Fdata['分组日收益率数据'];
ic1 := Fdata['行业调整IC'];
ret := array();
ret[0,"开始日"] := begt;
ret[0,"截止日"] := endt;
ret[0,"多空分析@多空累计收益(%)"] := obj.Get_Ri_CumReturn(Begt,endt,5);
ret[0,"IC 分析@IC 均值"] := obj.Get_ICI_mean(Begt,endt,1);
ret[0,"IC 分析@IC_行业调整均值"] := mean(ic1[:,"行业调整@IC"]);
ret[0,"回归分析@|T 值|均值(%)"] := obj.Get_Ti_AbsMean(Begt,endt);
ret[0,"相关系数"] := correl(rtlb[:,'基准'],rtlb[:,'多空组']);
return ret;
范例02:调用示例
// 详见 mulfactor_Invoker_GetFactorCrowd
begt := 20260101T;
endt := 20260529T;
//多因子框架实例:中证200 域内,20 日动量因子
obj_TSMultiFactor :=
tsmf_factory_bySigleStockFormula('stockzf2(20)','SH000904');
obj_TSMultiFactor.FBegT := begt;
obj_TSMultiFactor.FEndT := endt;
obj_TSMultiFactor.FCycle := '月线';
obj_TSMultiFactor.BackTest();
//调用转化器
obj := tsfAdapterfun_mulfactor2Extindicator(obj_TSMultiFactor,1);
//计算指标: 多空拥挤度
data := obj.GetFactor_Crowded_TopBottomStocks(begt,endt,nil,0,10);
//叠加未来6 期累计涨幅
//未来2 期收益(%):以月线2026-10-31 为例,2026-11-01~2026-12-31 的累计涨幅
rt := obj.getFactorReturn(begt,endt);
reindex(rt,rt[:,'截止日']);
t := data[:,'截止日'];
n := length(t);
n2 := length(rt);
zfcol := array();
for i := 0 to length(t)-1 do
begin
for j := 1 to 6 do
begin
if i = 0 then zfcol &= array('未来'$j$'期涨幅');
if i-1+j >= n-(n-n2) then
data [i,'未来'$j$'期涨幅'] := '-';
else begin
rt_ := rt[t[i:i+j-1],'因子收益率'];
data[i,'未来'$j$'期涨幅'] := FI_CumReturn(rt_);
end
end
end
return array('因子拥挤':data,
'因子离散度':obj.GetFactor_Discrete(begt,endt,0,10));