82 KiB
组合评价
内容
- 常用函数
- 风险分析
- 绩效归因
- 收益分析
- 风险、回报
- 相对回报
- 收益
- 压力测试和情景分析
- 中间函数
常用函数
内容
- pf_MinRecoveryPeriod
- pf_WinRatio
- pf_getVaRConfidence
- pf_getDayNnmOfYear
- pf_Omega
- pf_MaxDrawDown
- pf_CalmarRatio
- pf_Rachev
- Pf_Var
pf_MinRecoveryPeriod
算法最小恢复天=恢复到最大回撤起始日净值对应的日期-最大回撤起始日范例
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
范例
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
算法
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
范例
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
算法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
算法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
算法年化收益算术平均-标准正态分布置信度为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=0;Risk 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、假设组合的初始市值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|
备注:
蒙特卡罗模拟法与历史模拟法十分类似,他们的区别在于前者利用统计方法估计历史上市场因子运动的参数然后模拟市场因子未来的变化情景,而后者则直接根据历史数据来模拟市场因子的未来变化情景范例
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;
ReturnMethod := 1; //涨幅法
return pf_GetPortfolioRate(StockArr,BegT,EndT,ReturnMethod);
返回:
######### pf_stockszf
范例
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-当前元素所在的列数。范例
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
算法波动额=(区间最高价-区间最低价)/区间最低价/区间成交金额范例
SetSysParam(PN_Stock(),'SZ000001');
return StockAmplitudePerAmount(20180801T,20180803T);
//返回:0.34
####### StockCashFlowInFuture
范例
SetSysParam(PN_Stock(),'SZ000001');
return StockCashFlowInFuture(20170801T,20180803T,5,10,1);
//返回:11.18
####### pf_GiniCoefficient
范例
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
算法
范例
SetSysParam(pn_stock(),'sz000001');
return pf_ILLIQ(20180820T);
//返回:-0.0038
####### pf_Amivest
算法
范例
SetSysParam(pn_stock(),'sz000001');
return pf_Amivest(20121231T,18);
//返回:183495108.82
####### pf_GiniCoeff
范例
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
算法
1、计算每日v:(最高价-最低价)/前收盘/成交量*100000000
2、martin= N个交易日的v的平均范例
SetSysParam(pn_stock(),'sz000001');
return pf_Martin(20180801T,18);
//返回:0.03
####### pf_CashFlowInFuture2
范例
s:=array;
s[0:1]['代码']:=array('SH600000','SH600028');
s[0:1]['数量']:=array(500,100);
return pf_CashFlowInFuture2(s,20180801T,20180830T,5,100);
//返回:5620
####### StockAmplitudePerVolumn
算法波动量=(区间最高价-区间最低价) /区间最低价/区间成交量*1000000范例
SetSysParam(pn_stock(),'sz000001');
return StockAmplitudePerVolumn(20180801T,20180831T);
//返回:0.009
####### pf_SharevsNegotiableShare
算法占流通股比例=持仓数量/流通股数量范例
s:=array;
s[0:1]['代码']:=array('SH600000','SH600028');
s[0:1]['数量']:=array(50000000,100000000);
return pf_SharevsNegotiableShare(s,20180801T);
返回:
####### pf_StockLiquidityCost2
算法
成交金额法:返回市值和冲击成本数量/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
范例
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
范例
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
范例
SetSysParam(pn_stock(),'sz000001');
return StockLiquidityCost(20180801T,20180831T,0,2.25,31);
//返回:0.009
####### pf_GroupConcentrationRatio
范例
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
算法
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
算法
组合β= 所有证券的 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
算法
(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
算法
证券的成份β贡献:
(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
算法
证券的增量β
(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
算法
证券的边际β
(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
范例
SetSysParam(pn_stock(),'OF000522');
return YTMOfFund_TimeSeries2('CSI000011',20180801T,20180831T,0);
返回:
####### YTMOfFund_TimeSeries
范例
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
范例
//基准样本及其配置
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
范例
//组合:各资产等权,每期再平衡;以债券收益为基准
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
范例
//组合:各资产等权,每期再平衡;以债券收益为基准
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
范例
//取沪深300的Brinson-基准t-1日比例和t日涨幅
t:=Query("沪深300","",True,"","代码",DefaultStockID(),
"名称",CurrentStockName(),"板块名称",base(10029));
endt:=inttodate(20120601);
return BrinsonOfBPercentandReturn(t,endT);
参考StockType StockMarketValue
####### BrinsonOfPAttribution
范例
//取沪深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
范例
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
范例
//基准组合
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
范例
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
范例
//取当前沪深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
范例
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
范例
return AddTitle(``array('a':1),'b');
返回:
####### GetDateArr
范例
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
算法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
范例
//此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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
范例
//此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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
范例
//此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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
范例
//此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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
范例
//此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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
范例
//此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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
范例
//此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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
范例
//此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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
范例
//此处以申万采掘行业指数收益率序列作为用户组合的收益率序列
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
算法
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
算法
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
算法
即组合收益率序列与基准收益率序列的回归斜率范例
//此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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
算法
即组合收益率序列与基准收益率序列的相对系数的平方范例
//此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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
算法
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
算法即组合收益率均值与基准收益率均值之差和跟踪误差之比值
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
算法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
算法Jensen=X-Rf-β*(Y-Rf),其中X为组合收益率的均值,β为组合beta,Y为基准收益率的均值范例
//此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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));
returnpf_Jensen(t,'涨幅1',t,'涨幅2',Rf);
//返回结果:0.0560
pf_ExcessReturn
算法组合累计收益率与基准累计收益率之差范例
//此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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));
returnpf_ExcessReturn(t,'涨幅1',t,'涨幅2');
//返回结果:6.13
pf_Corr
范例
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
范例
//此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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
范例
//此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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
范例
//此处以浦发银行收益率序列作为用户组合的收益率序列,展示组合区间周收益率
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
范例
//此处以浦发银行收益率序列作为用户组合的收益率序列,基准为上证指数
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
W:=array(
("代码":"SZ159901","名称":"","市值":0.0,"行业代码":""));
return pf_StressTestingOfFund(W,'SH000001',20110831T,20120831T,10,0,5,-10,0,0);
返回:
中间函数
内容
- RiskFreeRateofReturnDayly
- pf_ReturnToCumulativeReturn
- pf_CumulativeReturnToReturn
RiskFreeRateofReturnDayly
算法
单利:非年化收益率=年化收益率/周期(日,周,月)数量×100%
复利:非年化收益率=(1+年化收益率)1/周期(日,周,月)数量×100%范例
SetSysParam(pn_stock(),'sz000001');
SetSysParam(PN_Date(),20180801T);
return RiskFreeRateofReturnDayly(3,cy_day(),'单利',250);
//返回:0.01
pf_ReturnToCumulativeReturn
算法
复合收益率=((当天日收益率+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
算法
日收益率=((当天复合收益率+1)/(1+前天复合收益率)-1)*100,其中初始日前一天复合收益率为0范例
t:=array(('日期':20180801T,'涨幅%':1.42051971),
('日期':20180802T,'涨幅%':1.18018526),
('日期':20180803T,'涨幅%':0.9023545));
return pf_CumulativeReturnToReturn(t,'涨幅%') ;
返回: