【摘要】隨著經濟的發展和科技的突破,當下已進入大數據時代,數據科學對金融的影響越來越大。然而R軟件在金融學教學中發揮的作用還很有限,本文結合數據科學工具R軟件,探討如何在《投資學》課堂上引入軟件教學,以此推廣R軟件在投資學課堂上的教學應用,進一步提高學生理論聯系實際的實踐能力。
【關鍵詞】R語言 馬科維茨投資組合 最優風險組合 資本市場線
一、《投資學》課程
《投資學》是金融學的專業基礎課,具有很強的專業性和實踐性。教學目標是指導學生掌握基本的投資學原理和分析方法,并在實際問題中運用這些知識。教學形式力求靈活多樣,充分利用統計分析軟件等多媒體工具來增強學生的興趣和積極性。教學要求有三方面:一是掌握投資學的基本概念和基本理論,理解相關的背景和適用的條件;二是掌握基本的計算方法和理論之間的推理;三是掌握投資學理論的運用技能。投資學的教學既要重視基礎知識的教育,又要強調實際應用能力的培養。
近年來,隨著計算機的發展和大數據的發展,金融領域正在快步進入高科技時代,對人才的動手實踐能力較以往有了更高的要求。僅僅掌握基本理論而不能解決實際問題,已經不再符合社會對金融學類學生的要求。傳統的《投資學》本科課堂以基本理論為主要內容,以單向的教師講解為主要模式,以黑板和PPT為主要方式,與學生繼續深造或從事實際工作所需要的能力有一定脫節。
以《投資學》中的組合理論教學為例,傳統方式主要存在兩個缺點。第一,投資組合涉及到的數學知識較多較深,理論的推導和習題的計算難度都比較多,增加了教學難度,較多的學生反映課程太難太抽象,不易理解更不易應用。第二,EXCEL軟件本身的計算能力也比較有限。EXCEL是一款功能強大的辦公軟件,但計算性能相對較差,進行復雜計算時速度較慢甚至計算機容易陷入死機,平臺之間的移植性也不好,不同版本的EXCEL文件之間功能偶爾不兼容,VBA計算程序在更換計算機后常常因為兼容不好而無法運行。因此,課堂上和教材中往往都選擇高度理想化的例子輔助理論的闡述,增加了理論聯系實際的難度。此外,EXCEL畢竟不是數據科學工具,難以應付當下的大數據時代對培養學生數據處理能力的要求。
二、數據科學工具R軟件
R軟件是一款開源的統計計算軟件,是一套完整的數據處理、計算和制圖的軟件系統,特點是統計分析功能和作圖功能都非常優秀。1992年,新西蘭的奧克蘭大學統計系的Ross Ihaka和Robert Gentleman在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)endprint
library(lpSolve)
library(quantmod)
stocksymbol<-c('600000','600547','600887','600518')
stocksymbols<-paste(stocksymbol,'.ss',sep='')
stock<-list()
stock.n<-list()
for(i in stocksymbols){
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(i in 2: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,constraints="LongOnly")
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'),'portfolio')
MVP.weights<-MVP.portfolio$weights
MVP.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)<-"solveRshortExact"
setTargetReturn(Spec)<-muendprint
efficientPortfolio(stock.s,Spec)
得到該組合的情況,簡化如下表4、表5:
(三)最優風險組合的計算
找出了有效邊界,再考慮無風險資產,找出從無風險資產出發,與風險資產的有效邊界相切的切線,就是資本市場線,相應的切點表示最優的風險組合。根據基金分離定理,每個投資者都會選擇這種最優的風險組合與無風險資產的組合,只是根據每個人自身的風險厭惡程度的不同,在最優風險組合和無風險資產之間的配置比例不同。
假設無風險資產的收益率為0.002,利用tangencyPortfolio函數,我們能得到切點組合,記為M,代碼如下。
RiskF=portfolioSpec()
setRiskFreeRate(RiskF)=0.002
setSolver(RiskF)<-"solveRshortExact"
M=tangencyPortfolio(stock.s,spec=RiskF,constraints="Short")
summary(M)
M.portfolio<-slot(slot(M,'portfolio'),'portfolio')
M.return<-M.portfolio$targetReturn[2]
M.sigma<-M.portfolio$targetRisk[2]
切點組合M的權重情況可以通過餅圖展示,如圖所示。
畫出資本市場線的圖形,如圖所示。
Frontier=portfolioFrontier(stock.s,spec=RiskF,constraints= "Short")
frontierPlot(Frontier,risk="Sigma",lwd=2,type='l',xlim= c(0.05,0.12),
title=F,labels=F)
tangencyLines(Frontier,risk="Sigma",col="blue",lwd=1)
##plot Market Portfolio
cmlPoints(Frontier,pch=19,col="purple")
text(x=M.sigma+0.001,y=M.return+0.001,'M',cex=1)
title('投資組合和資本市場線',xlab='標準差',ylab='預期收益率')
minvariancePoints(Frontier,pch=19,col="red")
四、結論
確定有效的投資組合是一個復雜的決策過程,數學推導過程比較抽象和枯燥。在投資學教學過程中應用R語言進行投資組合的計算,既能使學生感受投資學的基本原理,又能讓學生從直觀上感受到投資學的意義,發揮出計算機輔助的高效作用。這樣的課堂教學設計,不僅符合學生的認知規律,而且學生的接受速度快,對理論的理解也更加深刻,學生在學習過程中既得到了知識,又培養了創新能力。在實際的教學中,可以進一步結合知識點設計新的計算實驗,有效結合理論教學與實驗教學,達到不斷提高學生實踐能力的目的。
參考文獻
[1]蓋爾蓋伊.量化金融R語言初級教程[M].人民郵電出版社,2016.
[2]蓋爾蓋伊.量化金融R語言高級教程[M].人民郵電出版社,2016.
[3]D Würtz.Portfolio Optimization with R/Rmetrics, Rmetrics eBook[M]. Rmetrics Association and Finance Online,Zurich.2009.
作者簡介:高蓉(1982-),陜西安康人,博士,任職于杭州電子科技大學經濟學院金融系講師,畢業于南開大學經濟學院金融系,研究方向:資產定價、金融工程、數據科學應用。endprint