工欲善其事,必先利其器。
有人說鋼琴演奏是一門藝術(shù),鋼琴家用指尖將音符轉(zhuǎn)換為美妙旋律來傳遞思想感情,與聽眾交流,但不要忘記這一切是建立在爐火純青的演奏技術(shù)上的,所以鋼琴演奏首先是一門技術(shù)。量化投資亦是如此,對于市場,每個人都有自己獨到的見解、投資理念甚至具體的策略,但想把這些傳遞出來,則需要足夠的編程技巧。
《MATLAB量化金融分析基礎(chǔ)與實戰(zhàn)》側(cè)重的是MATLAB編程能力。編程能力可分為兩個層次,一是能寫出策略,二是寫出高效策略。第一個層次需要掌握一門語言的基本語法和函數(shù)功能等,第二個層次則需要較多的知識儲備與實際經(jīng)驗積累。希望讀者通過學(xué)習(xí)本書至少熟練達到第一個層次以上,能夠用MATLAB語言輕松表達自己的投資邏輯。本書并不側(cè)重于揭示市場的運作原理或闡述模型和策略構(gòu)建的合理性,因為策略本身的語言載體并不局限于MATLAB。
《MATLAB量化金融分析基礎(chǔ)與實戰(zhàn)》實戰(zhàn)篇包括了4個經(jīng)典投資策略。在12.1REF簡單的均線策略\r\h節(jié)討論了一種最簡單的利用市場失效的策略均線系統(tǒng),當(dāng)然失效特例還有很多,也不僅局限于技術(shù)指標(biāo)。市場有效理論將市場狀態(tài)分為弱式、半強式和強式有效當(dāng)然還有無效,實際上市場總是在這四種狀態(tài)中切換而不會永遠停留在一個狀態(tài),不同市場狀態(tài)下有合適的應(yīng)對策略且通過分形指標(biāo)可捕捉市場狀態(tài)變化進而做策略擇時;在12.2REF神奇的小市值策略\r\h節(jié)介紹了市值這個估值因子。這個因子為何有效以及股票投資中涉及的其他因子、擇時、中性等概念,都是值得細致論述的重要知識點;在13.1REF豆粕和菜粕的價差套利\r\h節(jié)中展示了一個期貨統(tǒng)計套利的例子豆粕與菜粕的價差套利,這里想強調(diào)的是量化投資不僅是要尋找數(shù)字上的規(guī)律,更要理解數(shù)字背后的經(jīng)濟學(xué)原理;在13.2REF海龜交易法則\r\h節(jié)中講述了著名的海龜交易法則,同時也介紹了使用投資組合來分散風(fēng)險的概念。
授人以魚,不如授人以漁。
《MATLAB量化金融分析基礎(chǔ)與實戰(zhàn)》盡量選取與量化投資相關(guān)的MATLAB功能模塊加以介紹,避免大而全地陳述或生澀地講解MATLAB各個函數(shù)的功能,取而代之的是大量的簡單例子,而這些例子可能是讀者在做量化投資時遇到的真正需求。建議讀者動手復(fù)寫一遍例子的同時仔細閱讀幫助文檔中函數(shù)的解釋以達到熟練應(yīng)用的目的。為了讓讀者更好地再現(xiàn)書中例題,數(shù)據(jù)源限制在了MATLAB自帶數(shù)據(jù)、Tushare開源數(shù)據(jù)和新浪網(wǎng)頁數(shù)據(jù)。這些數(shù)據(jù)源會實時更新,讀者在復(fù)寫的時候由于新數(shù)據(jù)的加入可能會得到與書中不同的結(jié)果。
《MATLAB量化金融分析基礎(chǔ)與實戰(zhàn)》也無意將相關(guān)的數(shù)學(xué)、金融原理進行推導(dǎo)或詳細闡述,如本書在量化投資模型篇中并未闡述模型的原理、公式推導(dǎo)等過程。
1. 讀者
本書適合具備數(shù)學(xué)、金融、計算機基礎(chǔ)及一定編程經(jīng)驗的專業(yè)人員閱讀,也可作為相關(guān)專業(yè)院校本科高年級、研究生或教師的教學(xué)、參考用書。
2. 增值服務(wù)及資源下載
本書受MATLAB中文論壇(www.ilovematlab.cn)鼎力支持,讀者可以登錄網(wǎng)址http://www.ilovematlab.cn/forum-269-1.html與作者進行在線交流,或者登錄網(wǎng)址http://www.ilovematlab.cn/thread-550784-1-1.html下載本書相關(guān)的程序源代碼。讀者也可以關(guān)注機械工業(yè)出版社計算機分社官方微信訂閱號IT有得聊,回復(fù)60417來下載相關(guān)代碼或留言,您的反饋會幫助作者更好地改進書籍。同時作者會盡可能提供更多有用信息,以幫助讀者提高量化技能。如因Tushare和新浪的數(shù)據(jù)提取方式改變而導(dǎo)致書中代碼失效,作者會及時修正代碼。
3. 文字格式
代碼及其輸出結(jié)果以灰色底紋顯示。
>> 代碼
代碼輸出
function OUT=example(IN)
OUT=IN;
4. MATLAB版本
如無特殊說明,本書所使用環(huán)境為Windows 7操作系統(tǒng)下的MATLAB。
>> disp(version)
8.6.0.267246 (R2015b)
書中提到的matlabroot為MATLAB安裝目錄,Windows系統(tǒng)默認(rèn)為C:\Program
Files\MATLAB\R2015b,而Linux系統(tǒng)默認(rèn)為/usr/local/Matlab/R2015b。讀者需注意Windows系統(tǒng)下的代碼有時并不能直接移植到Linux系統(tǒng)的MATLAB運行,比如Windows下的MATLAB支持使用\與/符號表示路徑,而Linux下僅支持使用/表示路徑。>> loadfindemos\disney.mat % Windows下可運行>> loadfindemos/disney.mat % Windows和Linux下均可運行。
還需注意的是
Windows 7系統(tǒng)中的文件名不區(qū)分大小寫,而Linux系統(tǒng)需要區(qū)分。所以,讀者在有不同操作系統(tǒng)下代碼移植需求的時候要合理規(guī)劃工程中的文件名,以避免不必要的麻煩。MATLAB雖然功能強大但為付費軟件,如果讀者經(jīng)濟能力有限可以考慮使用開源項目軟件Octave。Octave與MATLAB語法格式基本相同,但部分工具箱或者函數(shù)功能可能未實現(xiàn)且性能表現(xiàn)亦可能略遜于MATLAB,詳細信息可參閱 http://www.gnu.org/software/octave/ 。
5. 熟悉界面
如下圖所示,MATLAB軟件界面中的【應(yīng)用程序】包含了諸多應(yīng)用工具,如第11章REF報告生成器\r\h的報告生成器;右上角【搜索文檔】可以輸入關(guān)鍵字檢索MATLAB軟件手冊;【命令行窗口】用于指令的輸入與執(zhí)行;【工作區(qū)】用于存儲變量,雙擊變量可查看變量的值與屬性等信息,亦可修改此信息;【當(dāng)前文件夾】顯示當(dāng)前文件夾下的所有文件目錄結(jié)構(gòu);【命令歷史記錄】中可用〈Ctrl F〉快捷鍵查找使用過的指令,雙擊選定指令可直接運行。
6. 【命令行窗口】常用快捷鍵
〈Tab〉自動補全指令
〈Shift Enter〉換行并執(zhí)行所有指令
〈Ctrl C〉中斷當(dāng)前正在運行的指令
〈〉、〈〉切換到之前運行過的指令,可按多次直到找到需要的指令
〈Ctrl S〉將工作區(qū)全部變量存儲為.mat文件
〈Ctrl F〉
彈出對話框,可用于尋找文件
量化投資基礎(chǔ)篇
第1章
基本數(shù)據(jù)類型
1.1 變量及其命名規(guī)則
1.2 數(shù)值
1.2.1 數(shù)值類型概述
1.2.2 如何查看數(shù)值類型范圍
1.2.3 實例1:當(dāng)心數(shù)值類型轉(zhuǎn)換中的溢出
1.2.4 實例2:判斷與查看數(shù)值類型
1.3 矩陣
1.3.1 實例3:矩陣及特殊矩陣的建立方法
1.3.2 實例4:利用一維索引提取二維矩陣中的元素
1.3.3 實例5:矩陣轉(zhuǎn)置、共軛轉(zhuǎn)置與求逆
1.3.4 實例6:sortrows與sort函數(shù)比較
1.3.5矩陣與矩陣元素算術(shù)運算概述
1.3.6 邏輯、關(guān)系和集合運算概述
1.4 警惕特殊數(shù)字
1.4.1 NaN
1.4.2 Inf
1.4.3 邏輯型數(shù)字
1.5 字符和字符串
1.5.1 實例7:字符串的創(chuàng)建與元素提取
1.5.2 實例8:字符串的查找、替換與刪除
1.5.3 實例9:strcat函數(shù)的常見錯誤
1.5.4 實例10:str2num函數(shù)和str2double函數(shù)的區(qū)別
1.5.5 字符串比較函數(shù)的應(yīng)用
1.5.6 正則表達式概述及常見使用方法
1.5.7 實例11:利用符號變量求解方程
1.5.8 實例12:函數(shù)句柄的應(yīng)用
1.6 時間
1.6.1 datetime類型介紹
1.6.2 實例13:其他類型時間轉(zhuǎn)數(shù)值時間
1.6.3 實例14:數(shù)值時間轉(zhuǎn)字符串時間
1.7 cell
1.7.1 實例15:兩種常見的cell賦值方式
1.7.2 實例16:mat2cell函數(shù)與num2cell函數(shù)
1.7.3 實例17:cellstr函數(shù)
1.7.4 實例18:cell2mat函數(shù)
1.7.5 實例19:用cellfun函數(shù)做cell元素遍歷運算
1.7.6 實例20:用findgroups函數(shù)和splitapply函數(shù)做cell分組運算
1.8 struct
1.8.1 創(chuàng)建struct變量
1.8.2 實例21:多維結(jié)構(gòu)體與多維cell中嵌套結(jié)構(gòu)體
第2章
程序設(shè)計
2.1 函數(shù)的定義
2.1.1 單個函數(shù)腳本的創(chuàng)建
2.1.2 含有子函數(shù)的腳本創(chuàng)建及調(diào)用
2.2 量化分析中的常用基本函數(shù)及其用法
2.2.1 edit
2.2.2 clear
2.2.3 clc
2.2.4 close
2.2.5 whos
2.2.6 exist
2.2.7 isa
2.2.8 isempty
2.2.9 isnan
2.2.10 find
2.2.11 disp
2.2.12 fprintf
2.2.13
sprintf
2.2.14 eval
2.3 圖形生成
2.3.1 實例22:生成二維折線圖
2.3.2 實例23:生成矢量圖
2.3.3 實例24:多圖疊加生成
2.3.4 實例25:生成柱狀圖與累計柱狀圖
2.3.5 實例26:生成直方圖
2.3.6 實例27:插入子圖與文字
2.3.7 實例28:插入特殊文字與符號
2.4 全局變量與局部變量的定義
2.5 分支結(jié)構(gòu)語句
2.5.1 判斷結(jié)構(gòu) if else及其用法
2.5.2 選擇結(jié)構(gòu) switch case及其用法
2.5.3 for循環(huán)結(jié)構(gòu)及其用法
2.5.4 while循環(huán)結(jié)構(gòu)及其用法
2.5.5 break、continue、return和exit的比較
2.5.6 巧用異常捕捉try catch結(jié)構(gòu)
2.6 工程中腳本調(diào)用的優(yōu)先次序
第3章
數(shù)據(jù)處理
3.1 基本文件操作函數(shù)介紹
3.2 實例29:用importdata函數(shù)與textscan函數(shù)對txt文件讀寫
3.3 實例30:excel文件讀寫
3.4 實例31:csv文件讀寫
3.5 實例32:mat文件讀寫
3.6 實例33:圖形的存儲、讀取與圖形中的數(shù)據(jù)提取
3.7 與Oracle數(shù)據(jù)庫交互
3.7.1 Windows系統(tǒng)下的MATLAB與Oracle交互環(huán)境配置方法
3.7.2 Linux系統(tǒng)下的MATLAB與Oracle交互環(huán)境配置方法
3.7.3 實例34:建立數(shù)據(jù)庫連接
3.7.4 實例35:數(shù)據(jù)查詢、插入與修改
3.7.5 實例36:萬能的exec函數(shù)
第4章
量化分析中的常用類
4.1 類的基本概念
4.1.1 實例37:利用關(guān)鍵詞定義類
4.1.2 實例38:運算符的重載
4.2 table類
4.2.1 實例39:創(chuàng)建table類數(shù)據(jù)
4.2.2 實例40:table類與結(jié)構(gòu)體相互轉(zhuǎn)換
4.2.3 實例41:table類與cell相互轉(zhuǎn)換
4.2.4 實例42:table類與數(shù)值矩陣相互轉(zhuǎn)換
4.2.5 實例43:用varfun函數(shù)對table數(shù)據(jù)做分組運算
4.3 dataset類
4.3.1 實例44:創(chuàng)建dataset類數(shù)據(jù)
4.3.2 實例45:數(shù)值矩陣、cell、結(jié)構(gòu)體和table類數(shù)據(jù)轉(zhuǎn)換為dataset類
4.3.3 實例46:利用datasetfun函數(shù)做變量運算
4.3.4 實例47:dataset的水平和垂直拼接
4.3.5 實例48:用repalcedata函數(shù)做dataset數(shù)據(jù)替換
4.3.6 實例49:用replaceWithMissing函數(shù)做缺失數(shù)據(jù)替換
4.3.7 實例50:ismemeber函數(shù)
4.3.8 實例51:用join函數(shù)實現(xiàn)dataset合并
4.3.9 將dataset存儲為文件
4.4 線性回歸 LinearModel 類
4.4.1 常用類函數(shù)概述
4.4.2 實例52:線性回歸工作流程
第5章 MATLAB與Python交互編程
5.1 MATLAB調(diào)用Python
5.1.1 推薦Python程序軟件Anaconda
5.1.2 如何在MATLAB中配置Python環(huán)境
5.1.3 實例53:py類與模塊的調(diào)用
5.1.4 實例54:py.list、py.tuple和py.dict生成方法
5.1.5 MATLAB數(shù)據(jù)類型轉(zhuǎn)換為Python數(shù)據(jù)類型
5.1.6 Python數(shù)據(jù)類型轉(zhuǎn)換為MATLAB數(shù)據(jù)類型
5.1.7 實例55:MATLAB中使用py.list
5.1.8 實例56:MATLAB中使用py.tuple
5.1.9 實例57:MATLAB中使用py.dict
5.1.10 實例58:MATLAB中調(diào)用Python腳本
5.1.11 實例59:獲取Tushare開源數(shù)據(jù)
5.2 Python調(diào)用MATLAB
5.2.1 MATLAB Engine的安裝
5.2.2 實例60:使用MATLAB Engine調(diào)用MATLAB函數(shù)
5.2.3 MATLAB Engine傳入數(shù)據(jù)類型轉(zhuǎn)換
5.2.4 實例61:調(diào)用自定義MATLAB腳本
量化投資模型篇
第6章量
化投資分析模型
6.1 日期和時間函數(shù)
6.1.1 常用日和時間函數(shù)概述
6.1.2 工作日函數(shù)概述
6.2 技術(shù)指標(biāo)函數(shù)
6.3 投資分析
6.3.1 常用現(xiàn)金流與收益率計算函數(shù)
6.3.2 常用攤銷與折舊函數(shù)
6.3.3 常用資金時間價值計算函數(shù)
6.3.4 常用年金計算函數(shù)
6.3.5 實例62:有無數(shù)據(jù)缺失兩種情況下多元正態(tài)線性回歸方法
6.3.6 常用金融數(shù)據(jù)轉(zhuǎn)換函數(shù)
6.3.7 實例63:tick2ret函數(shù)與price2ret函數(shù)比較
6.3.8 常用投資策略評價函數(shù)
6.3.9 實例64:索提諾比率實例
6.3.10 常用金融繪圖函數(shù)
6.3.11 實例65:時間連續(xù)與間斷兩種情況下的蠟燭圖繪制
6.3.12 實例66:兩種價格與成交量圖的繪制
6.4 經(jīng)典方差模型在A股市場的應(yīng)用
6.4.1 實例67:均值-方差模型
6.4.2 實例68:CVaR模型
6.4.3 實例69:均值-絕對偏差模型
6.5 SDE模型概述
6.5.1 SDE模型的構(gòu)建
6.5.2 實例70:SDE模型對NASDAQ數(shù)據(jù)的回歸預(yù)測
第7章
統(tǒng)計與機器學(xué)習(xí)模型
7.1 常用統(tǒng)計函數(shù)
7.2 假設(shè)檢驗
7.2.1 正態(tài)分布均值假設(shè)檢驗的實現(xiàn)方法
7.2.2 正態(tài)分布方差假設(shè)檢驗的實現(xiàn)方法
7.3 回歸擬合
7.3.1 實例71:線性回歸方法
7.3.2 實例72:三種常見多元線性回歸共線性診斷方法的實現(xiàn)
7.3.3 多項式擬合方法中的標(biāo)準(zhǔn)化處理
7.3.4 實例73:非線性回歸實現(xiàn)方法
7.4 方差分析
7.4.1 實例74:單因素方差分析實現(xiàn)方法
7.4.2 實例75:雙因素方差分析實現(xiàn)方法
7.4.3 實例76:多因素方差分析實現(xiàn)方法
7.5 聚類分析
7.5.1 實例77:k-means與k-medoids算法應(yīng)用
7.5.2 實例78:混合高斯模型應(yīng)用
7.6 分類分析
7.6.1 實例79:決策樹應(yīng)用
7.6.2 實例80:邏輯回歸原理與實現(xiàn)
7.6.3 實例81:KNN近鄰算法應(yīng)用
7.6.4 實例82:SVM支持向量機應(yīng)用
7.7 數(shù)據(jù)降維
7.7.1 主成分分析
7.7.2 實例83:理解主成分分析的原理與輸出結(jié)果
第8章
經(jīng)典計量經(jīng)濟學(xué)模型
8.1 條件均值模型
8.1.1 實例84:ARIMA模型公式與建立方法
8.1.2 模型參數(shù)估計
8.1.3 方差推斷
8.1.4 實例85:ARIMA模型對NASDAQ數(shù)據(jù)的擬合
8.1.5 實例86:AR模型公式與建立方法
8.1.6 實例87:MA模型公式與建立方法
8.1.7 實例88:ARMA模型公式與建立方法
8.1.8 實例89:ARIMAX模型公式與建立方法
8.1.9 實例90:殘差為ARIMA的線性回歸模型公式與建立方法
8.2 條件方差模型
8.2.1 實例91:GARCH模型公式與建立方法
8.2.2 實例92:EGARCH模型公式與建立方法
8.2.3 實例93:GJR模型公式與建立方法
8.2.4 實例94:條件方差模型對NASDAQ數(shù)據(jù)的預(yù)測應(yīng)用
8.3 時間序列平穩(wěn)性與單位根檢驗
8.3.1 實例95:NASDAQ數(shù)據(jù)的ADF檢驗應(yīng)用
8.3.2 實例96:NASDAQ數(shù)據(jù)的KPSS檢驗應(yīng)用
8.3.3 實例97:NASDAQ數(shù)據(jù)的PP檢驗應(yīng)用
8.3.4 adftest、kpsstest和pptest函數(shù)返回結(jié)果比較
8.4 實例98:中證500指數(shù)量價關(guān)系的granger因果關(guān)系檢驗
程序性能提升篇
第9章 CPU并行計算
9.1 基本原理介紹
9.2 并行計算parfor 循環(huán)初探
9.2.1 parfor循環(huán)的使用
9.2.2 實例99:多種工況下parfor與for性能對比分析
9.3 parfor 循環(huán)中變量類型解釋
9.4 parfor循環(huán)中的限制
9.4.1 禁止使用交互輸入
9.4.2 禁止圖形輸出
9.4.3 實例100:巧用feval函數(shù)傳入函數(shù)句柄
9.4.4 parfor中的常見受限變量與函數(shù)
9.4.5 實例101:巧用自定義函數(shù)調(diào)用受限函數(shù)
9.4.6 parfor循環(huán)中含for循環(huán)的四種限制情況
9.5 計算機集群上的并行計算
9.5.1 mdce服務(wù)介紹
9.5.2 Windows系統(tǒng)下的mdce服務(wù)配置方法
9.5.3 Linux系統(tǒng)下的mdce服務(wù)配置方法
9.5.4 實例102:計算機集群上配置并行計算
第10章 GPU并行計算
10.1 基本原理介紹
10.2 GPU相關(guān)類與函數(shù)表
10.3 實例103:GPU調(diào)用流程
10.4 運行MATLAB函數(shù)
10.4.1 運行內(nèi)置函數(shù)
10.4.2 實例104:利用arrayfun運行自定義函數(shù)
10.4.3 實例105:運行自定義kernel函數(shù)方法
第11章
報告生成器
11.1 生成HTML格式報告
11.2 熟悉界面
11.3 逐步加入報告元素
11.3.1 創(chuàng)建標(biāo)題
11.3.2 增加章節(jié)和分章
11.3.3 增加段落
11.3.4 插入MATLAB代碼
11.3.5 插入圖片
11.3.6 插入變量
11.3.7 使用邏輯分支語句增加新的章節(jié)
11.4 最終報告生成
量化投資實戰(zhàn)篇
第12章
經(jīng)典股票量化策略初探
12.1 市場失效簡單的均線策略
12.1.1 策略主邏輯
12.1.2 并行計算對程序效率的提升
12.1.3 完善策略邏輯細節(jié)
12.1.4 參數(shù)與模型優(yōu)化思路擴展
12.2 規(guī)模效應(yīng)神奇的小市值策略
12.2.1 策略主邏輯
12.2.2 splitapply函數(shù)在股票分組的使用
12.2.3 警惕未來函數(shù)的使用
第13章
經(jīng)典期貨策略初探
13.1 替代效應(yīng)豆粕和菜粕的價差套利
13.1.1 用regexp函數(shù)與cellfun函數(shù)快速處理新浪網(wǎng)頁接口數(shù)據(jù)
13.1.2 探究統(tǒng)計規(guī)律背后的經(jīng)濟原理
13.1.3 把握主要矛盾構(gòu)建統(tǒng)計套利策略
13.1.4 期貨策略中的幾點注意事項
13.2 趨勢追蹤海龜交易法則
13.2.1 基本概念
13.2.2 名義資產(chǎn)非實際資產(chǎn)
13.2.3 海龜交易法則1:短周期系統(tǒng)
13.2.4 海龜交易法則2:長周期
13.2.5 海龜交易法則的實現(xiàn)
13.2.6 投資組合一:品種獨立風(fēng)險再投資
13.2.7 投資組合二:品種等風(fēng)險再投資
13.2.8 風(fēng)險與收益的匹配性探討
13.2.9 進一步完善海龜交易法則
附錄A ASCII碼表
附錄B GPU支持的內(nèi)置函數(shù)
附錄C GPU自定義函數(shù)
索引
參考文獻