playbook/docs/tsl/syntax_book/function/financial/portfolio_evaluation.md

94 KiB
Raw Blame History

组合评价

内容
  • 常用函数
  • 风险分析
  • 绩效归因
  • 收益分析
  • 风险、回报
  • 相对回报
  • 收益
  • 压力测试和情景分析
  • 中间函数
常用函数
内容
  • pf_MinRecoveryPeriod
  • pf_WinRatio
  • pf_getVaRConfidence
  • pf_getDayNnmOfYear
  • pf_Omega
  • pf_MaxDrawDown
  • pf_CalmarRatio
  • pf_Rachev
  • Pf_Var
pf_MinRecoveryPeriod

用途:进行数值统计计算。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

算法最小恢复天=恢复到最大回撤起始日净值对应的日期-最大回撤起始日范例

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

用途:常用函数相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:常用函数相关函数。 参数:无。 返回:处理后的结果值。

范例

return pf_getVaRConfidence();
// 返回95
pf_getDayNnmOfYear

用途:常用函数相关函数。 参数:无。 返回:处理后的结果值。

范例

SetSysParam(PN_Cycle(), cy_week());
return pf_getDayNnmOfYear();
// 返回52
pf_Omega

用途:常用函数相关函数。 参数arg1arg2arg3按示例顺序传入。 返回:处理后的结果值。

算法

1、t表中Fname中数据均减去临界值MeanR得到t1表

2、对于t1表中的Fname汇总该列大于0的值为v1汇总该列小于0的值

3、omega=v1/abs(v2)范例

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

用途:进行数值统计计算。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:常用函数相关函数。 参数arg1arg2arg3按示例顺序传入。 返回:处理后的结果值。

算法Calmar比率=年化收益率/最大回撤率*100范例

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

用途:常用函数相关函数。 参数arg1arg2arg3arg4arg5按示例顺序传入。 返回:处理后的结果值。

算法Rachev=(1-alpha)下的CVaR(无风险收益率-收益率)/(1-beta)下的CVaR(收益率-无风险收益率)其中CVAR代表风险度量范例

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

用途:常用函数相关函数。 参数arg1arg2arg3按示例顺序传入。 返回:处理后的结果值。

算法年化收益算术平均-标准正态分布置信度为0.95的随机变量*年化标准差范例

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

范例

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

范例

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、组合标准差σ=√(WTCovW)=√(∑Wi∑WjCOVi,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方法计算组合的标准差σ=√(WTCovW)=√(∑Wi∑WjCOVi,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=0Risk Metric方法一般取Lamda=0.94范例

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)范例

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、假设组合的初始市值MarketValueSt0为股票初始市值

St0[i]=weights[i]*MarketValuei,模拟持有期为DeltaT 股票的个数为n;

3、对Corr进行Cholesky分解分解出来的上三角矩阵为L有Corr=(`L)*L;

4、产生随机序列矩阵AA[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|

备注:

蒙特卡罗模拟法与历史模拟法十分类似,他们的区别在于前者利用统计方法估计历史上市场因子运动的参数然后模拟市场因子未来的变化情景,而后者则直接根据历史数据来模拟市场因子的未来变化情景范例

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

范例

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

范例

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

范例

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范例

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

范例

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

范例

StockArr := array("OF000001", "SH000300");
begt := 20240321T;
endt := 20240331T;
return Method := 1; // 涨幅法
return pf_GetPortfolioRate(StockArr, BegT, EndT, return Method);

返回:

######### pf_stockszf

范例

GetBkWeightByDate('SH000300', 20111231T, t);
s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end;
return pf_stockszf(s, 20180801T, 20180802T, 0, 0, 50);

返回:

######### CovarianceAttenuation

算法

创建新矩阵Rv0=(1-0.94)/(1-0.94的m次方)其中m未A的列数

对A的行做二重循环列做单重循环累加0.94的L次方行一重循环元素H1行二重循环元素H2记作V将v0*V赋予R的H1行H2列。其中L为m-当前元素所在的列数。范例

A := array((1, 2, 3), (4, 5, 6));
return CovarianceAttenuation(A);

返回:

######### pf_CovarianceANDCorrelation

范例

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

范例

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

范例

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)/组合标准差范例

GetBkWeightByDate('SH000300', 20111231T, t);
s := select ['指数代码'] as'行业代码', ['代码'] , ['比例(%)'] from t end;
return pf_MarginalStandardDeviation1(s, 20180801T, 20180802T, 20, 0, 0, 0);

返回:

######### QHZF_XZ

范例

return QHZF_XZ('IF01', 20180801T, 20180810T, cy_day());

返回:

####### var分析

######## 内容

  • pf_VARTest
  • 中间函数

######## pf_VARTest

范例

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

范例

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

范例

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的标准差范例

SetSysParam(PN_Stock(), 'SH000300');
SetSysParam(PN_Cycle(), cy_day());
return StockStandardDeviation(20180801T, 20180803T);
// 返回0.29

######## pf_StandardDeviation2

范例

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的组合标准差(%)(剔除后)范例

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)/组合标准差范例

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范例

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相对于阀值的标准差范例

SetSysParam(PN_Stock(), 'SH000300');
SetSysParam(PN_Cycle(), cy_day());
return StockSemiStandardDeviation(20170801T, 20180801T, 0, 0.05);
// 返回1.17

######## StockStandardDeviation2

算法

1、取证券区间的对数收益率序列y

2、计算证券区间对数收益率序列y的标准差范例

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

用途:风险分析相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

算法波动额=(区间最高价-区间最低价)/区间最低价/区间成交金额范例

SetSysParam(PN_Stock(), 'SZ000001');
return StockAmplitudePerAmount(20180801T, 20180803T);
// 返回0.34

####### StockCashFlowInFuture

用途:风险分析相关函数。 参数arg1arg2arg3arg4arg5按示例顺序传入。 返回:处理后的结果值。

范例

SetSysParam(PN_Stock(), 'SZ000001');
return StockCashFlowInFuture(20170801T, 20180803T, 5, 10, 1);
// 返回11.18

####### pf_GiniCoefficient

用途:风险分析相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

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按示例顺序传入。 返回:处理后的结果值。

算法

范例

SetSysParam(pn_stock(), 'sz000001');
return pf_ILLIQ(20180820T);
// 返回:-0.0038

####### pf_Amivest

用途:风险分析相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

算法

范例

SetSysParam(pn_stock(), 'sz000001');
return pf_Amivest(20121231T, 18);
// 返回183495108.82

####### pf_GiniCoeff

用途:风险分析相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:风险分析相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

算法

1、计算每日v(最高价-最低价)/前收盘/成交量*100000000

2、martin= N个交易日的v的平均范例

SetSysParam(pn_stock(), 'sz000001');
return pf_Martin(20180801T, 18);
// 返回0.03

####### pf_CashFlowInFuture2

用途:风险分析相关函数。 参数arg1arg2arg3arg4arg5按示例顺序传入。 返回:处理后的结果值。

范例

s := array;
s[0:1]['代码'] := array('SH600000', 'SH600028');
s[0:1]['数量'] := array(500, 100);
return pf_CashFlowInFuture2(s, 20180801T, 20180830T, 5, 100);
// 返回:5620

####### StockAmplitudePerVolumn

用途:风险分析相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

算法波动量=(区间最高价-区间最低价) /区间最低价/区间成交量*1000000范例

SetSysParam(pn_stock(), 'sz000001');
return StockAmplitudePerVolumn(20180801T, 20180831T);
// 返回0.009

####### pf_SharevsNegotiableShare

用途:风险分析相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

算法占流通股比例=持仓数量/流通股数量范例

s := array;
s[0:1]['代码'] := array('SH600000', 'SH600028');
s[0:1]['数量'] := array(50000000, 100000000);
return pf_SharevsNegotiableShare(s, 20180801T);

返回:

####### pf_StockLiquidityCost2

用途:风险分析相关函数。 参数arg1arg2arg3arg4arg5arg6按示例顺序传入。 返回:处理后的结果值。

算法

成交金额法:返回市值和冲击成本数量/10000000

成交量法:返回数量和冲击成本数量/100000范例

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

用途:风险分析相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:风险分析相关函数。 参数arg1arg2arg3按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:风险分析相关函数。 参数arg1arg2arg3arg4arg5按示例顺序传入。 返回:处理后的结果值。

范例

SetSysParam(pn_stock(), 'sz000001');
return StockLiquidityCost(20180801T, 20180831T, 0, 2.25, 31);
// 返回0.009

####### pf_GroupConcentrationRatio

用途:风险分析相关函数。 参数arg1arg2arg3arg4arg5按示例顺序传入。 返回:处理后的结果值。

范例

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

范例

arr := getbk('沪深300');
return getDataByDIFF(arr, 20170801T, 20180801T, '成交量', 'StockVolSum(BegT,EndT)');

返回:

####### 中间函数

######## 内容

  • pf_TurnoverRate_EndT
  • GiniCoeff

######## pf_TurnoverRate_EndT

算法换手率=(买入金额总和+卖出金额总和)*2/(T+(T-1)日资产净值)范例

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

范例

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)做一元线性回归,回归的斜率即β范例

SetSysParam(pn_stock(), 'SH600000');
return stockbeta2('SH000300', 20170801T, 20180801T, 120, 'sw801190');
// 返回0.58

####### pf_ComponentBeta2

用途:风险分析相关函数。 参数arg1arg2arg3arg4arg5arg6按示例顺序传入。 返回:处理后的结果值。

算法

1、取证券区间的对数收益率序列y

2、取指数区间的对数收益率序列x

3、做一元线性回归回归的斜率Beta

4、成份β= Beta * 证券占组合的比例范例

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

用途:风险分析相关函数。 参数arg1arg2arg3arg4arg5arg6按示例顺序传入。 返回:处理后的结果值。

算法

组合β= 所有证券的 W*β之和

(1)W = 证券占投资组合的比例

(2)β= 证券的β范例

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

用途:风险分析相关函数。 参数arg1arg2arg3按示例顺序传入。 返回:处理后的结果值。

算法

(1)取证券区间的对数收益率序列y

(2)取指数区间的对数收益率序列x

(3)计算序列y与序列x的相关系数 corr_v

(4)回归确定系数 = corr_v的平方。范例

SetSysParam(pn_stock(), 'SH600000');
return StockRSquare('SH000300', 20170801T, 20180801T);
// 返回0.25

####### pf_ComponentBetaPercent2

用途:风险分析相关函数。 参数arg1arg2arg3arg4arg5arg6按示例顺序传入。 返回:处理后的结果值。

算法

证券的成份β贡献:

(1)取证券区间的对数收益率序列y

(2)取指数区间的对数收益率序列x

(3)做一元线性回归回归的斜率Beta

(4)成份β= Beta * 证券占组合的比例

(5)成份β贡献 = 成份β/组合β* 100

组合β=所有证券的 W*β之和:

(1)W = 证券占投资组合的比例

(2)β= 证券的Beta范例

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

用途:风险分析相关函数。 参数arg1arg2arg3arg4arg5arg6按示例顺序传入。 返回:处理后的结果值。

算法

证券的增量β

(1)取证券区间的对数收益率序列y

(2)取指数区间的对数收益率序列x

(3)做一元线性回归回归的斜率Beta

(4)增量β= Beta * 证券占组合的比例

(5)组合Beta(剔除后) = 组合β- 增量β

组合β=所有证券的 W*β之和

(1)W = 证券占投资组合的比例

(2)β= 证券的Beta范例

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

用途:风险分析相关函数。 参数arg1arg2arg3arg4arg5arg6按示例顺序传入。 返回:处理后的结果值。

算法

证券的边际β

(1)取证券区间的对数收益率序列y

(2)取指数区间的对数收益率序列x

(3)做一元线性回归回归的斜率beta即边际β范例

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

范例

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

范例

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)计算跟踪偏离序列的标准差,此标准差跟踪误差范例

SetSysParam(pn_stock(), 'SZ000001');
return StockTE2('SH000300', 20170801T, 20180801T, 0, '');
// 返回3.88

######## pf_TrackingError2_sub

返回值0协方差和相关系数放在对应的返回值变量中

######## pf_TrackingError2

范例

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

范例

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

范例

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

用途:日期时间处理函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:日期或时间值。

范例

SetSysParam(pn_stock(), 'OF000522');
return YTMOfFund_TimeSeries2('CSI000011', 20180801T, 20180831T, 0);

返回:

####### YTMOfFund_TimeSeries

用途:日期时间处理函数。 参数arg1arg2按示例顺序传入。 返回:日期或时间值。

范例

SetSysParam(pn_stock(), 'OF000522');
return YTMOfFund_TimeSeries(20180801T, 20180831T);

返回:

####### 中间函数

######## 内容

  • YTMOfNOTCurrency_TimeSeries
  • YTMOfCurrency_TimeSeries

######## YTMOfNOTCurrency_TimeSeries

范例

SetSysParam(pn_stock(), 'OF000522');
return YTMOfFund_TimeSeries(20180801T, 20180831T);

返回:

######## YTMOfCurrency_TimeSeries

范例

SetSysParam(PN_Stock(), 'OF519588');
return YTMOfCurrency_TimeSeries(20180101T, 20180801T);

返回:

绩效归因
内容
  • Brinson_PerforAttri
  • BrinsonOfTrueTransanction
  • 多期收益分解
  • 中间函数
Brinson_PerforAttri
BrinsonOfTrueTransanction

用途:绩效归因相关函数。 参数arg1arg2arg3arg4arg5arg6arg7arg8arg9按示例顺序传入。 返回:处理后的结果值。

范例

// 基准样本及其配置
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

用途:绩效归因相关函数。 参数arg1arg2arg3按示例顺序传入。 返回:处理后的结果值。

范例

// 组合:各资产等权,每期再平衡;以债券收益为基准
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

用途:绩效归因相关函数。 参数arg1arg2arg3按示例顺序传入。 返回:处理后的结果值。

范例

// 组合:各资产等权,每期再平衡;以债券收益为基准
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

用途:绩效归因相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 取沪深300的Brinson-基准t-1日比例和t日涨幅
t := Query("沪深300", "", true, "", "代码", DefaultStockID(),
"名称", CurrentStockName(), "板块名称", base(10029));
endt := inttodate(20120601);
return BrinsonOfBPercentandReturn(t, endT);

参考StockType StockMarketValue

####### BrinsonOfPAttribution

用途:绩效归因相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 取沪深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

用途:绩效归因相关函数。 参数arg1arg2arg3arg4arg5按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:绩效归因相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

范例

// 基准组合
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

用途:绩效归因相关函数。 参数arg1arg2arg3按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:绩效归因相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 取当前沪深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按示例顺序传入。 返回:处理后的结果值。

范例

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范例

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表示样本标准差范例

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日组合中所有证券数量*收盘价的累加范例

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日组合剩余现金范例

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

范例

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

范例

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

范例

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

范例

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

用途:收益分析相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

return AddTitle(``array('a':1), 'b');

返回:

####### GetDateArr

用途:日期时间处理函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:日期或时间值。

范例

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

用途:风险、回报相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

算法R=d=1n1+rd-1*100其中rd是d时点的收益率范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

用途:风险、回报相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

用途:风险、回报相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

用途:风险、回报相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

用途:风险、回报相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

用途:风险、回报相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

用途:风险、回报相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

用途:进行数值统计计算。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

用途:进行数值统计计算。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

用途:进行数值统计计算。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

用途:风险、回报相关函数。 参数arg1arg2arg3按示例顺序传入。 返回:处理后的结果值。

算法

Sharp = ERP-Rf/σp其中ERP为收益率均值σp为收益率标准差范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

用途:风险、回报相关函数。 参数arg1arg2arg3按示例顺序传入。 返回:处理后的结果值。

算法

Sharp = ERP-Rf/σp

其中ERP为收益率均值σp为收益率下方标准差范例

// 此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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

算法

平均实际回报和平均预期回报的差额即α系数,即组合收益率序列与基准收益率序列的回归截距范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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

用途:相对回报相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

算法

即组合收益率序列与基准收益率序列的回归斜率范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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

用途:相对回报相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

算法

即组合收益率序列与基准收益率序列的相对系数的平方范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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

用途:相对回报相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

算法

TrackingError= σ(Yi-Xi),即组合收益率与基准收益率之差的标准差范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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

用途:按指定格式输出结果。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

算法即组合收益率均值与基准收益率均值之差和跟踪误差之比值

IR=Y-XσYi-Xi范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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

用途:相对回报相关函数。 参数arg1arg2arg3arg4arg5按示例顺序传入。 返回:处理后的结果值。

算法TR=(X-Rf)/β其中X为组合收益率的均值β为组合beta范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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

用途:相对回报相关函数。 参数arg1arg2arg3arg4arg5按示例顺序传入。 返回:处理后的结果值。

算法Jensen=X-Rf-β*(Y-Rf)其中X为组合收益率的均值β为组合betaY为基准收益率的均值范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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

用途:相对回报相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

算法组合累计收益率与基准累计收益率之差范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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

用途:相对回报相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:收益相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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

用途:收益相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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

用途:收益相关函数。 参数arg1arg2arg3arg4arg5按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,展示组合区间周收益率
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

用途:收益相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

范例

// 此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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');
中间函数

####### 内容

  • pfAnnualFormula

####### pfAnnualFormula

算法

单利:

V=YN×IV

复利:

V=100×(1+IV100YNN-1)

风险类:

V=YN×IV

注:

V :年化后的指标值

IV :指标值

YN 年周期数与周期相关可通过pf_getDayNnmOfYear()得到

N :周期数,指标值计算的周期数 范例

// 年化信息比率
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

用途:压力测试和情景分析相关函数。 参数arg1arg2arg3arg4arg5arg6arg7arg8arg9按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:压力测试和情景分析相关函数。 参数arg1arg2arg3arg4arg5arg6arg7arg8arg9arg10arg11arg12按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:压力测试和情景分析相关函数。 参数arg1arg2arg3arg4arg5按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:压力测试和情景分析相关函数。 参数arg1arg2arg3arg4arg5按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:压力测试和情景分析相关函数。 参数arg1arg2arg3arg4arg5arg6arg7arg8arg9arg10按示例顺序传入。 返回:处理后的结果值。

范例

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

用途:压力测试和情景分析相关函数。 参数arg1arg2arg3arg4arg5arg6arg7arg8arg9arg10按示例顺序传入。 返回:处理后的结果值。

范例

W := array(
("代码":"SZ159901", "名称":"", "市值":0.0, "行业代码":""));
return pf_StressTestingOfFund(W, 'SH000001', 20110831T, 20120831T, 10, 0, 5, -10, 0, 0);

返回:

中间函数
内容
  • RiskFreeRateofReturnDayly
  • pf_ReturnToCumulativeReturn
  • pf_CumulativeReturnToReturn
RiskFreeRateofReturnDayly

用途:中间函数相关函数。 参数arg1arg2arg3arg4按示例顺序传入。 返回:处理后的结果值。

算法

单利:非年化收益率=年化收益率/周期(日,周,月)数量×100%

复利:非年化收益率=(1+年化收益率)1/周期(日,周,月)数量×100%范例

SetSysParam(pn_stock(), 'sz000001');
SetSysParam(PN_Date(), 20180801T);
return RiskFreeRateofReturnDayly(3, cy_day(), '单利', 250);
// 返回0.01
pf_ReturnToCumulativeReturn

用途:中间函数相关函数。 参数arg1arg2arg3按示例顺序传入。 返回:处理后的结果值。

算法

复合收益率=((当天日收益率+1)*(1+昨日复合收益率)-1)*100其中初始日前一天复合收益率为0范例

t := array(('日期':20180801T, '涨幅%':1.42051971),
('日期':20180802T, '涨幅%':1.18018526),
('日期':20180803T, '涨幅%':0.9023545));
return pf_ReturnToCumulativeReturn(t, '涨幅%', 1);
// 返回:3.54
pf_CumulativeReturnToReturn

用途:中间函数相关函数。 参数arg1arg2按示例顺序传入。 返回:处理后的结果值。

算法

日收益率=((当天复合收益率+1)/(1+前天复合收益率)-1)*100其中初始日前一天复合收益率为0范例

t := array(('日期':20180801T, '涨幅%':1.42051971),
('日期':20180802T, '涨幅%':1.18018526),
('日期':20180803T, '涨幅%':0.9023545));
return pf_CumulativeReturnToReturn(t, '涨幅%');

返回: