Python憑借其簡單、易讀、可擴(kuò)展性以及擁有巨大而活躍的科學(xué)計(jì)算社區(qū), 在需要數(shù)據(jù)分析和處理大量數(shù)據(jù)的金融領(lǐng)域得到了廣泛而迅速的應(yīng)用, 并且成為越來越多專業(yè)人士首選的編程語言之一。本書通過12章內(nèi)容介紹了Python在金融領(lǐng)域的應(yīng)用, 從Python的安裝、基礎(chǔ)語法, 再到一系列簡單的編程示例, 本書循序漸進(jìn)地引導(dǎo)讀者學(xué)習(xí)Python。同時(shí), 本書還結(jié)合Python的各個(gè)模塊以及金融領(lǐng)域中的期權(quán)價(jià)格、金融圖形繪制、時(shí)間序列、期權(quán)定價(jià)模型、期權(quán)定價(jià)等內(nèi)容, 深度揭示了Python在金融行業(yè)中的應(yīng)用技巧。
本書由具有豐富的教學(xué)經(jīng)驗(yàn)和專業(yè)經(jīng)驗(yàn)的嚴(yán)玉星教授編寫,囊括了他多年在金融領(lǐng)域教學(xué)一線的經(jīng)典思想,并且結(jié)合了眾多實(shí)際的金融數(shù)據(jù),嚴(yán)教授還全程參與了本書的翻譯和審校工作。
本書在原作者全程參與的前提下,邀請香港理工大學(xué)的張少軍老師全程主導(dǎo)并負(fù)責(zé)本書的翻譯,將基本的金融理論和豐富的代碼示例及金融模型深度解析,引導(dǎo)讀者編寫高效的Python程序,構(gòu)建實(shí)際的Python應(yīng)用,實(shí)現(xiàn)金融數(shù)據(jù)的高效分析。在理論和實(shí)踐中,把握量化交易的核心思想,將金融模型運(yùn)用得得心應(yīng)手。
嚴(yán)玉星,畢業(yè)于麥吉爾大學(xué),獲金融學(xué)博士學(xué)位。他有著豐富的教學(xué)經(jīng)驗(yàn),教授過各類本科學(xué)位和研究生學(xué)位的金融課程,如金融建模、期權(quán)和期貨、投資組合理論、定量財(cái)務(wù)分析、企業(yè)融資和金融數(shù)據(jù)庫等。他曾在8所全球知名的大學(xué)任教:兩所在加拿大,一所在新加坡,5所在美國。
嚴(yán)博士一直活躍于學(xué)術(shù)研究的前沿,他的研究成果在多個(gè)國際學(xué)術(shù)期刊發(fā)表。此外,他還是財(cái)務(wù)數(shù)據(jù)方面的專家。在新加坡南洋理工大學(xué)任教時(shí),他曾為博士生講授一門名為“金融數(shù)據(jù)庫入門”的課程。
第1章 Python簡介及安裝 1
1.1 Python簡介 1
1.2 如何安裝Python 3
1.3 Python的不同版本 3
1.4 運(yùn)行Python的3種方式 4
1.4.1 用GUI啟動Python 4
1.4.2 從Python命令行啟動Python 5
1.4.3 從DOS窗口啟動Python 6
1.5 如何退出Python 7
1.6 錯(cuò)誤提示 7
1.7 Python語言是區(qū)分大小寫的 8
1.8 變量的初始化 8
1.9 尋找在線幫助 9
1.10 查找學(xué)習(xí)手冊和教程 10
1.11 如何找出Python的版本 12
1.12 小結(jié) 12
練習(xí)題 12
第2章 用Python完成普通計(jì)算器的功能 14
2.1 變量的賦值及顯示 15
2.2 錯(cuò)誤提示 15
2.3 不能調(diào)用沒有賦值的變量 16
2.4 選擇有意義的變量名 16
2.5 使用dir()來查找變量和函數(shù) 17
2.6 刪除或取消變量 17
2.7 基本數(shù)學(xué)運(yùn)算:加、減、乘、除 18
2.8 冪函數(shù)、取整和余數(shù)函數(shù) 19
2.9 一個(gè)真正的冪函數(shù) 20
2.10 選擇合適的數(shù)值精度 21
2.11 找出某個(gè)內(nèi)置函數(shù)的詳細(xì)信息 22
2.12 列出所有內(nèi)置函數(shù) 22
2.13 導(dǎo)入數(shù)學(xué)模塊 23
2.14 、e、對數(shù)和指數(shù)函數(shù) 24
2.15 import math與from math import*的區(qū)別 24
2.16 一些常用的函數(shù) 25
2.16.1 print()函數(shù) 25
2.16.2 type()函數(shù) 26
2.16.3 下劃線_ 26
2.16.4 結(jié)合兩個(gè)字符串 26
2.16.5 將小寫字符變成大寫字符的函數(shù):upper() 27
2.17 元組數(shù)據(jù)類型 28
2.18 小結(jié) 29
練習(xí)題 30
第3章 用Python編寫一個(gè)金融計(jì)算器 32
3.1 編寫不需要保存的Python函數(shù) 33
3.2 函數(shù)的輸入?yún)?shù)及它們的預(yù)設(shè)值 33
3.3 縮進(jìn)格式在Python編程中至關(guān)重要 34
3.4 檢查自己編寫的函數(shù)是否存在 35
3.5 在Python編輯器里定義函數(shù) 35
3.6 利用import()在Python編輯器里激活自己編寫的函數(shù) 36
3.7 使用Python編輯器調(diào)試程序 37
3.8 調(diào)用pv_f()函數(shù)的兩種方法 37
3.9 生成自制的模塊 38
3.10 兩種注釋方法 39
3.10.1 第1種注釋方法 39
3.10.2 第2種注釋方法 39
3.11 查找有關(guān)pv_f()函數(shù)的信息 40
3.12 條件函數(shù):if() 41
3.13 計(jì)算年金 41
3.14 利率換算 42
3.15 連續(xù)復(fù)利利率 44
3.16 數(shù)據(jù)類型:列表 45
3.17 凈現(xiàn)值和凈現(xiàn)值法則 45
3.18 投資回收期和投資回收期法則 47
3.19 內(nèi)部收益率和內(nèi)部收益率法則 47
3.20 顯示在某個(gè)目錄下的指定文件 49
3.21 用Python編寫一個(gè)專業(yè)金融計(jì)算器 49
3.22 將我們的目錄加到Python的路徑上 50
3.23 小結(jié) 52
練習(xí)題 52
第4章 編寫Python程序計(jì)算看漲期權(quán)價(jià)格 56
4.1 用空殼法編寫一個(gè)程序 57
4.2 用注釋法編寫一個(gè)程序 59
4.3 使用和調(diào)試他人編寫的程序 61
4.4 小結(jié) 61
練習(xí)題 61
第5章 模塊簡介 64
5.1 什么是模塊 64
5.2 導(dǎo)入模塊 65
5.2.1 為導(dǎo)入的模塊取個(gè)簡稱 66
5.2.2 顯示模塊里的所有函數(shù) 66
5.2.3 比較import math和from math import * 67
5.2.4 刪除已經(jīng)導(dǎo)入的模塊 67
5.2.5 導(dǎo)入幾個(gè)指定的函數(shù) 68
5.2.6 找出所有的內(nèi)置模塊 69
5.2.7 找出所有可用的模塊 69
5.2.8 找到一個(gè)已安裝的模塊的目錄位置 71
5.2.9 有關(guān)模塊的更多信息 72
5.2.10 查找某個(gè)未安裝的模塊 72
5.3 模塊之間的相互依賴性 73
5.4 小結(jié) 74
練習(xí)題 75
第6章 NumPy和SciPy模塊簡介 76
6.1 安裝NumPy和SciPy模塊 77
6.2 從Anaconda啟動Python 77
6.2.1 使用NumPy的示例 78
6.2.2 使用SciPy的示例 79
6.3 顯示NumPy和SciPy包含的所有函數(shù) 82
6.4 關(guān)于某個(gè)函數(shù)的詳細(xì)信息 83
6.5 理解列表數(shù)據(jù)類型 83
6.6 使用全一矩陣、全零矩陣和單位矩陣 84
6.7 執(zhí)行數(shù)組操作 84
6.8 數(shù)組的加、減、乘、除 85
6.8.1 進(jìn)行加減運(yùn)算 85
6.8.2 執(zhí)行矩陣乘法運(yùn)算 85
6.8.3 執(zhí)行逐項(xiàng)相乘的乘法運(yùn)算 86
6.9 x.sum()函數(shù) 87
6.10 遍歷數(shù)組的循環(huán)語句 87
6.11 使用與模塊相關(guān)的幫助 87
6.12 SciPy的一系列子函數(shù)包 88
6.13 累積標(biāo)準(zhǔn)正態(tài)分布 89
6.14 與數(shù)組相關(guān)的邏輯關(guān)系 90
6.15 SciPy的統(tǒng)計(jì)子模塊(stats) 90
6.16 SciPy模塊的插值方法 91
6.17 使用SciPy求解線性方程 92
6.18 利用種子(seed)生成可重復(fù)的隨機(jī)數(shù) 93
6.19 在導(dǎo)入的模塊里查找函數(shù) 94
6.20 優(yōu)化算法簡介 95
6.21 線性回歸和資本資產(chǎn)定價(jià)模型(CAPM) 95
6.22 從文本文件(.txt)輸入數(shù)據(jù):loadtxt()和getfromtxt()函數(shù) 96
6.23 獨(dú)立安裝NumPy模塊 97
6.24 數(shù)據(jù)類型簡介 97
6.25 小結(jié) 98
練習(xí)題 98
第7章 用matplotlib模塊繪制與金融相關(guān)的圖形 101
7.1 通過ActivePython安裝matplotlib模塊 102
7.2 通過Anaconda安裝matplotlib模塊 103
7.3 matplotlib模塊簡介 103
7.4 了解簡單利率和復(fù)利利率 106
7.5 為圖形添加文字 107
7.6 杜邦等式的圖示 109
7.7 凈現(xiàn)值圖示曲線 110
7.7.1 有效地使用顏色 113
7.7.2 使用不同形狀 114
7.8 圖形演示分散投資的效果 115
7.9 股票的數(shù)目和投資組合風(fēng)險(xiǎn) 117
7.10 從雅虎財(cái)經(jīng)網(wǎng)站下載歷史價(jià)格數(shù)據(jù) 119
7.10.1 用直方圖顯示收益率分布 120
7.10.2 比較單只股票的收益和市場收益 122
7.11 了解現(xiàn)金的時(shí)間價(jià)值 124
7.12 用燭臺圖展示IBM的每日收盤價(jià) 125
7.13 用圖形展示價(jià)格變化 126
7.14 同時(shí)展示收盤價(jià)和交易量 129
7.14.1 在圖形上添加數(shù)學(xué)公式 130
7.14.2 在圖形上添加簡單的圖像 131
7.14.3 保存圖形文件 132
7.15 比較個(gè)股的表現(xiàn) 132
7.16 比較多只股票的收益率與波動率 133
7.17 查找學(xué)習(xí)手冊、示例和有關(guān)視頻 135
7.18 獨(dú)立安裝matplotlib模塊 136
7.19 小結(jié) 136
練習(xí)題 136
第8章 時(shí)間序列的統(tǒng)計(jì)分析 139
8.1 安裝pandas和statsmodels模塊 140
8.1.1 在Anaconda命令提示符下啟動Python 140
8.1.2 使用DOS窗口啟動Python 141
8.1.3 使用Spyder啟動Python 142
8.2 Pandas和statsmodels模塊簡介 143
8.2.1 如何使用Pandas模塊 143
8.2.2 statsmodels模塊示例 144
8.3 開源數(shù)據(jù) 145
8.4 用Python代碼輸入數(shù)據(jù) 147
8.4.1 從剪貼板輸入數(shù)據(jù) 147
8.4.2 從雅虎財(cái)經(jīng)網(wǎng)站下載歷史價(jià)格數(shù)據(jù) 147
8.4.3 從txt文件輸入數(shù)據(jù) 148
8.4.4 從Excel文件輸入數(shù)據(jù) 149
8.4.5 從csv文件輸入數(shù)據(jù) 150
8.4.6 從網(wǎng)頁下載數(shù)據(jù) 150
8.4.7 從MATLAB數(shù)據(jù)文件輸入數(shù)據(jù) 152
8.5 幾個(gè)重要的函數(shù) 152
8.5.1 使用pd.Series()生成一維時(shí)間序列 152
8.5.2 使用日期變量 153
8.5.3 使用DataFrame數(shù)據(jù)類型 154
8.6 計(jì)算回報(bào)率 156
8.6.1 從日回報(bào)率計(jì)算月回報(bào)率 157
8.6.2 從日回報(bào)率計(jì)算年回報(bào)率 159
8.7 按日期合并數(shù)據(jù)集 160
8.8 構(gòu)建n只股票的投資組合 161
8.9 T-檢驗(yàn)和F-檢驗(yàn) 162
8.9.1 檢驗(yàn)方差是否相等 163
8.9.2 測試“一月效應(yīng)” 164
8.10 金融研究和實(shí)戰(zhàn)的應(yīng)用舉例 165
8.10.1 基于52周最高價(jià)和最低價(jià)的交易策略 165
8.10.2 用Roll(1984)模型來估算買賣價(jià)差 166
8.10.3 用Amihud(2002)模型來估算反流動性指標(biāo) 167
8.10.4 Pastor和Stambaugh(2003)流動性指標(biāo) 168
8.10.5 Fama-French三因子模型 171
8.10.6 Fama-MacBeth回歸模型 173
8.10.7 滾動式估算市場風(fēng)險(xiǎn)系數(shù) 174
8.10.8 在險(xiǎn)價(jià)值簡介 177
8.11 構(gòu)建有效組合邊界 178
8.11.1 估計(jì)方差-協(xié)方差矩陣 178
8.11.2 優(yōu)化-最小化 181
8.11.3 構(gòu)建一個(gè)最優(yōu)投資組合 181
8.11.4 構(gòu)建n只股票的有效組合邊界 183
8.12 插值法簡介 186
8.13 輸出數(shù)據(jù)到外部文件 187
8.13.1 輸出數(shù)據(jù)到一個(gè)文本文件 187
8.13.2 輸出數(shù)據(jù)到一個(gè)二進(jìn)制文件 188
8.13.3 從二進(jìn)制文件讀取數(shù)據(jù) 188
8.14 用Python分析高頻數(shù)據(jù)并計(jì)算買賣價(jià)差 188
8.15 更多關(guān)于使用Spyder的信息 194
8.16 一個(gè)有用的數(shù)據(jù)集 195
8.17 小結(jié) 196
練習(xí)題 197
第9章 Black-Scholes-Merton期權(quán)定價(jià)模型 201
9.1 看漲期權(quán)和看跌期權(quán)的收益和利潤/損失函數(shù) 202
9.2 歐式期權(quán)與美式期權(quán) 205
9.3 現(xiàn)金流、不同類型的期權(quán)、權(quán)利和責(zé)任 206
9.4 正態(tài)分布、標(biāo)準(zhǔn)正態(tài)分布和累積標(biāo)準(zhǔn)正態(tài)分布 206
9.5 不分紅股票的期權(quán)定價(jià)模型 209
9.6 用于期權(quán)定價(jià)的p4f模塊 210
9.7 已知分紅股票的歐式期權(quán)價(jià)格 212
9.8 多種交易策略 213
9.8.1 股票多頭和看漲期權(quán)空頭的組合 214
9.8.2 跨式期權(quán)組合—具有同樣執(zhí)行價(jià)格的看漲期權(quán)和看跌期權(quán)的組合 215
9.8.3 日歷套利組合 216
9.8.4 蝶式看漲期權(quán)組合 218
9.9 期權(quán)價(jià)格和輸入?yún)?shù)之間的關(guān)系 219
9.10 與期權(quán)相關(guān)的希臘字母 219
9.11 期權(quán)平價(jià)關(guān)系及其圖形表示 221
9.12 二叉樹法及其圖形表示 223
9.12.1 為歐式期權(quán)定價(jià)的二叉樹法 229
9.12.2 為美式期權(quán)定價(jià)的二叉樹法 229
9.13 套期保值策略 230
9.14 小結(jié) 231
練習(xí)題 232
第10章 Python的循環(huán)語句和隱含波動率的計(jì)算 235
10.1 隱含波動率的定義 236
10.2 for循環(huán)簡介 237
10.2.1 使用for循環(huán)計(jì)算隱含波動率 237
10.2.2 歐式期權(quán)的隱含波動率 238
10.2.3 看跌期權(quán)的隱含波動率 239
10.2.4 enumerate()函數(shù)簡介 240
10.3 用for循環(huán)計(jì)算內(nèi)部收益率及多個(gè)內(nèi)部收益率 241
10.4 while循環(huán)簡介 243
10.4.1 使用鍵盤命令停止無限循環(huán) 244
10.4.2 使用while循環(huán)計(jì)算隱含波動率 244
10.4.3 多重嵌套的for循環(huán) 246
10.5 美式看漲期權(quán)的隱含波動率 246
10.6 測試一個(gè)程序的運(yùn)行時(shí)間 247
10.7 二分搜索的原理 248
10.8 順序訪問與隨機(jī)訪問 249
10.9 通過循環(huán)訪問數(shù)組的元素 250
10.9.1 利用for循環(huán)賦值 251
10.9.2 通過循環(huán)訪問詞典的元素 251
10.10 從CBOE網(wǎng)站下載期權(quán)數(shù)據(jù) 252
10.11 從雅虎財(cái)經(jīng)網(wǎng)頁下載期權(quán)數(shù)據(jù) 254
10.11.1 從雅虎財(cái)經(jīng)網(wǎng)頁檢索不同的到期日期 254
10.11.2 從雅虎財(cái)經(jīng)網(wǎng)頁下載當(dāng)前價(jià)格 255
10.12 看跌期權(quán)和看漲期權(quán)的比率及其短期趨勢 255
10.13 小結(jié) 258
練習(xí)題 258
第11章 蒙特卡羅模擬和期權(quán)定價(jià) 261
11.1 產(chǎn)生服從標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)數(shù) 262
11.1.1 產(chǎn)生服從(高斯)正態(tài)分布的隨機(jī)樣本 263
11.1.2 利用種子(seed)生成相同的隨機(jī)數(shù) 263
11.1.3 產(chǎn)生n個(gè)服從正態(tài)分布的隨機(jī)數(shù) 263
11.1.4 正態(tài)分布樣本的直方圖 264
11.1.5 對數(shù)正態(tài)分布的圖形表示 265
11.1.6 產(chǎn)生服從泊松分布的隨機(jī)數(shù) 266
11.1.7 產(chǎn)生服從均勻分布的隨機(jī)數(shù) 266
11.2 利用蒙特卡羅模擬計(jì)算的近似值 267
11.3 從 只股票中隨機(jī)選擇m只 268
11.4 可重復(fù)和不可重復(fù)的隨機(jī)取樣 270
11.5 年收益率的分布 271
11.6 模擬股價(jià)變化 273
11.7 圖形展示期權(quán)到期日的股票價(jià)格的分布 275
11.8 尋找有效的投資組合和有效邊界 276
11.8.1 尋找基于兩只股票的有效組合及相關(guān)系數(shù)的影響 276
11.8.2 構(gòu)建n只股票的有效邊界 281
11.9 算術(shù)平均值與幾何平均值 283
11.10 預(yù)測長期回報(bào)率 284
11.11 用模擬法為看漲期權(quán)定價(jià) 285
11.12 奇異期權(quán)簡介 286
11.12.1 利用蒙特卡羅模擬給均價(jià)期權(quán)定價(jià) 286
11.12.2 利用蒙特卡羅模擬給障礙式期權(quán)定價(jià) 288
11.13 障礙式期權(quán)的平價(jià)關(guān)系及其圖形演示 289
11.14 具有浮動執(zhí)行價(jià)格的回望式期權(quán)的定價(jià) 293
11.15 使用Sobol序列來提高效率 294
11.16 小結(jié) 294
練習(xí)題 295
第12章 波動率和GARCH模型 296
12.1 傳統(tǒng)的風(fēng)險(xiǎn)測度-標(biāo)準(zhǔn)方差 297
12.2 檢驗(yàn)正態(tài)分布 297
12.3 下偏標(biāo)準(zhǔn)方差 300
12.4 檢驗(yàn)兩個(gè)時(shí)間段的波動率是否相等 302
12.5 利用Breusch和Pagan(1979)方法檢驗(yàn)異方差 303
12.6 從雅虎財(cái)經(jīng)網(wǎng)頁檢索期權(quán)數(shù)據(jù) 306
12.7 波動率的微笑曲線和斜度 307
12.8 波動率集聚效應(yīng)的圖形表示 309
12.9 ARCH模型及ARCH(1)隨機(jī)過程的模擬 310
12.10 GARCH(廣義ARCH)模型 312
12.10.1 模擬GARCH隨機(jī)過程 312
12.10.2 采用改良的garchSim()函數(shù)模擬GARCH(p,q)模型 313
12.10.3 由Glosten、Jagannanthan和
Runkle(1993)提出的GJR_
GARCH模型簡介 315
12.11 小結(jié) 319
練習(xí)題 319
收起全部↑