R软件在马科维茨资产组合投资理论中教学应用文档格式.docx
《R软件在马科维茨资产组合投资理论中教学应用文档格式.docx》由会员分享,可在线阅读,更多相关《R软件在马科维茨资产组合投资理论中教学应用文档格式.docx(12页珍藏版)》请在冰点文库上搜索。
![R软件在马科维茨资产组合投资理论中教学应用文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/b6bdfc4a-8998-445f-be94-b53249fecdfb/b6bdfc4a-8998-445f-be94-b53249fecdfb1.gif)
因此,课堂上和教材中往往都选择高度理想化的例子辅助理论的阐述,增加了理论联系实际的难度。
此外,EXCEL毕竟不是数据科学工具,难以应付当下的大数据时代对培养学生数据处理能力的要求。
二、数据科学工具R软件
R软件是一款开源的统计计算软件,是一套完整的数据处理、计算和制图的软件系统,特点是统计分析功能和作
图功能都非常优秀。
1992年,新西兰的奥克兰大学统计系的RossIhaka和RobertGentleman在AT&
T贝尔实验室创立的S语言的基础上开发了R系统。
S语言主要在
Insightful公司的S-Plus软件中使用,R语言在免费发行的R软件中使用,R软件与S-Plus软件有很大的相似性和兼容性。
R软件和源代码可以自由下载和使用,并由R开发核心志愿者小组负责开发和维护。
经过20多年的发展,R语言已经成为世界上主流的数据分析语言,广泛应用于统计计算和数据分析的各个领域,包括金融计算和量化交易领域。
作为一种数据分析语言,R语言具有如下的优点:
第一,R系统是一个全面的统计计算平台,提供了从传统方法到学术前沿的各种数据分析方法。
几乎任何类型的数据分析工作都可以在R中完成,并且R提供了100多个与金融直接相关的包。
第二,R语言可以进行交互式的数据分析,同时具有强大图形能力,便于进行理论方法的细节研究、数据探索和展示。
同时,R语言作为一种编程语言,它的语法和数据结构与主流的计算机编程语言相似,易学易用。
第三,R软件是开源软件,可以免费的下载和使用,无需考虑商业软件的授权问题。
同时,开源软件的用户众多,新的方法和新的研究成果会迅速以R包的形式上传到R社区供大家下载和研究,这是其他商业软件无法比拟的。
总之,R软件为金融计算提供了大量的函数、数据类型和包,可以胜任金融领域各种数据分析和模型计算的任务,包括时间序列分析、衍生品定价以及量化交易系统的开发和评价。
教师在教学过程中可以直接借鉴,使计算部分更加容易和直观,提高学生的参与度和学习兴趣。
三、马可维茨资产组合选择的R应用
投资学的一个重要问题是如何在多种风险资产中选择最好的风险资产组合,哈维.马可维茨在论文《资产组合选择》中首次提出了正式的科学理论回答这个问题,该理论也称为马可维茨投资组合理论。
马科维茨使用均值刻画收益率,使用方差刻画风险,第一次将数理统计的方法引入
投资组合的选择,因此该理论也叫做均值-方差模型。
同时,它还标志着现代金融学的建立,自此金融学理论进入了模
型化和数量化的时代。
马可维茨的学生威廉.夏普随后在此基础上发展出资本资产定价模型,奠定了完整的金融经济学基础理论。
马科维茨和夏普这对师生因为在金融经济学领域出色的开创性工作,与莫顿.米勒一起获得了1990年的诺贝尔经济学奖。
如果可以在课堂上适当结合R计算案例讲解最优风险资产组合模型的计算,向同学们清晰展示计算的步骤,会有利于学生对知识的理解和吸收,锻炼学生的学习能力,培养学生的综合能力,开拓学生的创新能力,提高课堂的
综合教学效果。
本文以马可维茨资产组合计算为例,展示
R语言的计算。
(一)从互联网获取实时金融数据
R软件可以直接通过互联网下载实时的金融和经济数据。
包quantmod可以下载国内股票的数据。
在此之前,我们先加载包fPortfolio和包lpSolve,前者可以进行有效投资
组合的计算,后者可以进行函数优化的计算。
我们在上证
A股中选择四支股票,浦发银行(600000),山东黄金
(600547),伊利股份(600887)、康美药业(600518),并使用包quantmod的getSymbols函数,从雅虎金融下载这四只股票实时的价格时间序列,同时计算月收益率。
注意,下载上交所的股票数据时,股票代码的后面需要加上ss后缀。
实现的代码如下。
library(fPortfolio) library(lpSolve)library(quantmod)
stocksymbol<
-c('
600000'
,'
600547'
600887'
600518'
)
stocksymbols<
-paste(stocksymbol,'
.ss'
,sep='
'
stock<
-list()stock.n<
-list()
for(iinstocksymbols){
stock[[i]]<
-getSymbols(i,src="
yahoo"
,from="
2010-01-01"
,to=Sys.Date(),auto.assign=FALSE)
stock.n[[i]]<
-periodReturn(stock[[i]],period='
monthly'
}
names(stock.n)<
-stocksymbol
得到收益率序列后,我?
?
接着进行初步的数据处理。
为了便于随后R的计算需要,我们把数据结果的形式转化为数据框,并去掉其中可能的缺失值,代码如下。
n1<
-length(stock.n)
stock.d<
-stock.n[[1]]for(iin2:
n1)
{stock.d<
-na.locf(merge(stock.d,stock.n[[i]],all=F)}
colnames(stock.d)<
-names(stock.n)
(二)资产组合有效前沿的计算
数据处理完毕之后,接下来我们使用fPortfolio包来进行最优组合的计算。
根据马尔维茨投资组合理论,优化组合的计算需要使用风险资产的均值和协方差。
我们先使用fPortfolio包将数据形式转化为timeSeries对象,再使用内置函数covEstimator计算月收益率数据的均值和协
方差矩阵。
R语言通过程序控制数据对象,避免了直接控制数据出错的可能,而相同的计算在EXCEL中需要用单元格计算来进行,鼠标操作容易出错,股票数量越大,出错的可能性也越大。
stock.s<
-as.timeSeries(stock.d)covEstimator(stock.s)
得到的结果简化如下表1、表2所示:
接下来,我们计算均值-方差组合的有效前沿。
有效前沿是风险资产的组合中风险最小的组合连成的线。
包
fPortfolio对上面得到的stock.s对象进行计算,以离散方式(计算前沿上的50个组合)。
使用包fPortfolio需要指定以下几个参数,组合的类型(portfolioSpec)、求解方法的类型(setSolver)以及组合投资的约束
(constraints="
LongOnly"
)。
通过summary函数可以看到概况和相关图示。
shortSpec<
-portfolioSpec()setSolver(shortSpec)<
-"
solveRshortExact"
shortFrontier<
-
portfolioFrontier(stock.s,spec=shortSpec,constra
ints="
)summary(shortFrontier)
使用frontierPlot函数可以画出有效边界,边界上最
左端的点表示方差最小的组合,也是所有风险资产的组合中方差最小的组合,使用minvariancePoints函数可以在有效边界上标示出方差最小的组合点。
程序如下。
Frontier<
-shortFrontier
frontierPlot(Frontier,frontier="
both"
,risk="
Sigma"
,type="
l"
,
title=F,labels=F)
title('
有效边界'
,xlab='
标准差'
,ylab='
预期收益率'
minvariancePoints(Frontier,pch=19,col="
red"
)找到了方差最小的投资组合,我们可以看一看其中各
个证券的权重,并将权重用条形图绘出。
MVP<
-minvariancePortfolio(stock.s)MVP.portfolio<
-slot(slot(MVP,'
portfolio'
),
MVP.weights<
-MVP.portfolio$weightsMVP.weights
barplot(MVP.weights[which(MVP.weights!
=0)],
main="
最小方差投资组合"
xlab="
资产"
,ylab="
权重"
col=topo.colors(4),beside=TRUE)
legend("
topright"
,names(MVP.weights[which(MVP.weights!
=0)]),
cex=1,col=topo.colors(4),pch=19)其中,各个证券的权重如下表3所示:
在有效边界上,我们也可以计算任意投资组合的组成权重。
比如,设定预期收益为0.001,我们来计算相应的组合。
mu<
-0.001
Spec<
-portfolioSpec()setSolver(Spec)<
setTargetReturn(Spec)
efficientPortfolio(stock.s,Spec)
得到该组合的情况,简化如下表4、表5:
(三)最优风险组合的计算
找出了有效边界,再考虑无风险资产,找出从无风险资产出发,与风险资产的有效边界相切的切线,就是资本市场线,相应的切点表示最优的风险组合。
根据基金分离定理,每个投资者都会选择这种最优的风险组合与无风险资产的组合,只是根据每个人自身的风险厌恶程度的不同,在最优风险组合和无风险资产之间的配置比例不同。
假设无风险资产的收益率为0.002,利用
tangencyPortfolio函数,我们能得到切点组合,记为M,代码如下。
RiskF=portfolioSpec()setRiskFreeRate(RiskF)=0.002setSolver(RiskF)<
M=tangencyPortfolio(stock.s,spec=RiskF,constraints="
Short"
summary(M)
M.portfolio<
-slot(slot(M,'
),'
M.return<
-M.portfolio$targetReturn[2]M.sigma<
-M.portfolio$targetRisk[2]
切点组合M的权重情况可以通过饼图展示,如图所示。
画出资本市场线的图形,如图所示。
Frontier=portfolioFrontier(stock.s,spec=RiskF,constraints="
frontierPlot(Frontier,risk="
Sigma"
,lwd=2,type='
l'
,xlim=c(0.05,0.12),title=F,labels=F)
tangencyLines(Frontier,risk="
,col="
blue"
,lwd=1)
##plotMarketPortfoliocmlPoints(Frontier,pch=19,col="
purple"
text(x=M.sigma+0.001,y=M.return+0.001,'
M'
,cex=1
投资组合和资本市场线'
标准差
)四、结论
确定有效的投资组合是一个复杂的决策过程,数学推导过程比较抽象和枯燥。
在投资学教学过程中应用R语言进行投资组合的计算,既能使学生感受投资学的基本原理,又能让学生从直观上感受到投资学的意义,发挥出计算机辅助的高效作用。
这样的课堂教学设计,不仅符合学生的认知规律,而且学生的接受速度快,对理论的理解也更加深刻,学生在学习过程中既得到了知识,又培养了创新能
力。
在实际的教学中,可以进一步结合知识点设计新的计算实验,有效结合理论教学与实验教学,达到不断提高学生实践能力的目的。
参考文献
[1]盖尔盖伊.量化金融R语言初级教程[M].人民邮电出版社,2016.
[2]盖尔盖伊.量化金融R语言高级教程[M].人民邮电出版社,2016.
[3]DWü
rtz.PortfolioOptimizationwithR/Rmetrics,RmetricseBook[M].RmetricsAssociationandFinanceOnline,Zurich.2009.
作者?
介:
高蓉(1982-),陕西安康人,博士,任职于杭州电子科技大学经济学院金融系讲师,毕业于南开大学经济学院金融系,研究方向:
资产定价、金融工程、数据科学应用。