R語言金融分析與建模
內容描述
R既是統計、挖掘、計算、分析、制圖等方面的工具,也是一個強大的開發與應用平臺。幾乎任何與數據相關的難題,大多可以借助R語言來解決。而金融領域正是與數據密切相關的行業,可以通過R實現量化金融分析與建模。
本書系統地介紹了R的包與編程方法,並通過豐富的金融案例展示了R在金融分析和金融建模方面的應用。本書分為5篇,共30章,從R語言基礎、金融模型及基礎知識、數據及相關操作、R在金融建模中的應用和R技能幾個主題出發,講解了R在金融量化中的應用和技巧。
本書適合從事金融數據分析、金融量化建模的讀者學習。通過閱讀本書,讀者將瞭解全球化的金融市場數據,學習多樣的金融建模思想和解決方案。
目錄大綱
目錄
第 1篇 R語言基礎
第 1章 R簡介 2
1.1 下載和安裝R 2
1.2 啟動和退出R 2
1.3 R的基本概念和功能 3
1.4 ls()函數和rm()函數 4
1.5 換行符號(+)及R提示符 5
1.6 尋求幫助 5
1.7 使用R作為一個普通計算器 6
1.8 找回以前的命令 7
1.9 比較ls()函數和dir()函數 7
1.10 R的精度 8
1.11 列出當前工作目錄下的文件 8
1.12 改變當前的工作目錄 8
1.13 改變啟動R時的工作目錄 9
1.14 R在金融建模中的優勢與障礙 9
1.15 練習題 10
第 2章 日期變量 12
2.1 as.Date()函數 12
2.2 將整數轉換成日期變量 13
2.3 將日期變量定義為整數 13
2.4 將日期變量定義為字符串 14
2.5 從日期變量中提取年、 月、日 14
2.6 將字符串轉換為整數或實數 15
2.7 合併字符串變量 15
2.8 將字符串轉換成整數型日期 變量 16
2.9 選擇日期作為日期變量 16
2.10 選擇每個月的後天 16
2.11 和日期有關的數據集 17
2.12 選擇特定的工作日 18
2.13 cbind()函數和data.frame() 函數 18
2.14 seq()函數 19
2.15 顯示當前日期 20
2.16 timeDate包 20
2.17 練習題 21
第3章 R的基本語法 23
3.1 for循環 23
3.2 利用取餘函數改變輸出格式 25
3.3 雙循環 25
3.4 while循環 27
3.5 取消正在執行的程序 27
3.6 停止程序運行 28
3.7 向量和矩陣 29
3.8 條件語句 30
3.9 if()語句 30
3.10 if-else語句 31
3.11 if-else-if-else語句 31
3.12 邏輯或 32
3.13 邏輯與 32
3.14 各種條件語句的組合 32
3.15 練習題 32
第4章 用R作圖 34
4.1 繪製單一的圖 35
4.2 在橫坐標及縱坐標上添加註釋 36
4.3 直方圖 37
4.4 餅圖 38
4.5 將某區域塗上陰影 39
4.6 把幾個圖並置 40
4.7 在圖上添加希臘字母 40
4.8 將圖保存為PDF文件 41
4.9 輸出高分辨率的圖像 41
4.10 重疊圖 42
4.11 資本資產定價模型和有效前沿的圖示 43
4.12 輸出高分辨率的圖像 44
4.13 添加陰影區域 44
4.14 animation包 45
4.15 練習題 47
第5章 R包 49
5.1 從雅虎財經下載年報表 49
5.2 已加載和已安裝的包 51
5.3 列出已安裝的軟件包 51
5.4 安裝R軟件包的第 2種方法 52
5.5 安裝R軟件包的第3種方法 53
5.6 R包安裝失敗 54
5.7 .libPaths()函數 54
5.8 加載R軟件包的3種方法 54
5.9 查找所有的R包 55
5.10 查找R包的手冊 56
5.11 R包的相關函數 56
5.12 常用的R包指令 57
5.13 練習題 58
第 2篇 金融模型及基礎知識
第6章 金融模型及基礎知識 60
6.1 無限數求和公式 60
6.2 貨幣的時間價值 61
6.3 基本財務公式 61
6.4 有效利率的相互轉換 64
6.5 淨現值法則 65
6.6 內部收益率法則 66
6.7 內部收益率 66
6.8 投資回收期法則 67
6.9 增量現金流量法 68
6.10 與Excel有關的函數 68
6.11 練習題 69
第7章 編寫簡單的程序 71
7.1 簡單的R程序 71
7.2 編寫單行的R程序 71
7.3 函數參數的輸入 72
7.3.1 按順序輸入參數 72
7.3.2 按關鍵詞輸入參數 73
7.3.3 混合型輸入參數 73
7.4 編寫多行的R程序 74
7.5 良好的代碼縮進 75
7.6 R自帶的程序編輯器 76
7.7 其他程序編輯器 76
7.8 程序名的後綴 77
7.9 運行R程序 77
7.9.1 用R自帶的編譯器 77
7.9.2 複製和粘貼 77
7.9.3 使用source()函數 78
7.10 變量名和巧用Tab鍵 79
7.10.1 有意義的變量名 79
7.10.2 巧妙地使用Tab鍵 80
7.11 輸入參數的默認值 80
7.12 一個程序包含許多小函數 81
7.13 編寫一個金融計算器 81
7.14 出錯處理 82
7.15 練習題 82
第8章 財務報表分析 85
8.1 財務報表簡介 85
8.2 獲取財務報表 85
8.3 一個簡單的例子 86
8.4 利潤報表簡介 86
8.5 資產負債表簡介 87
8.6 現金流量報表簡介 87
8.7 成比例的財務報表簡介 88
8.8 一些常用的財務比率 88
8.9 下載財務報表 91
8.10 下載資產負債報表 92
8.11 下載現金流量報表 94
8.12 構建成比例的財務報表 94
8.13 下載和保存財務報表以供Excel使用 95
8.14 3個有用的R數據集(is50、bs50 和cf50) 95
8.15 quantmod軟件包 96
8.16 練習題 96
第9章 資本資產定價模型 98
9.1 資本資產定價模型簡介 99
9.2 資本資產定價模型的公式 99
9.3 下載股票數據、無風險利率及市場指數 100
9.4 幾個R數據集(retDIBM、 prcDIBM等) 102
9.5 百分比收益率與對數收益率 103
9.6 計算市場風險( ) 104
9.7 波動率之間的換算 106
9.8 如何計算滾動市場風險 107
9.9 估計股票的市場風險( ) 109
9.10 預測市場風險 109
9.11 用Scholes和William的方法調整 109
9.12 用Dimson的方法調整 111
9.13 股票組合的市場風險( ) 112
9.14 練習題 112
第 10章 多因子線性模型和夏普比率等 114
10.1 Fama-French三因子模型 114
10.2 小減大因子 115
10.3 高減低因子 115
10.4 為Fama-French模型生成R數據集 115
10.5 運行Fama-French模型的R代碼 117
10.6 動勢交易策略 117
10.7 計算夏普比率 118
10.8 計算特雷諾比率 119
10.9 基於52週股票**高點的交易策略 119
10.10 Jensen的阿爾法值( ) 121
10.11 索提諾比率 122
10.12 練習題 123
第3篇 數據及相關操作
第 11章 開源數據 126
11.1 開源數據簡介 127
11.2 雅虎財經 128
11.3 美聯儲數據庫 129
11.4 French教授的數據庫 129
11.5 美國證券交易委員會公司財務報表數據庫 129
11.6 用雅虎財經下載的CSV文件估計收益率 130
11.7 生成日期變量 130
11.8 計算收益率 131
11.9 添加股票代碼變量 132
11.10 把數據集保存到文本文件 133
11.11 生成R數據集 133
11.12 從雅虎財經下載市場指數數據 134
11.13 從雅虎財經下載股票數據 135
11.14 對程序進行微調 135
11.15 月頻率數據和日頻率數據 136
11.16 通過日收益率計算其他收益率 136
11.17 不同R包中的函數 139
11.18 Quandl數據傳輸平台 143
11.19 練習題 144
第 12章 數據輸入與日期變量 146
12.1 read.table()函數 146
12.2 colnames()函數 147
12.3 read.csv()函數 147
12.4 read.table("clipboard")函數 147
12.5 從被固定分隔符分隔的文件輸入數據 149
12.6 read.fwf()函數 149
12.7 load()函數 150
12.8 R數據集的後綴 150
12.9 從互聯網下載數據 151
12.10 從作者網站下載數據 151
12.11 只輸入幾行數據 152
12.12 從外部輸入數據 152
12.13 輸入不規則格式的文件 153
12.14 as.Date()函數 154
12.15 將整數轉換成日期變量 154
12.16 將整數變成真正意義上的日期變量 155
12.17 從日期變量中提取年、月、日 156
12.18 將字符變量轉換為整數或實數 157
12.19 合併字符串變量 157
12.20 將字符串轉換成整數型日期變量 157
12.21 選擇具體日期作為日期變量 158
12.22 選擇每個月的後天 159
12.23 選擇特定的交易日 159
12.24 cbind()函數和data.frame() 函數 160
12.25 seq(as.Date)函數 161
12.26 timeDate包 161
12.27 練習題 161
第 13章 子集和數據集的合併 163
13.1 簡介 163
13.2 標量、矢量和矩陣 165
13.3 從向量獲取子集 166
13.4 獲取特定年份的數據 167
13.5 head()函數 168
13.6 cbind()函數 169
13.7 刪除循環規則 170
13.8 添加行 171
13.9 data.frame()函數 171
13.10 用公共變量合併兩個 數據集 172
13.11 練習題 174
第 14章 矩陣及操作 175
14.1 矩陣的定義 175
14.2 用cbind()將向量組合成矩陣 176
14.3 循環規則 176
14.4 矩陣的單一數據類型 177
14.5 將矢量轉換為矩陣 177
14.6 矩陣的雙重循環 179
14.7 a
s.matrix()函數和is.matrix() 函數 180
14.8 矩陣的子集 180
14.9 將列名稱添加到矩陣上 181
14.10 使用列名稱 181
14.11 求解線性公式 182
14.12 矩陣的逆矩陣 183
14.13 測試不同類型的數據格式 184
14.14 練習題 184
第 15章 數據框與數據列 186
15.1 簡介 186
15.2 data.frame()函數的功能 187
15.3 循環規則 187
15.4 如何添加列名稱 188
15.5 attach()函數 188
15.6 data.frame()的數據類型是列表(list) 189
15.7 從輸入文件中讀取數據 189
15.8 將data.frame轉換成數據矩陣 190
15.9 生成列表(list) 191
15.10 length()函數 192
15.11 調用數據列中的元素 192
15.12 x[1]和x[[1]]的區別 192
15.13 將更多數據添加到現有的數據列中 193
15.14 區分長變量名 193
15.15 添加更多的數據項 194
15.16 class()函數 194
15.17 串聯列表 194
15.18 練習題 194
第 16章 數據或結果的輸出 197
16.1 輸出到文本文件 197
16.2 write.table()函數 198
16.3 輸出到CSV文件 198
16.4 write()函數 199
16.5 save()函數和load()函數 200
16.6 把數據添加到文本文件 201
16.7 cat()函數 201
16.8 寫入二進製文件 201
16.9 如何保存PDF文件 203
16.10 把數據寫到剪貼板 204
16.11 行名稱和列名稱 204
16.12 sink()函數 205
16.13 臨時文件 205
16.14 save.image()函數 206
16.15 .RData數據集 206
16.16 練習題 207
第 17章 R和Excel的交互 209
17.1 安裝與Excel相關的R包 209
17.2 與Excel相關的R包手冊 210
17.3 通過剪貼板將數據寫到 Excel 211
17.4 通過剪貼板將Excel數據讀入R 211
17.5 read.table()函數和read.csv() 函數 212
17.6 read.xlsx()函數 212
17.7 read_xlsx函數 215
17.8 system.file()函數 215
17.9 read_excel()函數 215
17.10 write_xlsx()函數 216
17.11 相關的例子及數據集 217
17.12 練習題 217
第 18章 讀寫二進制數據 219
18.1 生成二進制數據集 219
18.2 大尾數法和小尾數法 220
18.3 writeBin()函數 220
18.4 readBin()函數 221
18.5 寫入二進制數據文件 221
18.6 讀取二進制數據文件 224
18.7 高頻數據 224
18.8 TORQ高頻數據 225
18.9 練習題 228
第 19章 字符串變量的操作 231
19.1 為字符串變量賦值 231
19.2 檢查變量是否為字符型 231
19.3 轉換大小寫 232
19.4 計算字符串長度 232
19.5 取部分字符串 232
19.6 合併字符串 233
19.7 將數字轉換成字符串 233
19.8 將字符串轉換成實數 234
19.9 替換字符 235
19.10 重複符號 235
19.11 刪除字符串的前導空格或尾隨空格 235
19.12 字符串匹配 236
19.13 字符串比較中的邏輯或 237
19.14 子字符串的固定組合 238
19.15 字符串比較時的邏輯非 238
19.16 檢測字符串是否存在 238
19.17 將字符串轉換成整數 239
19.18 向量和矩陣的行列名稱 239
19.19 代表26個字母變量 239
19.20 使用短名的函數 240
19.21 美國信息交換標準碼(ASCII) 241
19.22 練習題 241
第4篇 R在金融建模中的應用
第 20章 各類檢驗及事件研究 244
20.1 兩個關鍵值(T和P) 244
20.2 對一個數據集進行T檢驗 245
20.3 檢驗兩個數據集的均值是否相等 246
20.4 F檢驗 248
20.5 Durbin-Watson的自相關檢驗 251
20.6 Granger因果關係檢驗 252
20.7 Wilcoxon相關性檢驗 254
20.8 Pearson相關性和Spearman排列相關性 255
20.9 正態檢驗 256
20.10 事件對股票的影響 257
20.11 練習題 258
第 21章 期權定價模型 261
21.1 期權簡介 262
21.2 輸入和輸出 263
21.3 簡單作圖 264
21.4 期權的支付函數及圖示 264
21.5 期權的盈虧函數 266
21.6 無紅利股票的期權定價(Black-Scholes-Merton模型) 267
21.7 累積正態分佈的R函數 268
21.8 對沖、投機和套利 269
21.9 期權的交易策略 269
21.10 與期權有關的希臘字母 271
21.11 看漲期權與看跌期權 272
21.12 下載公開期權數據 273
21.13 隱含波動率 273
21.14 練習題 274
第 22章 蒙特卡羅隨機模擬法 275
22.1 隨機模擬在財務分析上的應用 275
22.2 正態分佈簡介 277
22.3 生成隨機數 278
22.4 Q-Q圖 278
22.5 蒙特卡羅隨機模擬 279
22.6 模擬股票的路徑 279
22.7 利用蒙特卡羅模擬來驗證Black-Scholes-Merton期權模型 281
22.8 利用蒙特卡羅模擬計算亞式期權(Asian Options) 282
22.9 如何生成兩個相關的隨機數序列 282
22.10 如何從n隻股票中隨機選擇m隻股票 283
22.11 sobol()函數 284
22.12 Shapiro-Wilk正態分佈檢驗 285
22.13 蒙特卡羅模擬所需的時間 286
22.14 練習題 286
第 23章 投資組合理論 289
23.1 投資組合簡介 289
23.2 方差、標準差和相關性 290
23.3 Markowitz均值-方差優化理論 291
23.4 單期投資組合優化 292
23.5 股票收益率矩陣 292
23.6 投資組合的收益率 294
23.7 兩隻股票投資組合收益率的標準離差(波動率) 295
23.8 n隻股票投資組合收益率的標準離差 297
23.9 方差-協方差矩陣 297
23.10 相關矩陣 298
23.11 兩個股票組合的小風險投資組合 298
23.12 optim()函數 300
23.13 二次規劃 300
23.14 與投資組合有關的R包 301
23.15 R包相關手冊 301
23.16 R軟件包中的數據集 302
23.17 一些函數的例子 303
23.17.1 risk.attribution()函數 304
23.17.2 用目標收益率計算投資組合的小風險 304
23.17.3 組合優化 305
23.17.4 兩股投資組合的有效投資組合 305
23.18 投資組合保險(套期保值與目標市場風險) 306
23.19 練習題 307
第 24章 在險價值 310
24.1 在險價值簡介 311
24.2 正態分佈及其圖示 312
24.3 置信水平與左側損失的百分比 314
24.4 基於正態分佈估計VaR 314
24.5 公式中z的符號問題 315
24.6 一日的VaR與多日的VaR 315
24.7 基於歷史收益率的排序來估計VaR 316
24.8 均值、標準差、偏度和峰度(峭度) 317
24.9 修正的VaR(mVaR) 318
24.10 計算投資組合的VaR 319
24.11 計算預期損失 320
24.12 PerformanceAnalytics 軟件包 321
24.13 練習題 323
第 25章 信用風險 325
25.1 簡介 325
25.2 違約的基本概念 326
25.3 違約風險溢價 327
25.4 下載美國國庫券的收益率 328
25.5 穆迪(Moody)的公司債券歷史 收益率 329
25.6 信用評級 329
25.7 信用評級遷徙矩陣 330
25.8 信用評級和違約概率 332
25.9 違約後的平均恢復率 333
25.10 恢復率和損失率 334
25.11 估計公司破產概率的Z比值 334
25.12 基於KMV模型估計公司的市場價值及股票收益率的波動性 336
25.13 估算公司總資產和股票收益率波動性 337
25.14 nlm()函數 338
25.15 KMV模型和nlm()函數 339
25.16 距違約點的距離 340
25.17 credit.RData數據集 340
25.18 CreditMetrics包 341
25.19 信用違約互換期貨 343
25.20 練習題 345
第 26章 買賣差價、交易成本及流動性 348
26.1 簡介 348
26.2 估算股票買賣差價 349
26.3 估算買賣差價 350
26.4 基於高頻數據估算買賣差價 351
26.5 從日高和低股票估算買賣差價 352
26.6 流動性簡介 353
26.7 用公司的市值表徵流動性 353
26.8 用股票的交易量表徵流動性 353
26.9 用股票的年周轉率表徵流動性 354
26.10 用美元交易量表徵流動性 354
26.11 流動性對股票和收益率的影響 355
26.12 反流動性度量 355
26.13 流動性度量模型 356
26.14 流動性度量指標 357
26.15 公司的流動性和市場的流動性 358
26.16 用高頻數據計算買賣差價 358
26.17 練習題 358
第 27章 文本處理在金融領域的應用 360
27.1 文本分析在金融學及會計學上的應用 361
27.2 美國股票交易管理委員會的開源數據庫 361
27.3 文本信息的輸入 361
27.4 計算文件的行數 362
27.5 計算文件中的詞彙數 363
27.6 計算文件中詞彙的頻率 363
27.7 用Fog指標度量文章難易程度 364
27.8 投資人的情緒對股票的影響 367
27.9 對投資人情緒的度量 368
27.10 與金融學相關的詞彙 368
27.11 練習題 369
第 28章 與金融相關的包 370
28.1 金融相關的R包 370
28.2 下載並安裝與金融有關的包 372
28.3 fImport包 372
28.4 fImport包的說明書 373
28.5 quantmod包 374
28.6 pdfetch包 374
28.7 metafolio包 375
28.8 fOptions包 376
28.9 fAsianOptions包 376
28.10 fExoticOptions包 377
28.11 fBasics包 378
28.12 fBonds包 379
28.13 termstrc包 380
28.14 YieldCurve包 382
28.15 CreditMetrics包 383
28.16 timeDate包 384
28.17 tseries包 385
28.18 fAssets包 388
28.19 zoo包 389
28.20 TTR包 390
28.21 ttrTests包 391
28.22 stockPortfolio包 392
28.23 XML包 392
28.24 PerformanceAnalytics包 392
28.25 RquantLib包 394
28.26 MASS包 395
28.27 練習題 396
第5篇 R技能
第 29章 用R實現簡單加密 398
29.1 為何不去掉空白 399
29.2 加密方法一:字母順移 399
29.3 加密方法二:字母對換 400
29.4 英文字母頻率表 402
29.5 用5個字母表徵26個字母 403
29.6 更複雜的加密法 403
29.7 用6個字母表徵26個字母及10個數字(0~9) 404
29.8 練習題 405
第30章 用R讀取壓縮文件 407
30.1 下載壓縮軟件(WinRAR) 407
30.2 生成壓縮文件 407
30.3 查看壓縮文件的內容 408
30.4 從壓縮文件檢索數據 409
30.5 用R下載壓縮文件 409
30.6 練習題 410
作者介紹
嚴玉星,畢業於麥吉爾大學,獲金融學博士學位。他有豐富的教學經驗,教授過各類金融課程,如金融建模、期權和期貨、投資組合理論、定量財務分析、企業融資和金融數據庫。此外,他精通R、Python、SAS、MATLAB和C語言,是金融數據分析方面的專業人士。