-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathchap12-finance.Rmd
182 lines (142 loc) · 11.6 KB
/
chap12-finance.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
---
output:
html_document: default
pdf_document: default
---
```{r setup, include=FALSE}
options(
htmltools.dir.version = FALSE, formatR.indent = 2, width = 55, digits = 4
)
##### 加载R包 ####
library(quantmod)
library(xts)
library(data.table)
library(PerformanceAnalytics)
```
# 金融数据分析
## 分析简介
投资组合是由投资人或金融机构所持有的股票、债券、衍生金融产品等组成的集合。构造投资组合是金融投资分析中历久弥新的问题。构建投资组合的流程如图所示。一般来说,投资者在构建投资组合前首先要界定组合范围,即明确将要投资的股票、债券、衍生金融产品等,再根据界定的范围获取对应的交易数据(价格序列数据)。因此在构建投资组合时,一般考虑对股票的收益率序列进行分析,根据获取的资产交易数据计算得到日对数收益率序列数据。在得到收益率序列数据后,可采用图示法进行序列特征的可视化,进行特征的初步探索与描述。与此同时,投资者可根据自己的投资偏好明确投资组合的总体策略,将寻找投资组合的过程转化为带有约束条件的优化问题(即在相应的约束条件下最优化目标函数),以此得到最优的组合权重。根据求解得到的最优权重以及各资产的收益率序列计算投资组合的收益及风险等指标,进行投资组合的评估。最后,依据结果对投资组合模型进行修正及实际应用。
{ width="60%" }
本节以道琼斯指数作为基准(Benchmark),对组成它的30只股票做一个基于特定投资风格的SAA(Strategic Asset Allocation)。道琼斯指数的计算公式为:入选股票的价格之和/入选股票的数量,也就是按照每支入选股票的价格为权重进行加权计算。本案例考虑按照组合波动(方差)最小的准则(Global Minimum Variance Portfolio, GMVP)构建最优投资组合,将构造的投资组合与道琼斯指数基准股进行比较,并以此说明在量化投资中如何利用股票交易数据进行最优投资分析。
## (1) 界定组合范围
本案例所采用的数据是道琼斯指数的30只成分股自2009年1月1日至2020年1月1日的日收益率数据。30只成分股的名称、所属行业及股票代码如下表所示:
### 道琼斯指数30只成分股
| 公司名称 | 所属行业 | 股票代码 |
| ------ | ------ | ------ |
| 耐克 | 服装 | NKE |
|卡夫公司 | 食品 |KFT |
|美国运通公司| 金融服务 |AXP|
|波音公司 | 航空航天 | BA |
|花旗集团 | 金融服务 | C |
|卡特彼勒公司 | 重型机械 | CAT |
|杜邦公司 | 化工| DD |
|迪士尼 | 娱乐业 | DIS |
|Walgreens Boots Alliance |药品连锁零售| WBA |
|思科 | 电子| CSCO|
|家得宝公司|零售、家居改善|HD|
|雪佛龙 | 石油| CVX |
|维信公司| 信用卡|V|
|国际商用机器公司|硬件、软件和服务|IBM|
|英特尔|微处理器|INTC |
|强生制药有限公司|制药|JNJ|
|摩根大通公司|金融服务|JPM|
|可口可乐公司|饮料|KO|
|麦当劳|快餐、特许经营|MCD|
|3M公司|原料、电子|MMM|
|高盛|银行|GS|
|默克制药公司|制药|MRK|
|微软|软件|MSFT|
|辉瑞制药有限公司|制药|PFE|
|宝洁公司|家庭用品、制药|PG|
|苹果公司|消费电子产品|AAPL|
|联合科技公司|航空、防御|UTX|
|Verizon|电讯|VZ|
|沃尔玛|零售业|WMT|
|埃克森美孚公司|石油|XOM|
## (2) 获取数据
我们可以通过R语言中的quantmod包直接访问雅虎和谷歌财经中的股票数据。
```{r,message = FALSE}
symbols <- c("MMM", 'AXP', "AAPL", "BA", "CAT","CVX", "CSCO", "KO", "DIS", "DD",
"XOM", "GE", "GS", "HD", "IBM","INTC", "JNJ", "JPM","MCD","MRK",
"MSFT", "NKE", "PFE", "PG","TRV", "UTX", "UNH", "VZ", "V", "WMT")
getSymbols(symbols, from = "2009-01-01", to = "2020-01-01")
```
将时间编码成英文格式:
```{r,message = FALSE}
Sys.setlocale("LC_TIME", "English")
```
以苹果公司股票数据为例,直接获得的数据如下表:
### 由R直接获得的苹果公司股票数据
|日期|开盘价|最高价|最低价|收盘价|交易量|调整价|
| ------ | ------ | ------ |------ |------ |------ |------ |
|2019-01-02| 12.27|13.01|12.17|12.96|186503800|11.25|
|2019-01-05| 13.31|13.74|13.24|13.51|295402100|11.73|
|2019-01-06| 13.71|13.88|13.20|13.29|322327600|11.54|
|2019-01-07| 13.12|13.21|12.90|13.00|188262200|11.29|
|2019-01-08| 12.92|13.31|12.86|13.24|168375200|11.50|
## (3) 序列特征可视化与描述
首先从直观上简要分析股票收益率的时间序列数据。在分析金融数据时,图示法是一个有用的工具。下图给出了从2009年1月1日至2020年1月1日苹果公司股票的日对数收益率的时序图。
```{r,message = FALSE}
AAPL.rtn=diff(log(AAPL$AAPL.Adjusted)) #compute log returns
chartSeries(AAPL.rtn,theme = chartTheme("white"),up.col = "black")
```
日对数收益率可简化为股票价格对数的变化,序列的变化可以通过对数价格的差得到,即,$r_t=ln(p_t)-ln(p_{t-1})$,这里$p_t$表示$t$时刻的股票价格,使用调整后的价格来计算股票的对数收益率。从图中可以看到:
1). 序列中存在一些较大的异常值;
2). 收益率序列在某些时期波动很大,而在其他时期是较为稳定的。
前者称为资产收益率存在着厚尾现象,后者称为收益率的波动聚集(volatility clustering)现象。
下图显示了从2009年1月1日至2020年1月1日迪士尼公司股票日对数收益率的时序图,迪士尼公司股票的日对数收益率显示出与苹果公司股票日对数收益率相类似的特征。
```{r,message = FALSE}
DIS.rtn=diff(log(DIS$DIS.Adjusted)) #compute log returns
chartSeries(DIS.rtn,theme = chartTheme("white"),up.col = "black")
```
## (4) 明确投资组合总体策略
投资组合的构建可依赖于不同的准则,投资者可以根据自己的需求或者风险偏好寻找最优的投资组合。作为示例,本节站在风险厌恶型投资者的角度,以最小化全局投资组合的波动(GMVP)为目标构建新的投资组合。
全局最小方差投资组合(GMVP)是构建资产组合方式的一种,它为我们提供尽可能低的收益方差或投资组合波动性。这里的波动性被用作风险的替代品,因此波动性越小,资产的风险就越小。按照GMVP构建的投资组合只关注风险,忽略预期收益。它的目标函数是
\begin{align*}
\min _{\omega} \omega^{T} \Sigma \omega \\ \text { subject to } 1^{T} \omega &=1 \\ \omega&>0
\end{align*}
通过求解最优权重$\omega$得到投资组合。
## (5) 构建投资组合
2020年道琼斯指数的成分股与2009年道琼斯指数的成分股相比,有8只股票发生了变化。鉴于本案例的研究重点是多只股票的投资组合,为了简单起见本案例不妨忽略成分股的变化。换言之,在投资组合构建的过程中,假设在我们所选取数据的起止日期内(即2009年1月1日至2020年1月1日),道琼斯指数的成分股为2020年存在于道琼斯指数中的30只股票。
由前所述,道琼斯指数是由30只股票按照各自的价格进行加权平均计算得到的。该计算方式的优点在于简单易行,但同时也存在着一些不容忽视的问题。首先,按照各只成分股的价格进行加权平均会使得高价股比低价股在平均指数中更有影响力,如低价股1美元的增长可以被高价股小于1美元的下跌所抵消。此外,从风险厌恶者投资者的角度来讲,这种投资组合不是最优的。即这种投资组合无法帮助投资者达到规避风险的目的。因此,本案例以组成道琼斯指数的30只股票为底物\footnote{即以这30只股票作为投资组合的候选股票。},依据GMVP准则重新构建投资组合。在组合风险最低的前提下,将该投资组合的累计收益率与道琼斯指数同期的累计收益率做比较,以此阐述量化投资的优势。
投资组合的构建方式如下\footnote{在本案例中,为了简单起见将投资组合的回测期设置为1年。在实际应用中,投资者也可以根据所获得的时间序列的长度合理地选择回测期,如1个月、6个月等等。}:由前一年的股票日对数收益率数据按照GMVP准则计算出投资组合的最佳权重,将该权重应用到后一年的投资组合中。比如,基于2009年30只股票日对数收益率的数据可以由GMVP准则计算出投资组合的最优权重,接下来,2010年全年该投资组合将保持这个权重,计算得到投资组合的收益;到了2011年,再用2010年的股票日收益率序列数据计算出新的权重并保持一年,以此类推。最优投资组合构建代码如下:
```{r,message = FALSE}
prices <- list()
for(i in 1:length(symbols)) {
prices[[i]] <- Ad(get(symbols[i])) # obtain the adjusted price
}
prices <- do.call(cbind, prices)
colnames(prices) <- gsub("\\.[A-z]*", "", colnames(prices))
ret <- na.omit(diff(log(prices)))
ret <- as.xts.data.table(cbind(time(ret), data.table(ret)))
d <- time(ret)
pvar <- function (weights){
weights <- weights/sum(weights)
rbind(weights)%*%cov(sub_ret)%*%cbind(weights)
}
optimal_weights<-NULL
for (i in 2009:2019){
start <- paste(i, "-01-01", sep = "")
end <- paste(i, "-12-31", sep = "")
sub_ret <- window(ret, start = start, end = end)
sub_weight <- optim(c(1,rep(0, 29)), pvar, hessian = T, lower = rep(0, 30), method="L-BFGS-B")$par
optimal_weights <- rbind(optimal_weights, sub_weight)
}
optimal_weights <- optimal_weights[1:11, ]
rownames(optimal_weights) <- 2009:2019
```
## (6) 投资组合评估
为了展示该投资组合的表现,考虑将按照GMVP准则得到的最优投资组合与道琼斯指数(基准)进行比较。计算该投资组合的日对数收益率,获取道琼斯指数的同期日对数收益率,绘制两种投资组合日对数的累计收益率(Cumulative Returns)如下图所示:
```{r,message = FALSE}
cum_ret <- c()
for (i in 1:nrow(optimal_weights)){
cum_ret <- rbind(cum_ret, t(t(apply(ret[year(d) == as.numeric(rownames(optimal_weights)[i]), ] * optimal_weights[i, ], 1, sum))))
}
getSymbols("^DJI",from = "2009-01-01", to = "2020-01-01")
portfolio <- na.omit(cbind(cum_ret, diff(log(Ad(DJI)))))
colnames(portfolio) <- c("Minimum Variance", "Dow Jones (Benchmark)")
chart.CumReturns(portfolio, legend.loc = 'topleft', main="Cumulative Returns",lty=c(1,2))
```
上图中红色虚线代表了道琼斯指数的累计收益率曲线,黑色实线代表依据最小化波动率准则构造的投资组合的累计收益率曲线。从图中可以看出,按照GMVP准则构造的投资组合在累计收益率上明显优于道琼斯指数。这也说明了投资于资本市场或在构建投资组合时考虑股票市场价格风险十分必要。
## (7) 总结
在上述案例分析中,研究者站在风险厌恶型投资者的角度构建了最优的投资组合,即以全局最小方差(最小化组合的波动率)为出发点计算各只股票在投资组合中的权重。按照马克维茨的资产组合理论,投资者可以按照自身的风险偏好构建投资组合,可以将根据不同投资偏好构建的投资组合进行对比。此外,投资组合理论有许多新的发展,比如基于VaR的投资组合理论、基于连续时间的长期投资组合理论以及基于非效用最大化的投资组合理论等等。上述案例仅提供了简单的示例,感兴趣的读者可以做进一步的探索。