#### 组合评价 ##### 内容 - 常用函数 - 风险分析 - 绩效归因 - 收益分析 - 风险、回报 - 相对回报 - 收益 - 压力测试和情景分析 - 中间函数 ##### 常用函数 ###### 内容 - pf_MinRecoveryPeriod - pf_WinRatio - pf_getVaRConfidence - pf_getDayNnmOfYear - pf_Omega - pf_MaxDrawDown - pf_CalmarRatio - pf_Rachev - Pf_Var ###### pf_MinRecoveryPeriod 用途:进行数值统计计算。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 算法最小恢复天=恢复到最大回撤起始日净值对应的日期-最大回撤起始日范例 ```tsl SetSysParam(PN_Stock(), 'SZ000001'); SetSysParam(PN_Date(), 20180801T); SetSysParam(PN_Cycle(), cy_day()); arr := Nday(1000, '截止日', sp_time(), '涨幅(%)', StockZf3()); return pf_MinRecoveryPeriod(arr, '涨幅(%)'); // 返回:896 ``` ###### pf_WinRatio 用途:常用函数相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl SetSysParam(PN_Stock(), 'SZ000001'); SetSysParam(PN_Date(), 20180801T); SetSysParam(PN_Cycle(), cy_day()); arr1 := Nday(1000, '截止日', sp_time(), '涨幅(%)', StockZf3()); arr2 := Nday(1000, '截止日', spec(sp_time(), 'SZ000002'), '涨幅(%)', spec(StockZf3(), 'SZ000002')); return pf_WinRatio(arr1, '涨幅(%)', arr2, '涨幅(%)'); // 返回:59.5 ``` ###### pf_getVaRConfidence 用途:常用函数相关函数。 参数:无。 返回:处理后的结果值。 范例 ```tsl return pf_getVaRConfidence(); // 返回:95 ``` ###### pf_getDayNnmOfYear 用途:常用函数相关函数。 参数:无。 返回:处理后的结果值。 范例 ```tsl SetSysParam(PN_Cycle(), cy_week()); return pf_getDayNnmOfYear(); // 返回:52 ``` ###### pf_Omega 用途:常用函数相关函数。 参数:arg1,arg2,arg3(按示例顺序传入)。 返回:处理后的结果值。 算法 1、t表中Fname中数据均减去临界值MeanR,得到t1表 2、对于t1表中的Fname,汇总该列大于0的值为v1,汇总该列小于0的值 3、omega=v1/abs(v2)范例 ```tsl SetSysParam(PN_Stock(), 'SZ000001'); SetSysParam(PN_Date(), 20180801T); SetSysParam(PN_Cycle(), cy_day()); arr1 := Nday(1000, '截止日', sp_time(), '涨幅(%)', StockZf3()); return pf_Omega(arr1, '涨幅(%)', 0.5); // 返回:0.53 ``` ###### pf_MaxDrawDown 用途:进行数值统计计算。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl SetSysParam(PN_Stock(), 'SZ000001'); SetSysParam(PN_Date(), 20180801T); SetSysParam(PN_Cycle(), cy_day()); arr1 := Nday(1000, '截止日', sp_time(), '涨幅(%)', StockZf3()); return pf_MaxDrawDown(arr1, '涨幅(%)'); // 返回:-45.29 ``` ###### pf_CalmarRatio 用途:常用函数相关函数。 参数:arg1,arg2,arg3(按示例顺序传入)。 返回:处理后的结果值。 算法Calmar比率=年化收益率/最大回撤率\*100范例 ```tsl SetSysParam(PN_Stock(), 'SZ000001'); SetSysParam(PN_Date(), 20180801T); SetSysParam(PN_Cycle(), cy_day()); arr1 := Nday(1000, '截止日', sp_time(), '涨幅(%)', StockZf3()); return pf_CalmarRatio(arr1, '涨幅(%)', 250); // 返回:0.20 ``` ###### pf_Rachev 用途:常用函数相关函数。 参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。 返回:处理后的结果值。 算法Rachev=(1-alpha)下的CVaR(无风险收益率-收益率)/(1-beta)下的CVaR(收益率-无风险收益率),其中CVAR代表风险度量范例 ```tsl SetSysParam(PN_Stock(), 'SZ000001'); SetSysParam(PN_Date(), 20180801T); SetSysParam(PN_Cycle(), cy_day()); arr1 := Nday(1000, '截止日', sp_time(), '涨幅(%)', StockZf3()); return pf_Rachev(arr1, '涨幅(%)', 0.05, 0.05, 0); // 返回:1.33 ``` ###### Pf_Var 用途:常用函数相关函数。 参数:arg1,arg2,arg3(按示例顺序传入)。 返回:处理后的结果值。 算法年化收益算术平均-标准正态分布置信度为0.95的随机变量\*年化标准差范例 ```tsl SetSysParam(PN_Stock(), 'SZ000001'); SetSysParam(PN_Date(), 20180801T); SetSysParam(PN_Cycle(), cy_day()); arr1 := Nday(250, '截止日', sp_time(), '涨幅(%)', StockZf3()); return Pf_Var(arr1, '涨幅(%)', 250); // 返回:-66.76 ``` ##### 风险分析 ###### 内容 - 绝对风险 - 流动性风险 - 系统性风险 - 相对风险 - 中间函数 ###### 绝对风险 ####### 内容 - var - var分析 - 波动率(标准差) ####### var ######## 内容 - pf_ComponentVAR2 - pf_VARByHistoricalSimulation - pf_VARByDeltaNormal - pf_VARvsBenchmarkVAR - pf_VARByMonteCarlo - pf_ComponentVARPercent2 - pf_IncrementalVAR2 - pf_VARvsMarketValue - pf_VARvsBenchMark - pf_MarginalVAR2 - 中间函数 ######## pf_ComponentVAR2 范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; return pf_ComponentVAR2(s, 20110101T, 20111231T, 20, 0, 95, 10000, 1, 0, 0); ``` 返回: ######## pf_VARByHistoricalSimulation 范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; return pf_VARByHistoricalSimulation(s, 20110101T, 20111231T, 95, 10000, 1, 0); ``` 返回: 238.41 ######## pf_VARByDeltaNormal 算法 一、标准正态法 1、组合中的各个证券协方差矩阵Cov 2、组合标准差σ=√(WT*Cov*W)=√(∑Wi*∑Wj*COVi,j) 其中: (1) W:组合中的各个证券占组合的比例W=(W1,W2,...,Wn) (2) Cov:组合中的各个证券之间的协方差COVi,j =ρij*σi*σj (3) N:组合中包含的证券个数 3、组合VAR=|Z*σ*MV\* sqrt(deltaT)| 其中: (1) Z :标准正态分布下置信度对应的分位数(如:95%置信度下,Z=1.65) (2) σ:组合标准差 (3) MV:组合市值 (4)deltaT:持有期 二、Risk Metric方法 1、组合中的各个证券协方差矩阵COV,与普通计算组合标准方法不同的是,我们使用Risk Metric计算组合的协方差。 协方差中元胞σ(i,j)=(1-λ)/(1-power(λ,m)*∑(power(λ,m-t)*ri,t\*rj,t) 其中: (1):衰减因子(一般情况下=0.94) (2):第i个证券(1<=i<=N)t日(1<=t<=m)的对数收益率 (3):第j个证券(1<=j<=N)t日(1<=t<=m)的对数收益率 (4)N:组合中包含的证券个数 (5)m:证券收益率序列个数 2、用Risk Metric方法计算组合的标准差σ=√(WT*Cov*W)=√(∑Wi*∑Wj*COVi,j) 其中: (1) W:组合中的各个证券占组合的比例W=(W1,W2,...,Wn) (2) Cov:组合中的各个证券之间的协方差COVi,j =ρij*σi*σj (3) N:组合中包含的证券个数 3、组合VAR=|Z*σ*MV\* sqrt(deltaT)| 其中: (1) Z :标准正态分布下置信度对应的分位数(如:95%置信度下,Z=1.65) (2) σ:组合标准差 (3) MV:组合市值 (4)deltaT:持有期 备注: 1、标准正态法的假设:收益率服从多元正态分布ΔP∝N(μ,σ2) Lamda: (1)均值-方差法,Lamda=0;Risk Metric方法,一般取Lamda=0.94范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; return pf_VARByDeltaNormal(s, 20110101T, 20111231T, 20, 0, 95, 10000, 1, 0); // 返回:210.52 ``` ######## pf_VARvsBenchmarkVAR 算法 组合VAR/benchmark=(wp标准正态法计算组合VAR)/(wb标准正态法计算组合Var)范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t1); s1 := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t1 end; GetBkWeightByDate('SH000001', 20111231T, t2); s2 := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t2 end; return pf_VARvsBenchmarkVAR(s1, s2, 20110101T, 20111231T, 20, 0, 95, 10000, 1, 0, 0); // 返回:1.15 ``` ######## pf_VARByMonteCarlo 算法 1、标准正态法的假设:股票i收益率服从多元正态分布ΔS(i)∝N(μ(i),σ(i)^2); 这里需要知道: (1) μ:一维数组,股票的期望收益率,u(i)表示第i个股票的期望收益; (2)σ:一维数组,股票的标准差,σ(i)表示第i个股票的标准差; (3)weights:一维数组,股票的权重序列,weights(i)表示第i个股票的权重; (4)Corr:二维数字数组,股票的历史相关系数矩阵; 2、假设组合的初始市值MarketValue,St0为股票初始市值,则 St0[i]=weights[i]\*MarketValuei,模拟持有期为DeltaT ,股票的个数为n; 3、对Corr进行Cholesky分解,分解出来的上三角矩阵为L,有Corr=(`L)\*L; 4、产生随机序列矩阵A,A[t,i]=ε,(t=1,2,...,DeltaT ,i=1,2,...,n),其中ε∝N(0,1); 5、计算NewA=A\*L,这有NewA的相关系数近似于Corr; 6、NewA[t,i]=u(i)+σ(i)\*NewA[t,i],(t=1,2,...,DeltaT ,i=1,2,...,n) 7、根据对数收益的计算法,可以得到持有期末股票i的市值 St[i]=St0[i]\*exp(sum(NewA[:,i])); 8、则组合的市值P=St[i]+ ...+ St[n]; 9、重复步骤4、5、6、7、8,(一般需要模拟次数SimulationNumber>=100次),则可以 得到SimulationNumber个P 10、对P序列从小到大排序。计算在一定置信度1-α(一般α取5%或1%)情况下的 分位数,Z=Round((1-α)\*M),对应分位数下组合的市值MVz和组合的VAR=|MVz-MarketValue| 备注: 蒙特卡罗模拟法与历史模拟法十分类似,他们的区别在于前者利用统计方法估计历史上市场因子运动的参数然后模拟市场因子未来的变化情景,而后者则直接根据历史数据来模拟市场因子的未来变化情景范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t1); s1 := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t1 end; GetBkWeightByDate('SH000001', 20111231T, t2); s2 := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t2 end; return pf_VARvsBenchmarkVAR(s1, s2, 20110101T, 20111231T, 20, 0, 95, 10000, 1, 0, 0); // 返回:221.01 ``` ######## pf_ComponentVARPercent2 范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; return pf_ComponentVARPercent2(s, 20110101T, 20111231T, 20, 0, 95, 10000, 1, 0, 0); ``` 返回: ######## pf_IncrementalVAR2 范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; return pf_IncrementalVAR2(s, 20110101T, 20111231T, 20, 0, 95, 10000, 1, 0, 0); ``` 返回: ######## pf_VARvsMarketValue 范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; return pf_VARvsMarketValue(s, 20110101T, 20111231T, 20, 0, 95, 10000, 1, 0, 0); // 返回:2.11 ``` ######## pf_VARvsBenchMark 算法 组合VAR/benchmark=wp标准正态法计算组合VAR/wb标准正态法计算组合Var范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t1); s1 := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t1 end; GetBkWeightByDate('SH000001', 20111231T, t2); s2 := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t2 end; return pf_VARvsBenchMark(s1, s2, 20110101T, 20111231T, 20, 0, 95, 10000, 1, 0, 0); // 返回:1.15 ``` ######## pf_MarginalVAR2 范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; return pf_MarginalVAR2(s, 20110101T, 20111231T, 20, 0, 95, 10000, 1, 0, 0); ``` 返回: ######## 中间函数 ######### 内容 - pf_GetPortfolioRate - pf_stockszf - CovarianceAttenuation - pf_CovarianceANDCorrelation - pf_VARByDeltaNormal_Sub - pf_Quantile - pf_MarginalStandardDeviation1 - QHZF_XZ ######### pf_GetPortfolioRate 范例 ```tsl StockArr := array("OF000001", "SH000300"); begt := 20240321T; endt := 20240331T; return Method := 1; // 涨幅法 return pf_GetPortfolioRate(StockArr, BegT, EndT, return Method); ``` 返回: ######### pf_stockszf 范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; return pf_stockszf(s, 20180801T, 20180802T, 0, 0, 50); ``` 返回: ######### CovarianceAttenuation 算法 创建新矩阵R,v0:=(1-0.94)/(1-0.94的m次方),其中m未A的列数 对A的行做二重循环,列做单重循环,累加0.94的L次方*行一重循环元素H1*行二重循环元素H2,记作V,将v0\*V赋予R的H1行H2列。其中L为m-当前元素所在的列数。范例 ```tsl A := array((1, 2, 3), (4, 5, 6)); return CovarianceAttenuation(A); ``` 返回: ######### pf_CovarianceANDCorrelation 范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['行业代码'] := array('SW101190', 'SW108030'); s[0:1]['比例(%)'] := array(40, 60); pf_CovarianceANDCorrelation(s, 20150801T, 20151202T, 20, 0, 0.94, Scor, Scov); return Scor; ``` 返回: ######### pf_VARByDeltaNormal_Sub 范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['行业代码'] := array('SW101190', 'SW108030'); s[0:1]['比例(%)'] := array(40, 60); pf_CovarianceANDCorrelation(s, 20150801T, 20151202T, 20, 0, 0.94, Scor, Scov); return pf_VARByDeltaNormal_Sub(s, 0, 95, 10000, 1, SCov); // 返回:320.26 ``` ######### pf_Quantile 范例 ```tsl SetSysParam(PN_Stock(), 'SZ000001'); SetSysParam(PN_Date(), 20180801T); SetSysParam(PN_Cycle(), cy_day()); arr1 := Nday(250, '截止日', sp_time(), '涨幅(%)', StockZf3()); return pf_Quantile(arr1, '涨幅(%)', 95, 0, 0); // 返回:-3.56 ``` ######### pf_MarginalStandardDeviation1 算法 (1)取证券i的区间对数收益率序列 Yi (2)取证券j的区间对数收益率序列 Yj (3)计算证券i的标准差 Si (4)计算证券j的标准差 Sj (5)计算证券i与证券j的相关系数 CORRij = correl(Yi,Yj) (6)计算证券i与证券j的协方差 COVij = CORRij _ Si _ Sj (7)取证券i占组合比例 Bi (8)取证券j占组合经例 Bj (9)取证券ij的组合标准差为 Bi* Bj * COVij (10)组合标准差 = 所有证券两两组合标准差的总和再开平方。 (11)证券i的边际标准差 = Sum(COVij \* Bj)/组合标准差范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; return pf_MarginalStandardDeviation1(s, 20180801T, 20180802T, 20, 0, 0, 0); ``` 返回: ######### QHZF_XZ 范例 ```tsl return QHZF_XZ('IF01', 20180801T, 20180810T, cy_day()); ``` 返回: ####### var分析 ######## 内容 - pf_VARTest - 中间函数 ######## pf_VARTest 范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; return pf_VARTest(s, 20180801T, 20180802T, 95, 10000, 1, 0, 20, 0, 0, 10000, 400, 0); // 返回:0 ``` ######## 中间函数 ######### 内容 - pf_VARKurtosisAndSkewness ######### pf_VARKurtosisAndSkewness 范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; SetSysParam(PN_Stock(), 'SH000300'); SetSysParam(PN_Date(), 20180801T); SetSysParam(PN_Cycle(), cy_day()); arr1 := Nday(243, '开始日', sp_time(), '截止日', sp_time() + 365); return pf_VARKurtosisAndSkewness(s, arr1, 95, 10000, 1, 0, 20, 0, 10000, 0, '', r, 0); ``` 返回: ####### 波动率(标准差) ######## 内容 - pf_MarginalStandardDeviation2 - StockStandardDeviation - pf_StandardDeviation2 - pf_IncrementalStandardDeviation2 - pf_ComponentStandardDeviation2 - pf_ComponentStandardDeviationPercent2 - StockSemiStandardDeviation - StockStandardDeviation2 ######## pf_MarginalStandardDeviation2 范例 ```tsl GetBkWeightByDate('SH000300', 20111231T, t); s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end; return pf_MarginalStandardDeviation2(s, 20180801T, 20180802T, 120, 0, 0, 0); ``` 返回: ######## StockStandardDeviation 算法 1、取证券区间的对数收益率序列y 2、计算证券区间对数收益率序列y的标准差范例 ```tsl SetSysParam(PN_Stock(), 'SH000300'); SetSysParam(PN_Cycle(), cy_day()); return StockStandardDeviation(20180801T, 20180803T); // 返回:0.29 ``` ######## pf_StandardDeviation2 范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['行业代码'] := array('SW101190', 'SW108030'); s[0:1]['比例(%)'] := array(40, 60); SetSysParam(PN_Cycle(), cy_day()); return pf_StandardDeviation2(s, 20170801T, 20180803T, 120, 0, SR, SV); // 返回:1.22 ``` ######## pf_IncrementalStandardDeviation2 算法 证券i的组合标准差(%)(剔除后) = sqrt(sqr(组合标准差) - sum(Bi _ Bj _ COVij)) 证券i的增量标准差(%) = 组合标准差 - 证券i的组合标准差(%)(剔除后)范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['行业代码'] := array('SW101190', 'SW108030'); s[0:1]['比例(%)'] := array(40, 60); SetSysParam(PN_Cycle(), cy_day()); return pf_IncrementalStandardDeviation2(s, 20170801T, 20180801T, 120, 0, 0, 0); ``` 返回: ######## pf_ComponentStandardDeviation2 算法 (1)取证券i与证券j对齐后的区间对数收益率序列 Yi 和 Yj (2)计算证券i的标准差 Si (3)计算证券j的标准差 Sj (4)计算证券i与证券j的协方差 COVij = sum((Yi-mean(Yi))\*(Yj-mean(Yj)))/(length(Yi)-1); (5)计算证券i与证券j的相关系数 CORRij = COVij/(Si\*Sj) (6)取证券i占组合比例 Bi (7)取证券j占组合经例 Bj (8)计算证券ij的组合标准差为 Bi* Bj * COVij (9)组合标准差 = 所有证券两两组合标准差的总和再开平方。 (10)证券i的成份标准差 = Bi _ Sum(COVij _ Bj)/组合标准差范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['行业代码'] := array('SW101190', 'SW108030'); s[0:1]['比例(%)'] := array(40, 60); SetSysParam(PN_Cycle(), cy_day()); return pf_ComponentStandardDeviation2(s, 20170801T, 20180801T, 120, 0, 0, 0); ``` 返回: ######## pf_ComponentStandardDeviationPercent2 算法 1、取证券i与证券j对齐后的区间对数收益率序列 Yi 和 Yj 2、计算证券i的标准差 Si 3、计算证券j的标准差 Sj 4、计算证券i与证券j的协方差 COVij = sum((Yi-mean(Yi))\*(Yj-mean(Yj)))/(length(Yi)-1); 5、计算证券i与证券j的相关系数 CORRij = COVij/(Si\*Sj) 6、取证券i占组合比例 Bi 7、取证券j占组合经例 Bj 8、计算证券ij的组合标准差为 Bi* Bj * COVij 9、组合标准差 = 所有证券两两组合标准差的总和再开平方。 10、证券i的成份标准差 = Bi _ Sum(COVij _ Bj)/组合标准差 11、证券i的成份标准差贡献度 = 证券i的成份标准差/组合标准差\*100范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['行业代码'] := array('SW101190', 'SW108030'); s[0:1]['比例(%)'] := array(40, 60); SetSysParam(PN_Cycle(), cy_day()); return pf_ComponentStandardDeviationPercent2(s, 20170801T, 20180801T, 120, 0); ``` 返回: ######## StockSemiStandardDeviation 算法 (1)取证券区间的对数收益率序列y (2)从y中取出小于下方标准差阀值的序列x (3)计算序列x相对于阀值的标准差范例 ```tsl SetSysParam(PN_Stock(), 'SH000300'); SetSysParam(PN_Cycle(), cy_day()); return StockSemiStandardDeviation(20170801T, 20180801T, 0, 0.05); // 返回:1.17 ``` ######## StockStandardDeviation2 算法 1、取证券区间的对数收益率序列y 2、计算证券区间对数收益率序列y的标准差范例 ```tsl SetSysParam(PN_Stock(), 'SH600000'); SetSysParam(PN_Cycle(), cy_day()); return StockStandardDeviation2(20170801T, 20180801T, 20, 'SW101190');返回:1.18 ``` ###### 流动性风险 ####### 内容 - StockAmplitudePerAmount - StockCashFlowInFuture - pf_GiniCoefficient - pf_ILLIQ - pf_Amivest - pf_GiniCoeff - pf_Martin - pf_CashFlowInFuture2 - StockAmplitudePerVolumn - pf_SharevsNegotiableShare - pf_StockLiquidityCost2 - pf_SecurityConcentrationRatio - pf_GroupHoldRatio - StockRealizedDays - StockLiquidityCost - pf_GroupConcentrationRatio - pf_TurnoverRate - 测试函数 - 中间函数 ####### StockAmplitudePerAmount 用途:风险分析相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 算法波动额=(区间最高价-区间最低价)/区间最低价/区间成交金额范例 ```tsl SetSysParam(PN_Stock(), 'SZ000001'); return StockAmplitudePerAmount(20180801T, 20180803T); // 返回:0.34 ``` ####### StockCashFlowInFuture 用途:风险分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl SetSysParam(PN_Stock(), 'SZ000001'); return StockCashFlowInFuture(20170801T, 20180803T, 5, 10, 1); // 返回:11.18 ``` ####### pf_GiniCoefficient 用途:风险分析相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['行业代码'] := array('SW101190', 'SW108030'); s[0:1]['比例(%)'] := array(40, 60); return pf_GiniCoefficient(s, 0); // 返回:0.01 ``` ####### pf_ILLIQ 用途:风险分析相关函数。 参数:arg1(按示例顺序传入)。 返回:处理后的结果值。 算法 范例 ```tsl SetSysParam(pn_stock(), 'sz000001'); return pf_ILLIQ(20180820T); // 返回:-0.0038 ``` ####### pf_Amivest 用途:风险分析相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 算法 范例 ```tsl SetSysParam(pn_stock(), 'sz000001'); return pf_Amivest(20121231T, 18); // 返回:183495108.82 ``` ####### pf_GiniCoeff 用途:风险分析相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['市值'] := array(6000000, 4000000); s[0:1]['行业代码'] := array('SW101190', 'SW108030'); s[0:1]['占净值比例(%)'] := array(60, 40); return pf_GiniCoeff(s, 1); // 返回:-0.04 ``` ####### pf_Martin 用途:风险分析相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 算法 1、计算每日v:(最高价-最低价)/前收盘/成交量\*100000000 2、martin= N个交易日的v的平均范例 ```tsl SetSysParam(pn_stock(), 'sz000001'); return pf_Martin(20180801T, 18); // 返回:0.03 ``` ####### pf_CashFlowInFuture2 用途:风险分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['数量'] := array(500, 100); return pf_CashFlowInFuture2(s, 20180801T, 20180830T, 5, 100); // 返回:5620 ``` ####### StockAmplitudePerVolumn 用途:风险分析相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 算法波动量=(区间最高价-区间最低价) /区间最低价/区间成交量\*1000000范例 ```tsl SetSysParam(pn_stock(), 'sz000001'); return StockAmplitudePerVolumn(20180801T, 20180831T); // 返回:0.009 ``` ####### pf_SharevsNegotiableShare 用途:风险分析相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 算法占流通股比例=持仓数量/流通股数量范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['数量'] := array(50000000, 100000000); return pf_SharevsNegotiableShare(s, 20180801T); ``` 返回: ####### pf_StockLiquidityCost2 用途:风险分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5,arg6(按示例顺序传入)。 返回:处理后的结果值。 算法 成交金额法:返回市值和*冲击成本*数量/10000000 成交量法:返回数量和*冲击成本*数量/100000范例 ```tsl SetSysParam(PN_Stock(), 'SZ000001'); W := array( ("组合编号":2.0, "截止日":"2013-08-30", "代码":"BK010214", "名称":"01国开14", "数量":2900000.0, "市值":300109898.13, "占净值比例(%)":0.22, "总成本":290000000.0, "成本价":100.0, "收盘":103.49, "浮动盈亏":10109898.13, "浮盈率(%)":3.49, "一级分类":"固定收益", "证券类别":"债券", "板块名称":"政策性金融债", "行业代码":"B_PJRZQ", "投资分类":"持有到期", "上市地":"银行间", "证券类别IV":"", "证券类别III":nil, "管理人":nil, "证监会一级行业分类":nil, "中证一级行业分类":nil, "比例(%)":0.35), ("组合编号":2.0, "截止日":"2013-08-30", "代码":"BK010216", "名称":"01国开16", "数量":2300000.0, "市值":229155549.94, "占净值比例(%)":0.17, "总成本":230000000.0, "成本价":100.0, "收盘":99.63, "浮动盈亏":-844450.0600000001, "浮盈率(%)":-0.37, "一级分类":"固定收益", "证券类别":"债券", "板块名称":"政策性金融债", "行业代码":"B_PJRZQ", "投资分类":"持有到期", "上市地":"银行间", "证券类别IV":"", "证券类别III":nil, "管理人":nil, "证监会一级行业分类":nil, "中证一级行业分类":nil, "比例(%)":0.27), ("组合编号":2.0, "截止日":"2013-08-30", "代码":"SZ112183", "名称":"13广发03", "数量":6000000.0, "市值":600000000.0, "占净值比例(%)":0.45, "总成本":600000000.0, "成本价":100.0, "收盘":100.0, "浮动盈亏":0.0, "浮盈率(%)":0.0, "一级分类":"固定收益", "证券类别":"债券", "板块名称":"公司债", "行业代码":"B_GSZQ", "投资分类":"持有到期", "上市地":"深交所", "证券类别IV":"", "证券类别III":nil, "管理人":nil, "证监会一级行业分类":nil, "中证一级行业分类":nil, "比例(%)":0.71)); return pf_StockLiquidityCost2(w, 20130830T, 5, 2, 2.25, 33); ``` ####### pf_SecurityConcentrationRatio 用途:风险分析相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['市值'] := array(6000000, 4000000); s[0:1]['行业代码'] := array('SW101190', 'SW108030'); s[0:1]['比例(%)'] := array(60, 40); return pf_SecurityConcentrationRatio(s, 2, 9900, t); // 返回:100 ``` ####### pf_GroupHoldRatio 用途:风险分析相关函数。 参数:arg1,arg2,arg3(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['市值'] := array(6000000, 4000000); s[0:1]['行业名称'] := array('测试01', '测试02'); s[0:1]['比例(%)'] := array(60, 40); return pf_GroupHoldRatio(s, 40000000, '行业名称'); ``` 返回: ####### StockRealizedDays 算法 股票:证券变现天数=证券数量MarketVol/(最近RefDays日平均成交量* MaxRealizedPercent)*100 股票型、混合型基金:证券变现天数=5 债券型基金:证券变现天数=10 货币型基金:证券变现天数=3 ####### StockLiquidityCost 用途:风险分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl SetSysParam(pn_stock(), 'sz000001'); return StockLiquidityCost(20180801T, 20180831T, 0, 2.25, 31); // 返回:0.009 ``` ####### pf_GroupConcentrationRatio 用途:风险分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl s := array; s[0:1]['代码'] := array('SH600000', 'SH600028'); s[0:1]['市值'] := array(6000000, 4000000); s[0:1]['行业名称'] := array('测试01', '测试02'); s[0:1]['比例(%)'] := array(60, 40); return pf_GroupConcentrationRatio(s, 3, 40000000, '行业名称', 0); // 返回:100 ``` ####### pf_TurnoverRate ####### 测试函数 ######## 内容 - getDataByDIFF ######## getDataByDIFF 范例 ```tsl arr := getbk('沪深300'); return getDataByDIFF(arr, 20170801T, 20180801T, '成交量', 'StockVolSum(BegT,EndT)'); ``` 返回: ####### 中间函数 ######## 内容 - pf_TurnoverRate_EndT - GiniCoeff ######## pf_TurnoverRate_EndT 算法换手率=(买入金额总和+卖出金额总和)\*2/(T+(T-1)日资产净值)范例 ```tsl W := array( ("代码":"SH600000", "买入金额":1000.0, "卖出金额":0.0), ("代码":"SH600005", "买入金额":2000.0, "卖出金额":20000.0), ("代码":"SH600004", "买入金额":3000.0, "卖出金额":1000.0), ("代码":"SH600007", "买入金额":4000.0, "卖出金额":5000.0), ("代码":"SH600008", "买入金额":5000.0, "卖出金额":6000.0), ("代码":"SH600006", "买入金额":6000.0, "卖出金额":1000.0), ("代码":"SH600009", "买入金额":7000.0, "卖出金额":2000.0), ("代码":"SH600010", "买入金额":8000.0, "卖出金额":1500.0)); return pf_TurnoverRate_EndT(w, 105000, 100000); // 返回:0.71 ``` ######## GiniCoeff 范例 ```tsl x := array(0.1, 0.2, 0.3, 0.4, 0.5, 0.6); y := x ^ 2; return GiniCoeff(x, y, 1); // 返回:0.07 ``` ###### 系统性风险 ####### 内容 - StockBeta2 - pf_ComponentBeta2 - pf_Beta2 - StockRSquare - pf_ComponentBetaPercent2 - pf_IncrementalBeta2 - pf_MarginalBeta2 ####### StockBeta2 算法 (1)取证券区间的对数收益率序列y (2)取指数区间的对数收益率序列x (3)做一元线性回归,回归的斜率即β范例 ```tsl SetSysParam(pn_stock(), 'SH600000'); return stockbeta2('SH000300', 20170801T, 20180801T, 120, 'sw801190'); // 返回:0.58 ``` ####### pf_ComponentBeta2 用途:风险分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5,arg6(按示例顺序传入)。 返回:处理后的结果值。 算法 1、取证券区间的对数收益率序列y 2、取指数区间的对数收益率序列x 3、做一元线性回归,回归的斜率Beta 4、成份β= Beta \* 证券占组合的比例范例 ```tsl W := array( ("代码":"SH600048", "名称":"保利地产", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000002", "名称":"万 科A", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":40.0, "行业代码":"SW801180")); return pf_ComponentBeta2(w, 'SH000300', 20170801T, 20180801T, 10, 0); ``` 返回: ####### pf_Beta2 用途:风险分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5,arg6(按示例顺序传入)。 返回:处理后的结果值。 算法 组合β= 所有证券的 W\*β之和 (1)W = 证券占投资组合的比例 (2)β= 证券的β范例 ```tsl W := array( ("组合编号":29.0, "截止日":"2013-09-06", "代码":"SH510610", "名称":"华夏能源ETF", "数量":1329000.0, "市值":1116360.0, "占净值比例(%)":0.21, "总成本":1065639.81, "成本价":0.8, "收盘":0.84, "浮动盈亏":50720.19, "浮盈率(%)":4.76, "一级分类":"权益", "证券类别":"基金", "板块名称":"ETF基金", "行业代码":"ETF", "投资分类":"交易性", "上市地":"上交所", "证券类别IV":"", "证券类别III":"股票型", "管理人":"华夏基金管理有限公司", "比例(%)":98.34), ("组合编号":29.0, "截止日":"2013-09-06", "代码":"SH510650", "名称":"华夏金融ETF", "数量":20000.0, "市值":18900.0, "占净值比例(%)":0.0, "总成本":17750.0, "成本价":0.89, "收盘":0.9399999999999999, "浮动盈亏":1150.0, "浮盈率(%)":6.48, "一级分类":"权益", "证券类别":"基金", "板块名称":"ETF基金", "行业代码":"ETF", "投资分类":"交易性", "上市地":"上交所", "证券类别IV":"", "证券类别III":"股票型", "管理人":"华夏基金管理有限公司", "比例(%)":1.66)); return pf_Beta2(w, 'SH000300', 20170801T, 20180801T, 10, 0); // 返回:0.015963690277912 ``` ####### StockRSquare 用途:风险分析相关函数。 参数:arg1,arg2,arg3(按示例顺序传入)。 返回:处理后的结果值。 算法 (1)取证券区间的对数收益率序列y (2)取指数区间的对数收益率序列x (3)计算序列y与序列x的相关系数 corr_v (4)回归确定系数 = corr_v的平方。范例 ```tsl SetSysParam(pn_stock(), 'SH600000'); return StockRSquare('SH000300', 20170801T, 20180801T); // 返回:0.25 ``` ####### pf_ComponentBetaPercent2 用途:风险分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5,arg6(按示例顺序传入)。 返回:处理后的结果值。 算法 证券的成份β贡献: (1)取证券区间的对数收益率序列y (2)取指数区间的对数收益率序列x (3)做一元线性回归,回归的斜率Beta (4)成份β= Beta \* 证券占组合的比例 (5)成份β贡献 = 成份β/组合β\* 100 组合β=所有证券的 W\*β之和: (1)W = 证券占投资组合的比例 (2)β= 证券的Beta范例 ```tsl W1 := array( ("代码":"SH600048", "名称":"保利地产", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000002", "名称":"万科A", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":40.0, "行业代码":"SW801180")); return pf_ComponentBetaPercent2(w1, 'SH000300', 20170801T, 20180801T, 10, 0); ``` 返回: ####### pf_IncrementalBeta2 用途:风险分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5,arg6(按示例顺序传入)。 返回:处理后的结果值。 算法 证券的增量β (1)取证券区间的对数收益率序列y (2)取指数区间的对数收益率序列x (3)做一元线性回归,回归的斜率Beta (4)增量β= Beta \* 证券占组合的比例 (5)组合Beta(剔除后) = 组合β- 增量β 组合β=所有证券的 W\*β之和 (1)W = 证券占投资组合的比例 (2)β= 证券的Beta范例 ```tsl W := array( ("代码":"SH600048", "名称":"保利地产", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000002", "名称":"万 科A", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":40.0, "行业代码":"SW801180")); return pf_IncrementalBeta2(w, 'SH000300', 20170801T, 20180801T, 10, 0); ``` 返回: ####### pf_MarginalBeta2 用途:风险分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5,arg6(按示例顺序传入)。 返回:处理后的结果值。 算法 证券的边际β (1)取证券区间的对数收益率序列y (2)取指数区间的对数收益率序列x (3)做一元线性回归,回归的斜率beta即边际β范例 ```tsl W := array( ("代码":"SH600048", "名称":"保利地产", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000002", "名称":"万 科A", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":40.0, "行业代码":"SW801180")); return pf_MarginalBeta2(w, 'SH000300', 20170801T, 20180801T, 10, 0); ``` 返回: ###### 相对风险 ####### 内容 - 跟踪误差 ####### 跟踪误差 ######## 内容 - pf_IncrementalTrackingError2 - pf_ComponentTrackingErrorPercent2 - StockTE2 - pf_TrackingError2_sub - pf_TrackingError2 - pf_ComponentTrackingError2 - pf_MarginalTrackingError2 ######## pf_IncrementalTrackingError2 范例 ```tsl W1 := array( ("代码":"SH600048", "名称":"保利地产", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000002", "名称":"万科A", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":40.0, "行业代码":"SW801180")); W2 := array( ("代码":"SZ000002", "名称":"万 科A", "比例(%)":35.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000069", "名称":"华侨城A", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SZ000402", "名称":"金 融 街", "比例(%)":5.0, "行业代码":"SW801180")); return pf_IncrementalTrackingError2(w1, w2, 'SH000300', 20170101T, 20171231T, 1, 0); ``` 返回: ######## pf_ComponentTrackingErrorPercent2 范例 ```tsl W1 := array( ("代码":"SH600048", "名称":"保利地产", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000002", "名称":"万科A", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":40.0, "行业代码":"SW801180")); W2 := array( ("代码":"SZ000002", "名称":"万 科A", "比例(%)":35.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000069", "名称":"华侨城A", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SZ000402", "名称":"金 融 街", "比例(%)":5.0, "行业代码":"SW801180")); return pf_ComponentTrackingErrorPercent2(w1, w2, 20170101T, 20171231T, 1, 0); ``` 返回: ######## StockTE2 算法 (1)取证券区间复权后的收益率序列 (2)取基准区间复权后的收益率序列 (3)计算跟踪偏离序列 (4)计算跟踪偏离序列的标准差,此标准差跟踪误差范例 ```tsl SetSysParam(pn_stock(), 'SZ000001'); return StockTE2('SH000300', 20170801T, 20180801T, 0, ''); // 返回:3.88 ``` ######## pf_TrackingError2_sub 返回值:0,协方差和相关系数放在对应的返回值变量中 ######## pf_TrackingError2 范例 ```tsl W1 := array( ("代码":"SH600048", "名称":"保利地产", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000002", "名称":"万科A", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":40.0, "行业代码":"SW801180")); W2 := array( ("代码":"SZ000002", "名称":"万 科A", "比例(%)":35.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000069", "名称":"华侨城A", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SZ000402", "名称":"金 融 街", "比例(%)":5.0, "行业代码":"SW801180")); return pf_TrackingError2(w1, w2, 20180701T, 20180731T, 0, 0, s1, s2, s3); // 返回:0.20 ``` ######## pf_ComponentTrackingError2 范例 ```tsl W1 := array( ("代码":"SH600048", "名称":"保利地产", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000002", "名称":"万科A", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":40.0, "行业代码":"SW801180")); W2 := array( ("代码":"SZ000002", "名称":"万 科A", "比例(%)":35.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000069", "名称":"华侨城A", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SZ000402", "名称":"金 融 街", "比例(%)":5.0, "行业代码":"SW801180")); return pf_ComponentTrackingError2(w1, w2, 20180701T, 20180731T, 0, 0); ``` 返回: ######## pf_MarginalTrackingError2 范例 ```tsl W1 := array( ("代码":"SH600048", "名称":"保利地产", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000002", "名称":"万科A", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":40.0, "行业代码":"SW801180")); W2 := array( ("代码":"SZ000002", "名称":"万 科A", "比例(%)":35.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000069", "名称":"华侨城A", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SZ000402", "名称":"金 融 街", "比例(%)":5.0, "行业代码":"SW801180")); return pf_ComponentTrackingError2(w1, w2, 20180701T, 20180731T, 0, 0); ``` 返回: ###### 中间函数 ####### 内容 - YTMOfFund_TimeSeries2 - YTMOfFund_TimeSeries - 中间函数 ####### YTMOfFund_TimeSeries2 用途:日期时间处理函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:日期或时间值。 范例 ```tsl SetSysParam(pn_stock(), 'OF000522'); return YTMOfFund_TimeSeries2('CSI000011', 20180801T, 20180831T, 0); ``` 返回: ####### YTMOfFund_TimeSeries 用途:日期时间处理函数。 参数:arg1,arg2(按示例顺序传入)。 返回:日期或时间值。 范例 ```tsl SetSysParam(pn_stock(), 'OF000522'); return YTMOfFund_TimeSeries(20180801T, 20180831T); ``` 返回: ####### 中间函数 ######## 内容 - YTMOfNOTCurrency_TimeSeries - YTMOfCurrency_TimeSeries ######## YTMOfNOTCurrency_TimeSeries 范例 ```tsl SetSysParam(pn_stock(), 'OF000522'); return YTMOfFund_TimeSeries(20180801T, 20180831T); ``` 返回: ######## YTMOfCurrency_TimeSeries 范例 ```tsl SetSysParam(PN_Stock(), 'OF519588'); return YTMOfCurrency_TimeSeries(20180101T, 20180801T); ``` 返回: ##### 绩效归因 ###### 内容 - Brinson_PerforAttri - BrinsonOfTrueTransanction - 多期收益分解 - 中间函数 ###### Brinson_PerforAttri ###### BrinsonOfTrueTransanction 用途:绩效归因相关函数。 参数:arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 基准样本及其配置 tAllBenchmark := array( ("截止日":40547.00, "比例(%)":25.99, "配置比例(%)":25.99, "贡献度(%)":0.49, "涨幅(%)":1.87, "证券类别":1.00), ("截止日":40547.00, "比例(%)":0.1, "配置比例(%)":0.1, "贡献度(%)":0.00, "涨幅(%)":2.4, "证券类别":1.00), ("截止日":40547.00, "比例(%)":1.48, "配置比例(%)":1.48, "贡献度(%)":0.01, "涨幅(%)":0.63, "证券类别":1.00), ("截止日":40547.00, "比例(%)":0.26, "配置比例(%)":0.26, "贡献度(%)":0.00, "涨幅(%)":1.35, "证券类别":1.00), ("截止日":40547.00, "比例(%)":2.97, "配置比例(%)":2.97, "贡献度(%)":0.2, "涨幅(%)":6.85, "证券类别":1.00), ("截止日":40547.00, "比例(%)":0.19, "配置比例(%)":0.18, "贡献度(%)":0.00, "涨幅(%)":2.26, "证券类别":1.00), ("截止日":40547.00, "比例(%)":8.78, "配置比例(%)":8.78, "贡献度(%)":0.14, "涨幅(%)":1.58, "证券类别":1.00), ("截止日":40547.00, "比例(%)":1.35, "配置比例(%)":1.35, "贡献度(%)":0.04, "涨幅(%)":2.83, "证券类别":1.00), ("截止日":40547.00, "比例(%)":4.9, "配置比例(%)":4.9, "贡献度(%)":0.07, "涨幅(%)":1.46, "证券类别":1.00), ("截止日":40547.00, "比例(%)":31.8, "配置比例(%)":31.8, "贡献度(%)":0.38, "涨幅(%)":1.19, "证券类别":1.00), ("截止日":40547.00, "比例(%)":7.55, "配置比例(%)":7.55, "贡献度(%)":0.2, "涨幅(%)":2.65, "证券类别":1.00), ("截止日":40547.00, "比例(%)":0.18, "配置比例(%)":0.18, "贡献度(%)":0.00, "涨幅(%)":1.66, "证券类别":1.00), ("截止日":40547.00, "比例(%)":1.91, "配置比例(%)":1.91, "贡献度(%)":0.01, "涨幅(%)":0.58, "证券类别":1.00), ("截止日":40547.00, "比例(%)":0.15, "配置比例(%)":0.15, "贡献度(%)":0.00, "涨幅(%)":0.3, "证券类别":1.00), ("截止日":40547.00, "比例(%)":0.29, "配置比例(%)":0.29, "贡献度(%)":0.00, "涨幅(%)":0.38, "证券类别":1.00), ("截止日":40547.00, "比例(%)":1.26, "配置比例(%)":1.26, "贡献度(%)":0.02, "涨幅(%)":1.29, "证券类别":1.00), ("截止日":40547.00, "比例(%)":4.54, "配置比例(%)":4.54, "贡献度(%)":0.02, "涨幅(%)":0.35, "证券类别":1.00), ("截止日":40547.00, "比例(%)":2.46, "配置比例(%)":2.46, "贡献度(%)":0.01, "涨幅(%)":0.27, "证券类别":1.00), ("截止日":40547.00, "比例(%)":2.83, "配置比例(%)":2.83, "贡献度(%)":0.01, "涨幅(%)":0.43, "证券类别":1.00), ("截止日":40547.00, "比例(%)":1.03, "配置比例(%)":1.03, "贡献度(%)":0.02, "涨幅(%)":2.05, "证券类别":1.00)); // 组合资产配置 tAllZCPZ := array( ("截止日":40543.00, "股票市值":7252.00, "基金市值":0.00, "债券市值":0.00, "现金市值":9252.00, "资产净值":16504.00), ("截止日":40547.00, "股票市值":3458.00, "基金市值":0.00, "债券市值":0.00, "现金市值":4448.00, "资产净值":7907.00), ("截止日":40548.00, "股票市值":6343.00, "基金市值":0.00, "债券市值":0.00, "现金市值":8674.00, "资产净值":15017.00), ("截止日":40549.00, "股票市值":5229.00, "基金市值":0.00, "债券市值":0.00, "现金市值":4039.00, "资产净值":9268.00), ("截止日":40550.00, "股票市值":7959.00, "基金市值":0.00, "债券市值":0.00, "现金市值":9683.00, "资产净值":17642.00)); // 组合交易代码 tAllJY := array( ("代码":"SH600050", "名称":"中国联通", "买卖性质":0.00, "截止日":40547.00, "成交量":6073.00, "成交价":0.5, "成交金额":3061.00, "板块名称":"信息技术业", "证券类别":2.00), ("代码":"SH600108", "名称":"亚盛集团", "买卖性质":0.00, "截止日":40547.00, "成交量":9244.00, "成交价":6.99, "成交金额":64571.00, "板块名称":"综合类", "证券类别":2.00), ("代码":"SH600362", "名称":"江西铜业", "买卖性质":0.00, "截止日":40547.00, "成交量":3101.00, "成交价":3.28, "成交金额":10167.00, "板块名称":"金属、非金属", "证券类别":2.00), ("代码":"SH600468", "名称":"百利电气", "买卖性质":1.00, "截止日":40547.00, "成交量":8017.00, "成交价":6.28, "成交金额":50306.00, "板块名称":"机械、设备、仪表", "证券类别":2.00), ("代码":"SH600583", "名称":"海油工程", "买卖性质":0.00, "截止日":40547.00, "成交量":9692.00, "成交价":9.66, "成交金额":93630.00, "板块名称":"采掘业", "证券类别":2.00)); // 组合持仓明细 tAllCC := array( ("截止日":40543.00, "代码":"SH600597", "名称":"光明乳业", "数量":1603.00, "市值":4911.00, "板块名称":"食品、饮料", "证券类别":2.00), ("截止日":40543.00, "代码":"SH600804", "名称":"鹏博士 ", "数量":4608.00, "市值":16925.00, "板块名称":"信息技术业", "证券类别":2.00), ("截止日":40543.00, "代码":"SH600312", "名称":"平高电气", "数量":5765.00, "市值":44049.00, "板块名称":"机械、设备、仪表", "证券类别":2.00), ("截止日":40543.00, "代码":"SZ002022", "名称":"科华生物", "数量":6449.00, "市值":21582.00, "板块名称":"医药、生物制品", "证券类别":1.00), ("截止日":40543.00, "代码":"SH600500", "名称":"中化国际", "数量":7481.00, "市值":69790.00, "板块名称":"批发和零售贸易", "证券类别":2.00)); return BrinsonOfTrueTransanction(inttodate(20110104), inttodate(20110107), tAllBenchmark, tAllZCPZ, tAllJY, tAllCC, array(), 0, 0); ``` ###### 多期收益分解 ####### 内容 - Pf_md_arithmetic - Pf_md_contribution ####### Pf_md_arithmetic 用途:绩效归因相关函数。 参数:arg1,arg2,arg3(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 组合:各资产等权,每期再平衡;以债券收益为基准 data := TSUT_Data_ZSZF(); data[:, 1:] := data[:, 1:] / 4; data[:, '组合(%)'] := sum(data[:, 1:], 1); FJ := select ["沪深300"], ["中证500"], ["中证1000"] from data end; return pf_MD_Arithmetic(data[:, "组合(%)"], data[:, "国债指数"], FJ); ``` ####### Pf_md_contribution 用途:绩效归因相关函数。 参数:arg1,arg2,arg3(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 组合:各资产等权,每期再平衡;以债券收益为基准 data := TSUT_Data_ZSZF(); data[:, 1:] := data[:, 1:] / 4; data[:, '组合(%)'] := sum(data[:, 1:], 1); FJ := select ["沪深300"], ["中证500"], ["中证1000"] from data end; return pf_MD_Contribution(data[:, "组合(%)"], data[:, "国债指数"], FJ); ``` ###### 中间函数 ####### 内容 - BrinsonOfBPercentandReturn - BrinsonOfPAttribution - BrinsonOfPPercentandReturn - BrinsonOfRA - BrinsonOfRbIStandarize - BrinsonOfBR - BrinsonOfRbI - Pf_md_checkdata ####### BrinsonOfBPercentandReturn 用途:绩效归因相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 取沪深300的Brinson-基准t-1日比例和t日涨幅 t := Query("沪深300", "", true, "", "代码", DefaultStockID(), "名称", CurrentStockName(), "板块名称", base(10029)); endt := inttodate(20120601); return BrinsonOfBPercentandReturn(t, endT); ``` 参考StockType StockMarketValue ####### BrinsonOfPAttribution 用途:绩效归因相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 取沪深300的Brinson-基准t-1日比例和t日涨幅 t := Query("沪深300", "", true, "", "代码", DefaultStockID(), "名称", CurrentStockName(), "板块名称", base(10029)); endt := inttodate(20120601); t := BrinsonOfBPercentandReturn(t, endT); // 得到Brison-t日归因,类型为板块资产因子 return BrinsonOfPAttribution(t, 1); // 结果: ``` ####### BrinsonOfPPercentandReturn 用途:绩效归因相关函数。 参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl endt := 40547; // t-1日资产配置 tpZCPZ := array( ("截止日":40543.00, "股票市值":7252.00, "基金市值":0.00, "债券市值":0.00, "现金市值":9252.00, "资产净值":16504.00)); // t-1日持仓明细 tpCC := array( ("截止日":40543.00, "代码":"SH600597", "名称":"光明乳业", "数量":1603.00, "市值":4911.00, "板块名称":"食品、饮料", "证券类别":2.00), ("截止日":40543.00, "代码":"SH600804", "名称":"鹏博士 ", "数量":4608.00, "市值":16925.00, "板块名称":"信息技术业", "证券类别":2.00), ("截止日":40543.00, "代码":"SH600312", "名称":"平高电气", "数量":5765.00, "市值":44049.00, "板块名称":"机械、设备、仪表", "证券类别":2.00), ("截止日":40543.00, "代码":"SZ002022", "名称":"科华生物", "数量":6449.00, "市值":21582.00, "板块名称":"医药、生物制品", "证券类别":1.00), ("截止日":40543.00, "代码":"SH600500", "名称":"中化国际", "数量":7481.00, "市值":69790.00, "板块名称":"批发和零售贸易", "证券类别":2.00)); // t-1日交易明细 JYData := array( ("代码":"SH600050", "名称":"中国联通", "买卖性质":0.00, "截止日":40547.00, "成交量":6073.00, "成交价":0.5, "成交金额":3061.00, "板块名称":"信息技术业", "证券类别":2.00), ("代码":"SH600108", "名称":"亚盛集团", "买卖性质":0.00, "截止日":40547.00, "成交量":9244.00, "成交价":6.99, "成交金额":64571.00, "板块名称":"综合类", "证券类别":2.00), ("代码":"SH600362", "名称":"江西铜业", "买卖性质":0.00, "截止日":40547.00, "成交量":3101.00, "成交价":3.28, "成交金额":10167.00, "板块名称":"金属、非金属", "证券类别":2.00), ("代码":"SH600468", "名称":"百利电气", "买卖性质":1.00, "截止日":40547.00, "成交量":8017.00, "成交价":6.28, "成交金额":50306.00, "板块名称":"机械、设备、仪表", "证券类别":2.00), ("代码":"SH600583", "名称":"海油工程", "买卖性质":0.00, "截止日":40547.00, "成交量":9692.00, "成交价":9.66, "成交金额":93630.00, "板块名称":"采掘业", "证券类别":2.00)); vSGSH := 0; return BrinsonOfPPercentandReturn(EndT, tpZCPZ, tpCC, JYData, vSGSH); ``` ####### BrinsonOfRA 用途:绩效归因相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 基准组合 tP := array( ("行业名称":"纺织、服装、皮毛", "日期":40547.00, "比例(%)":8.18, "贡献度(%)":0.01, "涨幅(%)":0.12), ("行业名称":"房地产业", "日期":40547.00, "比例(%)":7.84, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"综合类", "日期":40547.00, "比例(%)":12.39, "贡献度(%)":0.13, "涨幅(%)":1.05), ("行业名称":"造纸、印刷", "日期":40547.00, "比例(%)":6.86, "贡献度(%)":0.23, "涨幅(%)":3.32), ("行业名称":"木材、家具", "日期":40547.00, "比例(%)":3.12, "贡献度(%)":0.08, "涨幅(%)":2.56), ("行业名称":"石油、化学、塑胶、塑料", "日期":40547.00, "比例(%)":8.14, "贡献度(%)":0.17, "涨幅(%)":2.05), ("行业名称":"金属、非金属", "日期":40547.00, "比例(%)":6.86, "贡献度(%)":0.1, "涨幅(%)":1.46), ("行业名称":"机械、设备、仪表", "日期":40547.00, "比例(%)":22.76, "贡献度(%)":-0.06, "涨幅(%)":-0.28), ("行业名称":"电力、煤气及水的生产和供应业", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"其他制造业", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"建筑业", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"信息技术业", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"医药、生物制品", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"农、林、牧、渔业", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"批发和零售贸易", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"采掘业", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"传播与文化产业", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"交通运输、仓储业", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"电子", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"金融、保险业", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"社会服务业", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00), ("行业名称":"食品、饮料", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00)); // 实际组合 tB := array( ("行业名称":"电力、煤气及水的生产和供应业", "日期":40547.00, "比例(%)":7.31, "贡献度(%)":0.09, "涨幅(%)":1.27), ("行业名称":"其他制造业", "日期":40547.00, "比例(%)":0.1, "贡献度(%)":0.01, "涨幅(%)":10.04), ("行业名称":"纺织、服装、皮毛", "日期":40547.00, "比例(%)":0.62, "贡献度(%)":0.03, "涨幅(%)":4.31), ("行业名称":"房地产业", "日期":40547.00, "比例(%)":6.59, "贡献度(%)":0.25, "涨幅(%)":3.72), ("行业名称":"建筑业", "日期":40547.00, "比例(%)":2.14, "贡献度(%)":0.13, "涨幅(%)":6.21), ("行业名称":"信息技术业", "日期":40547.00, "比例(%)":4.16, "贡献度(%)":0.17, "涨幅(%)":4.08), ("行业名称":"医药、生物制品", "日期":40547.00, "比例(%)":2.74, "贡献度(%)":0.07, "涨幅(%)":2.4), ("行业名称":"综合类", "日期":40547.00, "比例(%)":1.87, "贡献度(%)":0.08, "涨幅(%)":4.29), ("行业名称":"造纸、印刷", "日期":40547.00, "比例(%)":0.22, "贡献度(%)":0.01, "涨幅(%)":5.89), ("行业名称":"农、林、牧、渔业", "日期":40547.00, "比例(%)":0.23, "贡献度(%)":0.01, "涨幅(%)":5.43), ("行业名称":"批发和零售贸易", "日期":40547.00, "比例(%)":3.32, "贡献度(%)":0.13, "涨幅(%)":3.91), ("行业名称":"石油、化学、塑胶、塑料", "日期":40547.00, "比例(%)":2.98, "贡献度(%)":0.13, "涨幅(%)":4.28), ("行业名称":"采掘业", "日期":40547.00, "比例(%)":9.23, "贡献度(%)":0.53, "涨幅(%)":5.71), ("行业名称":"传播与文化产业", "日期":40547.00, "比例(%)":0.42, "贡献度(%)":0.02, "涨幅(%)":4.58), ("行业名称":"交通运输、仓储业", "日期":40547.00, "比例(%)":5.76, "贡献度(%)":0.3, "涨幅(%)":5.21), ("行业名称":"电子", "日期":40547.00, "比例(%)":0.22, "贡献度(%)":0.01, "涨幅(%)":4.36), ("行业名称":"金属、非金属", "日期":40547.00, "比例(%)":11.61, "贡献度(%)":0.5, "涨幅(%)":4.31), ("行业名称":"金融、保险业", "日期":40547.00, "比例(%)":27.64, "贡献度(%)":1.35, "涨幅(%)":4.87), ("行业名称":"社会服务业", "日期":40547.00, "比例(%)":0.56, "贡献度(%)":0.03, "涨幅(%)":5.16), ("行业名称":"机械、设备、仪表", "日期":40547.00, "比例(%)":7.9, "贡献度(%)":0.36, "涨幅(%)":4.57), ("行业名称":"食品、饮料", "日期":40547.00, "比例(%)":4.35, "贡献度(%)":0.14, "涨幅(%)":3.3), ("行业名称":"木材、家具", "日期":40547.00, "比例(%)":0.00, "贡献度(%)":0.00, "涨幅(%)":0.00)); // 昨日累计收入0.5% RPrev := 0.5; return BrinsonOfRA(tP, tB, RPrev, 0); ``` 详情: ####### BrinsonOfRbIStandarize 用途:绩效归因相关函数。 参数:arg1,arg2,arg3(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl EndT := 40547; // 实际组合大类资产 tP := array( ("资产类别":"现金", "截止日":40547, "比例(%)":12.6424158350493, "配置比例(%)":12.7207604508023, "贡献度(%)":0.00, "涨幅(%)":0.00), ("资产类别":"股票", "截止日":40547, "比例(%)":87.3575841649507, "配置比例(%)":87.2792395491977, "贡献度(%)":-0.615879972038692, "涨幅(%)":-0.705010306690456)); // 基准组合大类资产 tB := array( ("资产类别":"股票", "截止日":40547, "比例(%)":80.00, "配置比例(%)":80.00, "贡献度(%)":-0.632126425285057, "涨幅(%)":-0.790158031606322)); BrinsonOfRbIStandarize(EndT, tP, tB); return array(tP, tB); ``` tP: tB: ####### BrinsonOfBR 用途:绩效归因相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 取当前沪深300成分股作为基准组合 endt := inttodate(20110104); t := getbkbydate('SH000300', endt); t := select thisrow as'代码', stockname(thisrow) as'名称', spec(base(10029), thisrow) as'板块名称'from t end; return BrinsonOfBR(t, endt); ``` 参考BrinsonOfRbI ####### BrinsonOfRbI 用途:绩效归因相关函数。 参数:arg1(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl t := array( ("代码":"SZ000001", "名称":"平安银行", "板块名称":"申万金融服务", "截止日":40547.00, "市值(万)":4903379.17867895, "涨幅(%)":1.45662125691135, "比例(%)":0.368360845434954, "贡献度(%)":0.00536562237674391, "配置比例(%)":0.368360845434954), ("代码":"SZ000002", "名称":"万 科A", "板块名称":"申万房地产", "截止日":40547.00, "市值(万)":7941251.81495759, "涨幅(%)":7.05595991319476, "比例(%)":0.596577610209976, "贡献度(%)":0.0420942770275112, "配置比例(%)":0.596577610209976), ("代码":"SZ000009", "名称":"中国宝安", "板块名称":"申万房地产", "截止日":40547.00, "市值(万)":1798996.20295745, "涨幅(%)":1.01371539447539, "比例(%)":0.135147566220692, "贡献度(%)":0.00137001168403798, "配置比例(%)":0.135147566220692), ("代码":"SZ000012", "名称":"南 玻A", "板块名称":"申万建筑建材", "截止日":40547.00, "市值(万)":2517108.971125, "涨幅(%)":1.41772499567345, "比例(%)":0.189094980189828, "贡献度(%)":0.00268084679971496, "配置比例(%)":0.189094980189828), ("代码":"SZ000021", "名称":"长城开发", "板块名称":"申万信息设备", "截止日":40547.00, "市值(万)":1547208.29480579, "涨幅(%)":0.766611195421851, "比例(%)":0.116232282834015, "贡献度(%)":0.000891049692899951, "配置比例(%)":0.116232282834015), ("代码":"SZ000024", "名称":"招商地产", "板块名称":"申万房地产", "截止日":40547.00, "市值(万)":1091457.26198803, "涨幅(%)":7.08464030065077, "比例(%)":0.081994499126284, "贡献度(%)":0.00580901532941746, "配置比例(%)":0.081994499126284), ("代码":"SZ000027", "名称":"深圳能源", "板块名称":"申万公用事业", "截止日":40547.00, "市值(万)":604045.085592783, "涨幅(%)":1.0901848861621, "比例(%)":0.0453782076200221, "贡献度(%)":0.000494706361084741, "配置比例(%)":0.0453782076200221), ("代码":"SH600997", "名称":"开滦股份", "板块名称":"申万采掘", "截止日":40547.00, "市值(万)":1442433.31959197, "涨幅(%)":4.02385199732005, "比例(%)":0.108361180672876, "贡献度(%)":0.00436029353282509, "配置比例(%)":0.108361180672876), ("代码":"SZ000031", "名称":"中粮地产", "板块名称":"申万房地产", "截止日":40547.00, "市值(万)":1129942.03184238, "涨幅(%)":3.69181409902615, "比例(%)":0.0848856241735902, "贡献度(%)":0.00313381944128695, "配置比例(%)":0.0848856241735902), ("代码":"SZ000039", "名称":"中集集团", "板块名称":"申万机械设备", "截止日":40547.00, "市值(万)":2830752.15415284, "涨幅(%)":0.217490843440515, "比例(%)":0.212657071526231, "贡献度(%)":0.000462509658498299, "配置比例(%)":0.212657071526231), ("代码":"SH600900", "名称":"长江电力", "板块名称":"申万公用事业", "截止日":40547.00, "市值(万)":5574600.86357463, "涨幅(%)":0.528401069299433, "比例(%)":0.418785619516787, "贡献度(%)":0.00221286769159896, "配置比例(%)":0.418785619516787), ("代码":"SH600895", "名称":"张江高科", "板块名称":"申万房地产", "截止日":40547.00, "市值(万)":1359749.38354553, "涨幅(%)":2.39180005163744, "比例(%)":0.102149642980993, "贡献度(%)":0.00244321521356684, "配置比例(%)":0.102149642980993), ("代码":"SZ000060", "名称":"中金岭南", "板块名称":"申万有色金属", "截止日":40547.00, "市值(万)":3566737.88775, "涨幅(%)":3.02222357855904, "比例(%)":0.267947171919599, "贡献度(%)":0.00809796260783625, "配置比例(%)":0.267947171919599), ("代码":"SZ000061", "名称":"农 产 品", "板块名称":"申万农林牧渔", "截止日":40547.00, "市值(万)":1135966.9058549, "涨幅(%)":0.113563598647937, "比例(%)":0.0853382360569504, "贡献度(%)":9.69131718889439E - 5, "配置比例(%)":0.0853382360569504), ("代码":"SZ000063", "名称":"中兴通讯", "板块名称":"申万信息设备", "截止日":40547.00, "市值(万)":6211144.92294023, "涨幅(%)":-0.366294787236998, "比例(%)":0.466605275986365, "贡献度(%)":-0.00170915080291086, "配置比例(%)":0.466605275986365), ("代码":"SZ000069", "名称":"华侨城A", "板块名称":"申万房地产", "截止日":40547.00, "市值(万)":1586235.13745747, "涨幅(%)":5.76132333265149, "比例(%)":0.119164130490493, "贡献度(%)":0.00686543085410005, "配置比例(%)":0.119164130490493), ("代码":"SZ000157", "名称":"中联重科", "板块名称":"申万机械设备", "截止日":40547.00, "市值(万)":5791449.63128385, "涨幅(%)":0.424324359869743, "比例(%)":0.435076139277572, "贡献度(%)":0.00184613404293555, "配置比例(%)":0.435076139277572), ("代码":"SZ000401", "名称":"冀东水泥", "板块名称":"申万建筑建材", "截止日":40547.00, "市值(万)":2864537.15609327, "涨幅(%)":3.59712404425727, "比例(%)":0.215195131795343, "贡献度(%)":0.00774083582788139, "配置比例(%)":0.215195131795343)); return BrinsonOfRbI(t); ``` 参考BrinsonOfBR ####### Pf_md_checkdata - BrinsonOfBPercentandReturn - BrinsonOfPAttribution - BrinsonOfPPercentandReturn - BrinsonOfRA - BrinsonOfRbIStandarize - BrinsonOfBR - BrinsonOfRbI - Pf_md_checkdata ##### 收益分析 ###### 内容 - pf_TimeWeightedRateofReturnOfPortfolio - pf_MoneyWeightedRateofReturn - 绩效分析 - 中间函数 ###### pf_TimeWeightedRateofReturnOfPortfolio ###### pf_MoneyWeightedRateofReturn ###### 绩效分析 ####### 内容 - 风险调整收益 - 收益分析 - 择机分析 - 资产配置和组合特征 ####### 风险调整收益 ######## 内容 - pf_RAROC - pf_M2 ######## pf_RAROC 算法 RAROC=(组合收益率均值-基准收益率均值)/abs(var值); 其中,var值为历史模拟法计算的Var范例 ```tsl w1 := array( ("日期":"2009-01-09", "涨幅(%)":1.42051971), ("日期":"2009-01-12", "涨幅(%)":-0.23696827), ("日期":"2009-01-13", "涨幅(%)":-1.94596574), ("日期":"2009-01-14", "涨幅(%)":3.51525369)); w2 := array( ("时间":"2009-01-09", "沪深300":1.60880131), ("时间":"2009-01-12", "沪深300":0.12104169), ("时间":"2009-01-13", "沪深300":-2.316981), ("时间":"2009-01-14", "沪深300":4.2138146)); return pf_RAROC(w1, "涨幅(%)", w2, "沪深300", 0.1); // 返回:-0.06 ``` ######## pf_M2 算法M2=(Rf+(avg[fname1]-Rf)\*(std[fnam2]/std[fname1]))-avg[fname2],其中avg表示平均值,std表示样本标准差范例 ```tsl w1 := array( ("日期":"2009-01-09", "涨幅(%)":1.42051971), ("日期":"2009-01-12", "涨幅(%)":-0.23696827), ("日期":"2009-01-13", "涨幅(%)":-1.94596574), ("日期":"2009-01-14", "涨幅(%)":3.51525369)); w2 := array( ("时间":"2009-01-09", "沪深300":1.60880131), ("时间":"2009-01-12", "沪深300":0.12104169), ("时间":"2009-01-13", "沪深300":-2.316981), ("时间":"2009-01-14", "沪深300":4.2138146)); return pf_M2(w1, "涨幅(%)", w2, "沪深300", 0.1); // 返回:-0.11 ``` ####### 收益分析 ######## 内容 - pf_tPortfolioMV - pf_tPortfolioNV - pf_tPortfolioVol - pf_tPortfolioCash ######## pf_tPortfolioMV 算法市值=endt日组合中所有证券数量\*收盘价的累加范例 ```tsl w1 := array( ("代码":"SH600000", "名称":"浦发银行", "数量":1000.0), ("代码":"SH600004", "名称":"白云机场", "数量":2000.0), ("代码":"SH600005", "名称":"武钢股份", "数量":3000.0), ("代码":"SZ000002", "名称":"万科A", "数量":4000.0)); w2 := array( ("代码":"SH600000", "名称":"浦发银行", "方向":1.0, "数量":1000.0, "成交金额":76700.0), ("代码":"SH600359", "名称":"*ST新农", "方向":0.0, "数量":2000.0, "成交金额":116400.0), ("代码":"SZ000002", "名称":"万科A", "方向":0.0, "数量":3000.0, "成交金额":288900.0), ("代码":"SZ000651", "名称":"格力电器", "方向":0.0, "数量":4000.0, "成交金额":862000.0)); return pf_tPortfolioMV(20180801T, w1, w2); // 返回:377380 ``` ######## pf_tPortfolioNV 算法T日组合资产市值=T日组合证券市值+T日组合剩余现金范例 ```tsl w1 := array( ("日期":41102.0, "股票市值":457520.0, "股票占净值比例(%)":23.27, "银行存款和清算备付金市值":1508355.6, "银行存储和清算备付金占净值比例(%)":76.73)); w2 := array( ("代码":"SH600000", "名称":"浦发银行", "数量":1000.0), ("代码":"SH600004", "名称":"白云机场", "数量":2000.0), ("代码":"SH600005", "名称":"武钢股份", "数量":3000.0), ("代码":"SZ000002", "名称":"万科A", "数量":4000.0)); w3 := array( ("代码":"SH600000", "名称":"浦发银行", "方向":1.0, "数量":1000.0, "成交金额":76700.0), ("代码":"SH600359", "名称":"*ST新农", "方向":0.0, "数量":2000.0, "成交金额":116400.0), ("代码":"SZ000002", "名称":"万科A", "方向":0.0, "数量":3000.0, "成交金额":288900.0), ("代码":"SZ000651", "名称":"格力电器", "方向":0.0, "数量":4000.0, "成交金额":862000.0)); w4 := array( ("代码":"OF510050", "数量":10000.0, "成交金额":17000.0, "方向":0.0)); return pf_tPortfolioNV(20120712T, w1, w2, w3, w4); // 返回:521455.6 ``` ######## pf_tPortfolioVol 范例 ```tsl w1 := array( ("代码":"SH600000", "名称":"浦发银行", "数量":1000.0), ("代码":"SH600004", "名称":"白云机场", "数量":2000.0), ("代码":"SH600005", "名称":"武钢股份", "数量":3000.0), ("代码":"SZ000002", "名称":"万科A", "数量":4000.0)); w2 := array( ("代码":"SH600000", "名称":"浦发银行", "方向":1.0, "数量":1000.0, "成交金额":76700.0), ("代码":"SH600359", "名称":"*ST新农", "方向":0.0, "数量":2000.0, "成交金额":116400.0), ("代码":"SZ000002", "名称":"万科A", "方向":0.0, "数量":3000.0, "成交金额":288900.0), ("代码":"SZ000651", "名称":"格力电器", "方向":0.0, "数量":4000.0, "成交金额":862000.0)); return pf_tPortfolioVol(20180801T, w1, w2); ``` 返回: ######## pf_tPortfolioCash 范例 ```tsl w1 := array( ("日期":41102.0, "股票市值":457520.0, "股票占净值比例(%)":23.27, "银行存款和清算备付金市值":1508355.6, "银行存储和清算备付金占净值比例(%)":76.73)); w2 := array( ("代码":"SH600000", "名称":"浦发银行", "数量":1000.0), ("代码":"SH600004", "名称":"白云机场", "数量":2000.0), ("代码":"SH600005", "名称":"武钢股份", "数量":3000.0), ("代码":"SZ000002", "名称":"万科A", "数量":4000.0)); w3 := array( ("代码":"SH600000", "名称":"浦发银行", "方向":1.0, "数量":1000.0, "成交金额":76700.0), ("代码":"SH600359", "名称":"*ST新农", "方向":0.0, "数量":2000.0, "成交金额":116400.0), ("代码":"SZ000002", "名称":"万科A", "方向":0.0, "数量":3000.0, "成交金额":288900.0), ("代码":"SZ000651", "名称":"格力电器", "方向":0.0, "数量":4000.0, "成交金额":862000.0)); w4 := array( ("代码":"OF510050", "数量":10000.0, "成交金额":17000.0, "方向":0.0)); return pf_tPortfolioCash(20120712T, w1, w2, w3, w4); // 返回:334755.6 ``` ####### 择机分析 ######## 内容 - pf_CAPM - pf_HM - pf_TM - pf_CL ######## pf_CAPM 算法Rp - Rf = Alpha + Beta(Rm - Rf),其中rf为无风险利率,Rp为资本成本,rM为市场组合收益率 ######## pf_HM 算法 Rp-Rf = Alpha + Beta1*(Rm-Rf) + Beta2*(Rm-Rf)\*D, 其中, rf为无风险利率, Rp为资本成本, rM为市场组合收益率, D 为虚拟变量,当Rm>Rf时,D=1,反之D=0 Beta2 为正时表明资产管理人具有较好的市场时机把握能力 ######## pf_TM 算法 Rf-Rp = Alpha + Beta1*(Rm-Rf) + Beta2*(Rm-Rf)^2, 其中, rf为无风险利率, Rp为资本成本, rM为市场组合收益率, Alpha为证券选择能力, Beta2为市场时机能力。 ######## pf_CL 算法 Rp - Rf = Alpha + Beta1*max(Rm-Rf ,0) + Beta2 * min(Rm-Rf,0), 其中, rf为无风险利率, Rp为资本成本, rM为市场组合收益率, Beta1为上涨择时, Beta2 为下跌择时, Beta1 - Beta2 为择时能力 ####### 资产配置和组合特征 ######## 内容 - pf_TZBL_CP - pf_InverstmentRatio ######## pf_TZBL_CP 范例 ```tsl w1 := array( ("代码":"SH600048", "名称":"保利地产", "市值":11600.0004, "数量":1000.0, "比例(%)":36.5124), ("代码":"SH600383", "名称":"金地集团", "市值":6650.0001, "数量":1000.0, "比例(%)":20.9317), ("代码":"SZ000002", "名称":"万科A", "市值":8979.9995, "数量":1000.0, "比例(%)":28.2657), ("代码":"SZ000031", "名称":"中粮地产", "市值":4540.0, "数量":1000.0, "比例(%)":14.2902)); w2 := array( ("代码":"SZ000002", "名称":"万 科A", "比例(%)":35.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000069", "名称":"华侨城A", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SZ000402", "名称":"金 融 街", "比例(%)":5.0, "行业代码":"SW801180")); return pf_TZBL_CP(w1, w2, array(), 20120721T); ``` 返回: ######## pf_InverstmentRatio 范例 ```tsl w1 := array( ("代码":"SH600048", "名称":"保利地产", "市值":11600.0004, "数量":1000.0, "比例(%)":36.5124), ("代码":"SH600383", "名称":"金地集团", "市值":6650.0001, "数量":1000.0, "比例(%)":20.9317), ("代码":"SZ000002", "名称":"万科A", "市值":8979.9995, "数量":1000.0, "比例(%)":28.2657), ("代码":"SZ000031", "名称":"中粮地产", "市值":4540.0, "数量":1000.0, "比例(%)":14.2902)); w2 := array( ("代码":"SZ000002", "名称":"万 科A", "比例(%)":35.0, "行业代码":"SW801180"), ("代码":"SZ000031", "名称":"中粮地产", "比例(%)":30.0, "行业代码":"SW801180"), ("代码":"SH600383", "名称":"金地集团", "比例(%)":20.0, "行业代码":"SW801180"), ("代码":"SZ000069", "名称":"华侨城A", "比例(%)":10.0, "行业代码":"SW801180"), ("代码":"SZ000402", "名称":"金 融 街", "比例(%)":5.0, "行业代码":"SW801180")); return pf_InverstmentRatio(w1, w2); ``` 返回: ###### 中间函数 ####### 内容 - AddTitle - GetDateArr ####### AddTitle 用途:收益分析相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl return AddTitle(``array('a':1), 'b'); ``` 返回: ####### GetDateArr 用途:日期时间处理函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:日期或时间值。 范例 ```tsl return GetDateArr(20111230T, 20120914T, 1, '日线'); ``` 返回: ##### 风险、回报 ###### 内容 - pf_CumulativeReturn - pf_StandardDeviation - pf_SemiDeviation - pf_StdOfUp - pf_StdOfDown - pf_PercentofUp - pf_PercentofDown - pf_AvgGain - pf_AvgGainOfUp - pf_AvgGainOfDown - pf_SharpRatio - pf_SortinoRatio ###### pf_CumulativeReturn 用途:风险、回报相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 算法R=d=1n1+rd-1\*100,其中:rd是d时点的收益率范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_CumulativeReturn(t, '涨幅(%)'); // 返回结果:-1.0874 ``` ###### pf_StandardDeviation 用途:风险、回报相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_StandardDeviation(t, '涨幅(%)'); // 返回结果:1.9090 ``` ###### pf_SemiDeviation 用途:风险、回报相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_SemiDeviation(t, '涨幅(%)'); // 返回结果:1.2283 ``` ###### pf_StdOfUp 用途:风险、回报相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_StdOfUp(t, '涨幅(%)'); // 返回结果:1.3406 ``` ###### pf_StdOfDown 用途:风险、回报相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_StdOfDown(t, '涨幅(%)'); // 返回结果:1.2283 ``` ###### pf_PercentofUp 用途:风险、回报相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_PercentofUp(t, '涨幅(%)'); // 返回结果:49.58 ``` ###### pf_PercentofDown 用途:风险、回报相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_PercentofDown(t, '涨幅(%)'); // 返回结果:50.42 ``` ###### pf_AvgGain 用途:进行数值统计计算。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_AvgGain(t, '涨幅(%)'); // 返回结果:0.0088 ``` ###### pf_AvgGainOfUp 用途:进行数值统计计算。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_AvgGainOfUp(t, '涨幅(%)'); // 返回结果:1.43 ``` ###### pf_AvgGainOfDown 用途:进行数值统计计算。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_AvgGainOfDown(t, '涨幅(%)'); // 返回结果:-1.39 ``` ###### pf_SharpRatio 用途:风险、回报相关函数。 参数:arg1,arg2,arg3(按示例顺序传入)。 返回:处理后的结果值。 算法 Sharp = ERP-Rf/σp,其中:ERP为收益率均值,σp为收益率标准差范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); Rf := 0.0025; setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_SharpRatio(t, '涨幅(%)', Rf); // 返回结果:0.0033 ``` ###### pf_SortinoRatio 用途:风险、回报相关函数。 参数:arg1,arg2,arg3(按示例顺序传入)。 返回:处理后的结果值。 算法 Sharp = ERP-Rf/σp, 其中:ERP为收益率均值,σp为收益率下方标准差范例 ```tsl // 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列 BegT := inttodate(20110101); EndT := inttodate(20110630); Rf := 0.0025; setsysparam(pn_stock(), 'SW801020'); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅(%)', StockZf3()); return pf_SortinoRatio(t, '涨幅(%)', Rf); // 返回结果:0.0051 ``` ##### 相对回报 ###### 内容 - pf\_ Alpha - pf_Beta - pf_R2 - pf_TrackingError - pf_InformationRatio - pf_TreynorRatio - pf_Jensen - pf_ExcessReturn - pf_Corr ###### pf\_ Alpha 算法 平均实际回报和平均预期回报的差额即α系数,即组合收益率序列与基准收益率序列的回归截距范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数 stockid := 'SH600000'; IndexId := 'SH000001'; BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅1', spec(StockZf3(), stockid), '涨幅2', spec(StockZf3(), IndexId)); return pf_Alpha(t, '涨幅1', t, '涨幅2'); // 返回结果:0.0566 ``` ###### pf_Beta 用途:相对回报相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 算法 即组合收益率序列与基准收益率序列的回归斜率范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数 stockid := 'SH600000'; IndexId := 'SH000001'; BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅1', spec(StockZf3(), stockid), '涨幅2', spec(StockZf3(), IndexId)); return pf_Beta(t, '涨幅1', t, '涨幅2'); // 返回结果:0.97 ``` ###### pf_R2 用途:相对回报相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 算法 即组合收益率序列与基准收益率序列的相对系数的平方范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数 stockid := 'SH600000'; IndexId := 'SH000001'; BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅1', spec(StockZf3(), stockid), '涨幅2', spec(StockZf3(), IndexId)); return pf_R2(t, '涨幅1', t, '涨幅2'); // 返回结果:0.46 ``` ###### pf_TrackingError 用途:相对回报相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 算法 TrackingError= σ(Yi-Xi),即组合收益率与基准收益率之差的标准差范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数 stockid := 'SH600000'; IndexId := 'SH000001'; BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅1', spec(StockZf3(), stockid), '涨幅2', spec(StockZf3(), IndexId)); return pf_TrackingError(t, '涨幅1', t, '涨幅2'); // 返回结果:1.13 ``` ###### pf_InformationRatio 用途:按指定格式输出结果。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 算法即组合收益率均值与基准收益率均值之差和跟踪误差之比值 IR=Y-XσYi-Xi范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数 stockid := 'SH600000'; IndexId := 'SH000001'; BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅1', spec(StockZf3(), stockid), '涨幅2', spec(StockZf3(), IndexId)); return pf_InformationRatio(t, '涨幅1', t, '涨幅2'); // 返回结果:0.05 ``` ###### pf_TreynorRatio 用途:相对回报相关函数。 参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。 返回:处理后的结果值。 算法TR=(X-Rf)/β,其中X为组合收益率的均值,β为组合beta范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数 stockid := 'SH600000'; IndexId := 'SH000001'; Rf := 0.025; BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅1', spec(StockZf3(), stockid), '涨幅2', spec(StockZf3(), IndexId)); return pf_TreynorRatio(t, '涨幅1', t, '涨幅2', Rf); // 返回结果:0.0243 ``` ###### pf_Jensen 用途:相对回报相关函数。 参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。 返回:处理后的结果值。 算法Jensen=X-Rf-β\*(Y-Rf),其中X为组合收益率的均值,β为组合beta,Y为基准收益率的均值范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数 stockid := 'SH600000'; IndexId := 'SH000001'; Rf := 0.025; BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅1', spec(StockZf3(), stockid), '涨幅2', spec(StockZf3(), IndexId)); return pf_Jensen(t, '涨幅1', t, '涨幅2', Rf); // 返回结果:0.0560 ``` ###### pf_ExcessReturn 用途:相对回报相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 算法组合累计收益率与基准累计收益率之差范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数 stockid := 'SH600000'; IndexId := 'SH000001'; BegT := inttodate(20110101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '日期', sp_time(), '涨幅1', spec(StockZf3(), stockid), '涨幅2', spec(StockZf3(), IndexId)); return pf_ExcessReturn(t, '涨幅1', t, '涨幅2'); // 返回结果:6.13 ``` ###### pf_Corr 用途:相对回报相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl s1 := `array('涨幅%':(1.42, -0.23, -1.94, 3.52)); s2 := `array('基准':(1.61, 0.12, -2.31, 4.13)); return pf_Corr(s1, '涨幅%', s2, '基准'); // 返回:0.99 ``` ##### 收益 ###### 内容 - pf_TrailingReturn - pf_ReturnandRisk - pf_RollingReturn - Pf_RelativePerformance - 中间函数 ###### pf_TrailingReturn 用途:收益相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数 stockid := 'SH600000'; IndexId := 'SH000001'; BegT := inttodate(20050101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '截止日', sp_time(), '涨幅1', spec(StockZf3(), stockid), '涨幅2', spec(StockZf3(), IndexId)); return pf_TrailingReturn(t, '涨幅1', t, '涨幅2'); ``` ###### pf_ReturnandRisk 用途:收益相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数 stockid := 'SH600000'; IndexId := 'SH000001'; BegT := inttodate(20050101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '截止日', sp_time(), '涨幅1', spec(StockZf3(), stockid), '涨幅2', spec(StockZf3(), IndexId)); return pf_ReturnandRisk(t, '涨幅1', t, '涨幅2'); ``` ###### pf_RollingReturn 用途:收益相关函数。 参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,展示组合区间周收益率 stockid := 'SH600000'; BegT := inttodate(20050101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '截止日', sp_time(), '涨幅', spec(StockZf3(), stockid)); return pf_RollingReturn(t, '涨幅', begt, endt, cy_week()); ``` ###### Pf_RelativePerformance 用途:收益相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数 stockid := 'SH600000'; IndexId := 'SH000001'; BegT := inttodate(20050101); EndT := inttodate(20110630); setsysparam(pn_date(), EndT); n := tradedays(begt, endt); t := nday(n, '截止日', sp_time(), '涨幅1', spec(StockZf3(), stockid), '涨幅2', spec(StockZf3(), IndexId)); return Pf_RelativePerformance(t, '涨幅1', t, '涨幅2'); ``` ###### 中间函数 ####### 内容 - pf*AnnualFormula* ####### pf*AnnualFormula* 算法 单利: V=YN×IV 复利: V=100×(1+IV100YNN-1) 风险类: V=YN×IV 注: V :年化后的指标值 IV :指标值 YN :年周期数,与周期相关,可通过pf_getDayNnmOfYear()得到 N :周期数,指标值计算的周期数 范例 ```tsl // 年化信息比率 setsysparam(pn_cycle(), cy_day()); YN := pf_getDayNnmOfYear(); InformationRatio := 0.48; return pf_AnnualFormula_(3, InformationRatio, YN); ``` 结果:7.58946638440411 ##### 压力测试和情景分析 ###### 内容 - Stocks_PredictAnalysis - pf_StressTestingOfPortfolio - Stocks_HistAnalysis - pf_StressTestingOfBond - pf_StressTestingOfStock - pf_StressTestingOfFund ###### Stocks_PredictAnalysis 用途:压力测试和情景分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl W := array( ("代码":"SH600048", "名称":"保利地产", "市值":1000000.0), ("代码":"SH600383", "名称":"金地集团", "市值":2000000.0), ("代码":"SZ000002", "名称":"万 科A", "市值":3200000.0), ("代码":"SZ000031", "名称":"中粮地产", "市值":4500000.0)); return Stocks_PredictAnalysis(w, 'SH000300', 20110101T, 20111231T, 0, '-5;-5;-10', 10, 0, 5); ``` 返回: ###### pf_StressTestingOfPortfolio 用途:压力测试和情景分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl W := array( ("代码":"SH600048", "名称":"保利地产", "市值":1000000.0), ("代码":"SH600383", "名称":"金地集团", "市值":2000000.0), ("代码":"SZ000002", "名称":"万 科A", "市值":3200000.0), ("代码":"SZ000031", "名称":"中粮地产", "市值":4500000.0)); return pf_StressTestingOfPortfolio(w, 'SH000001', 20100101T, 20121231T, 5, -10, -5, 5, 10, 0, 0, 0); ``` 返回: ###### Stocks_HistAnalysis 用途:压力测试和情景分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl W := array( ("代码":"SH600048", "名称":"保利地产", "市值":1000000.0), ("代码":"SH600383", "名称":"金地集团", "市值":2000000.0), ("代码":"SZ000002", "名称":"万 科A", "市值":3200000.0), ("代码":"SZ000031", "名称":"中粮地产", "市值":4500000.0)); return Stocks_HistAnalysis(w, 'SH000300', 20110808T, 20110809T, '10;30;70'); ``` 返回: ###### pf_StressTestingOfBond 用途:压力测试和情景分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl W := array( ("组合编号":107.0, "截止日":"2013-01-31", "代码":"BK050001", "名称":"05国债01", "数量":8590.0, "市值":882515.13, "占净值比例(%)":0.00069371, "总成本":859000.0, "成本价":100.0, "收盘":102.7375, "浮动盈亏":23515.13, "浮盈率(%)":2.7375, "一级分类":"固定收益", "证券类别":"债券", "板块名称":"国债", "行业代码":"B_GZXQ", "投资分类":"可供出售", "上市地":"银行间", "证券类别IV":"", "剩余期限":2.07671233, "证券类别III":"政府债券", "证监会一级行业分类":nil, "中证一级行业分类":nil, "管理人":nil)); return pf_StressTestingOfBond(w, 20130131T, 0.1, 0, 0); ``` 返回: ###### pf_StressTestingOfStock 用途:压力测试和情景分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl W := array( ("代码":"SH600048", "名称":"保利地产", "市值":1000000.0), ("代码":"SH600383", "名称":"金地集团", "市值":2000000.0), ("代码":"SZ000002", "名称":"万 科A", "市值":3200000.0), ("代码":"SZ000031", "名称":"中粮地产", "市值":4500000.0)); return pf_StressTestingOfStock(w, 'SH000300', 20060101T, 20111231T, 10, 0, 5, -10, 0, 0); ``` 返回: ###### pf_StressTestingOfFund 用途:压力测试和情景分析相关函数。 参数:arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl W := array( ("代码":"SZ159901", "名称":"", "市值":0.0, "行业代码":"")); return pf_StressTestingOfFund(W, 'SH000001', 20110831T, 20120831T, 10, 0, 5, -10, 0, 0); ``` 返回: ##### 中间函数 ###### 内容 - RiskFreeRateofReturnDayly - pf_ReturnToCumulativeReturn - pf_CumulativeReturnToReturn ###### RiskFreeRateofReturnDayly 用途:中间函数相关函数。 参数:arg1,arg2,arg3,arg4(按示例顺序传入)。 返回:处理后的结果值。 算法 单利:非年化收益率=年化收益率/周期(日,周,月)数量×100% 复利:非年化收益率=(1+年化收益率)1/周期(日,周,月)数量×100%范例 ```tsl SetSysParam(pn_stock(), 'sz000001'); SetSysParam(PN_Date(), 20180801T); return RiskFreeRateofReturnDayly(3, cy_day(), '单利', 250); // 返回:0.01 ``` ###### pf_ReturnToCumulativeReturn 用途:中间函数相关函数。 参数:arg1,arg2,arg3(按示例顺序传入)。 返回:处理后的结果值。 算法 复合收益率=((当天日收益率+1)*(1+昨日复合收益率)-1)*100,其中初始日前一天复合收益率为0范例 ```tsl t := array(('日期':20180801T, '涨幅%':1.42051971), ('日期':20180802T, '涨幅%':1.18018526), ('日期':20180803T, '涨幅%':0.9023545)); return pf_ReturnToCumulativeReturn(t, '涨幅%', 1); // 返回:3.54 ``` ###### pf_CumulativeReturnToReturn 用途:中间函数相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 算法 日收益率=((当天复合收益率+1)/(1+前天复合收益率)-1)\*100,其中初始日前一天复合收益率为0范例 ```tsl t := array(('日期':20180801T, '涨幅%':1.42051971), ('日期':20180802T, '涨幅%':1.18018526), ('日期':20180803T, '涨幅%':0.9023545)); return pf_CumulativeReturnToReturn(t, '涨幅%'); ``` 返回: