# 组合优化 / 组合优化 ## `TSPortfolioOptimizer` 声明:class 按收益、风险或自定义目标求解资产权重,支持证券、分组及组合指标约束 ### `fBegT` 声明:field 开始时间 FEndT-365 可见性:`public` 类型:datetime ### `fEndT` 声明:field 结束时间 DATE() 可见性:`public` 类型:datetime ### `fIndexId` 声明:field 指数代码 "SH000300" 可见性:`public` 类型:varchar ### `fCycle` 声明:field 行情数据所用周期 "日线" 可见性:`public` 类型:varchar ### `fDaysIn1y` 声明:field 收益率折算为年化收益率所用天数 根据 FCycle 自动匹配 可见性:`public` 类型:integer ### `fReturnType` 声明:field 收益率数据类型 1 可见性:`public` 类型:integer ### `fConfidenceInterval` 声明:field 计算 VaR 时的置信度 0.95 可见性:`public` 类型:real ### `fLambda` 声明:field 风险厌恶系数λ 1 可见性:`public` 类型:real ### `fRf` 声明:field 年化无风险利率(%),用于夏普比率计算 0 可见性:`public` 类型:real ### `fObjType` 声明:field 目标函数 0 可见性:`public` 类型:integer ### `fObjEvalStr` 声明:field 自定义优化目标表达式 "" 可见性:`public` 类型:string ### `fConType` 声明:field 指标约束函数 nil 可见性:`public` 类型:integer ### `fConIfAnnual` 声明:field 约束是否年化,控制指标约束上下界输入 0:不年化,兼容历史 可见性:`public` 类型:bool ### `fThresholdLower` 声明:field 指标约束下界 和 FConType 配合使用 nil 可见性:`public` 类型:number ### `fThresholdUpper` 声明:field 指标约束上界 和 FConType 配合使用 nil 可见性:`public` 类型:number ### `fConStr` 声明:field 组合约束 Array() 可见性:`public` 类型:array ### `fMulticon` 声明:field 多个指标约束 Array() 可见性:`public` 类型:array ### `fxData` 声明:field 组合对数收益率矩阵,二维数字数组, 可见性:`public` 类型:array ### `fyData` 声明:field 指数对数收益率序列,一维数字数组 可见性:`public` 类型:array ### `fCov` 声明:field 组合收益率协方差 可见性:`public` 类型:array ### `fCorr` 声明:field 组合相关系数矩阵 可见性:`public` 类型:array ### `fReturnArray` 声明:field 返回字段,控制返回(影响部分接口) 可见性:`public` 类型:array ### `portfolioOptimize()` 声明:function 优化主函数,按照组合优化目标和阀值,计算优化比例 可见性:`public` 返回:int ### `getXData()` 声明:function 获得组合对数收益率矩阵 可见性:`public` 返回:array ### `getYData()` 声明:function 获得指数对数收益率序列 可见性:`public` 返回:array ### `getCov()` 声明:function 获得组合协方差矩阵 可见性:`public` 返回:array ### `getCorr()` 声明:function 设置组合相关系数矩阵 可见性:`public` 返回:array ### `getObj(w)` 声明:function 用户自定义优化的目标 可见性:`public` | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `w` | array | 组合权重向量 | 返回:numeric ### `getCon(w)` 声明:function 用户自定义优化的约束条件 可见性:`public` | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `w` | array | 组合权重向量 | 返回:array ### `getPortfolioData()` 声明:function 查询优化结果 可见性:`public` 返回:array ### `getReturnandRisk()` 声明:function 查询优化前后组合收益和组合风险指标 可见性:`public` 返回:array ### `getSectorData()` 声明:function 查询优化前后行业比例、超配比 可见性:`public` 返回:array ### `getPortfolioData2()` 声明:function 优化前后资产风险贡献,其中总风险贡献(%)与风险贡献率(%)具有可加性,理论公式说明请 可见性:`public` 返回:array ### `getPortopt(numports, portreturn, r_type)` 声明:function 带约束投资组合的有效前沿,底层调用模型 Portopt,在收益一定时,组合风险最小。目前约 可见性:`public` | 参数 | 类型 | 说明 | | ------------ | ----- | --------------------------------------------------------------------------------------------------------------------- | | `numports` | int | 有效前沿组合数,整型,默认取 10,使用情况较多 | | `portreturn` | array | 要求组合收益,不带%,一维数字数组,当该参数非空时,Numports 失效,使用情 况较少 | | `r_type` | int | 返回类型,控制比例的输出格式 取值 含义 备注 0(默认) 比例平铺展示 适用资产较少 1 比例折叠到一个多级数组 适用资产较多 | 返回:array ### `getData_OutSample(v_beg_t, v_end_t)` 声明:function 样本外各资产与基准收益率(%)序列,收益率带%。默认情况下,框架会根据成员变量 可见性:`public` | 参数 | 类型 | 说明 | | --------- | ---- | ---------------------- | | `v_beg_t` | date | 样本外开始日,日期类型 | | `v_end_t` | date | 样本外截止日,日期类型 | 返回:array ### `getPortfolioReturn_OutSample(v_beg_t, v_end_t, v_type)` 声明:function 样本外组合优化前后的收益率(%)序列 可见性:`public` | 参数 | 类型 | 说明 | | --------- | ---- | ------------------------------------------------------------------------------------------------------------------------------- | | `v_beg_t` | date | 样本外开始日,日期类型 | | `v_end_t` | date | 样本外截止日,日期类型 | | `v_type` | int | 组合构造方式,整型,详情可参考 FAQ 组合不同构造方式说明 取值 含义 0(默认) 每期各资产权重不变 1 每期各资产权重根据涨幅自动变化 | 返回:array ### `getReturnandRisk_OutSample(v_beg_t, v_end_t, v_type)` 声明:function 样本外组合优化前后的收益风险指标 可见性:`public` | 参数 | 类型 | 说明 | | --------- | ---- | ------------------------------------------------------------------------------------------------------------------------------- | | `v_beg_t` | date | 样本外开始日,日期类型 | | `v_end_t` | date | 样本外截止日,日期类型 | | `v_type` | int | 组合构造方式,整型,详情可参考 FAQ 组合不同构造方式说明 取值 含义 0(默认) 每期各资产权重不变 1 每期各资产权重根据涨幅自动变化 | 返回:array ### `initData()` 声明:function 初始化数据用,在进行后续报表输出前必须调用,通常在PortfolioOptimize()后使用 可见性:`public` ### `getOptimizationTemplateTable()` 声明:function 优化模版配置表,用户可重写模版配置 可见性:`public` 返回:array ### `getCumulativeReturnTable(cycle, qk_type)` 声明:function 累计收益表(固定周期或滚动区间)组合层 可见性:`public` | 参数 | 类型 | 说明 | | --------- | ------- | ----------------------- | | `cycle` | string | 行情或统计周期 | | `qk_type` | integer | 0:固定周期 1:滚动周期 | 返回:array ### `getRetsCumulativeReturnTable(cycle, qk_type)` 声明:function 累计收益表(固定周期或滚动区间)资产层 可见性:`public` | 参数 | 类型 | 说明 | | --------- | ------- | ----------------------- | | `cycle` | string | 行情或统计周期 | | `qk_type` | integer | 0:固定周期 1:滚动周期 | 返回:array ### `getCumulativeReturnTable2(cycle, qk_type)` 声明:function 累计收益表(固定周期或滚动区间)组合层,指定返回列,与FReturnArray 有关 可见性:`public` | 参数 | 类型 | 说明 | | --------- | ------- | ----------------------- | | `cycle` | string | 行情或统计周期 | | `qk_type` | integer | 0:固定周期 1:滚动周期 | 返回:array ### `getMaxDrawdownTable(cycle, qk_type)` 声明:function 最大回撤表(固定周期或滚动区间)组合层 可见性:`public` | 参数 | 类型 | 说明 | | --------- | ------- | ----------------------- | | `cycle` | string | 行情或统计周期 | | `qk_type` | integer | 0:固定周期 1:滚动周期 | 返回:array ### `getRetsMaxDrawdownTable(cycle, qk_type)` 声明:function 最大回撤表(固定周期或滚动区间)资产层 可见性:`public` | 参数 | 类型 | 说明 | | --------- | ------- | ----------------------- | | `cycle` | string | 行情或统计周期 | | `qk_type` | integer | 0:固定周期 1:滚动周期 | 返回:array ### `getMaxDrawdownTable2(cycle, qk_type)` 声明:function 最大回撤表(固定周期或滚动区间)组合层,指定返回列,与FReturnArray 有关 可见性:`public` | 参数 | 类型 | 说明 | | --------- | ------- | ----------------------- | | `cycle` | string | 行情或统计周期 | | `qk_type` | integer | 0:固定周期 1:滚动周期 | 返回:array ### `getPerformance()` 声明:function 历史表现汇总 可见性:`public` 返回:array ### `getPerformance2()` 声明:function 历史表现汇总,指定返回列,与 FReturnArray 有关 可见性:`public` 返回:array ### `getWeightsTable()` 声明:function 权重汇总表 可见性:`public` 返回:array ### `getWeightsTable2()` 声明:function 权重汇总表,指定返回列,与 FReturnArray 有关 可见性:`public` 返回:array ### `getReturnAndDrawdown(cycle)` 声明:function 收益回撤表(同时包含组合收益序列和回撤序列) 可见性:`public` | 参数 | 类型 | 说明 | | ------- | ------ | -------------- | | `cycle` | string | 行情或统计周期 | 返回:array #### 示例 范例01:调用示例 ```tsl PortfolioData := Array( ("代码":"SZ000001","比例下界(%)":0,"比例上界(%)":40,"分组":"股票"), ("代码":"SZ000002","比例下界(%)":0,"比例上界(%)":40,"分组":"股票"), ("代码":"SH019547","比例下界(%)":0,"比例上界(%)":60,"分组":"债券"), ("代码":"SH019644","比例下界(%)":0,"比例上界(%)":60,"分组":"债券") ); BegT := 20230101T; EndT := 20231231T; Cycle := cy_day(); IndexId := "SH000300"; ObjType := 1; Constr := array(); // 设置大类资产约束 GroupConStr := Array( ("分组":Array("股票"), "比例下界(%)":50, "比例上界(%)":70), ("分组":Array("债券"), "比例下界(%)":30, "比例上界(%)":50) ); Config := array(("是否资产约束":1,"是否指标约束":0,"是否分组约束":1,"约束指标是 否年化":1, "分组字段名称":"分组","有效前沿个数":nil,"返回周期":"月线")); return TSFL_ZHYH_GetAssetAllocationOptimizer(PortfolioData,BegT,EndT,Cycle,Index Id,ObjType, ConStr,GroupConstr,Config); ``` ### `tsfl_ZHYH_CompareAllocModels(portfolio_data, beg_t, end_t, cycle, index_id, config)` 声明:function 常用配置模型对比 可见性:`public` | 参数 | 类型 | 说明 | | ---------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `portfolio_data` | array | Array,优化样本 | | `beg_t` | datetime | 日期,开始日,如 20250101T | | `end_t` | datetime | 日期,截止日,如 20251231T | | `cycle` | string | 周期,如 cy_day() | | `index_id` | string | 字符串,指数代码,如"SH000300" | | `config` | array | 可选。Array,高级选项,控制优化方法及返回配置,举例 array(("优化模版序号 ":array(1,2,3,4,5),"返回周期":"月线")),可选字段如下 字段 类型 默认值 说明 优化模版序号 数组 Array(1,2,3,4,5) 返回周期 周期 月线 优化模版序号可选如下 序号 优化模板名称 风险 等级 核心约束(生产典型值) 适用产品场景 | #### 示例 范例01:调用示例 ```tsl PortfolioData := Array( ("代码":"SZ000001","比例下界(%)":0,"比例上界(%)":60), ("代码":"SZ000002","比例下界(%)":0,"比例上界(%)":60), ("代码":"SH600000","比例下界(%)":0,"比例上界(%)":60)); BegT := 20230101T; EndT := 20231231T; Cycle := cy_day(); IndexId := "SH000300"; Config := array(("优化模版序号":array(1,2,3,4,5),"返回周期":"月线")); return TSFL_ZHYH_CompareAllocModels(PortfolioData,BegT,EndT,Cycle,IndexId,Config ); ```