http://blog.sina.com.cn/s/blog_4cf8aad30102uylf.html
《量化投資:以MATLAB為工具》連載(1)基礎篇-N分鐘學會MATLAB(上)
?《量化投資:以MATLAB為工具》簡介
?????????《量化投資:以MATLAB為工具》是由電子工業出版社(PHEI)下屬旗艦級子公司——北京博文視點資訊有限公司出版的《量化投資與對沖基金叢書》之一,叢書主編為丁鵬博士,《量化投資:以MATLAB為工具》由李洋(faruto)、鄭志勇(ArisZheng)編著,主要介紹MATLAB在量化投資中的具體應用。該書預計2014年10月上市,歡迎大家多多支持。在書籍上市之前,會在中國量化投資學會的各種網絡平臺進行系列連載介紹,方便讀者提前一窺書籍概要。
?
《量化投資:以MATLAB為工具》連載(1)基礎篇-N分鐘學會MATLAB(上)
?
引言
?????????之所以采用下文這種Q&A的形式來作為《量化投資:以MATLAB為工具》的基礎篇,是想讓剛剛接觸MATLAB的讀者能快速有效地了解MATLAB,畢竟在一個注重時間效率的年代大家更喜歡速成的東西。
?????????本篇形式上參考了劉思喆老師的《153分鐘學會R》,當然內容方面結合了MATLAB本身的特色,本篇的內容來源多樣,既有來自于MATLAB的官方幫助文檔,也有來自我個人的一些總結,還有若干來自MATLAB技術論壇(http://www.matlabsky.com)的討論問題。
?????????MATLAB是一個非常龐大的體系,其官方工具箱就有數十種,內部函數有數百個,可以說學習MATLAB是一件沒有盡頭的事情。
?????????想來自己接觸MATLAB已經有快10年的時間了,在學習MATLAB的道路上接觸很多志同道合的朋友,希望這篇簡單的“N分鐘學會MATLAB(60”能成為你認識、學習MATLAB的好助手。
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????李洋(faruto)
?
基礎知識
?
(1)?????MATLAB是做什么的?為什么MATLAB叫做MATLAB?
?????????MATLAB是美國MathWorks公司出品的商業數學軟件,用于算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境,主要包括MATLAB和Simulink兩大部分。
?????????MATLAB是Matrix和Laboratory兩個詞的組合,意為矩陣工廠(矩陣實驗室),之所以叫做矩陣工廠(矩陣實驗室),是因為MATLAB的基本數據單位是矩陣。
?
(2)?????MathWorks公司的創始人是誰?
Cleve Moler和Jack Little是MathWorks公司的創始人。其中Cleve Moler是MATLAB首個版本的開發者,Jack Little是信號處理工具箱和控制系統工具箱早期版本的共同開發者和首席架構師。
?
(3)?????我是新手,我如何開始學習MATLAB?
如果你的英文閱讀還算可以,那么MATLAB官方的幫助文檔將是最好且最全面的學習材料,你可以通過在MATLAB的命令窗口(Command Window)中鍵入“doc”來調出MATLAB官方的幫助文檔,或者你也可以在MathWorks公司的官方網站的文檔中心(http://www.mathworks.cn/cn/help/documentation-center.html)中查看在線的MATLAB官方幫助文檔。
另外MathWorks公司的官方網站的用戶中心(http://www.mathworks.cn/matlabcentral/)中有一些MATLAB相關問題的討論以及一些MATLAB大牛的博客,其中包括Cleve Moler的博客——Cleve's Corner(http://blogs.mathworks.com/cleve),在MATLAB用戶中心你可以學習MATLAB。
MATLAB技術論壇(http://www.matlabsky.com)是一個不錯的學習MATLAB的中文網站,本書的作者之一李洋(faruto)是MATLAB技術論壇核心管理團隊的成員之一,在這個論壇里你可以找到大量的學習資料(代碼、數據、視頻等)或直接提出問題同大家討論。
當然,你也可以購買一些MATLAB相關的中外文書籍進行學習。
?
(4)?????使用MATLAB需要很厲害的編程能力嗎?
?????????大多數時候并不需要,因為MATLAB有很多的函數和工具箱,官方的工具箱還有數十種,第三方的工具箱不計其數而且每天都在增加,你用到的一般方法和函數都可以在MATLAB的工具箱中找到。
?
(5)?????能否簡單舉一個MATLAB的例子?
生成100個高斯(正態)分布隨機數,并對這100個數進行特征描述。
MATLAB代碼
Mean_Value = 0;
STD_Value = 1;
Data_Num = 100;
?
x = random('Normal', Mean_Value, STD_Value, Data_Num, 1);
x_dataset = dataset(x);
?
whos
mean_x = mean(x)
std_x = std(x)
summary(x_dataset)
運行結果(由于是生成隨機數,多次運行結果可能不同。)
??Name??????????????Size????????????Bytes??Class??????Attributes
?
??Data_Num??????????1x1 ????????????????8??double??????????????
??Mean_Value????????1x1?????????????????8??double??????????????
??STD_Value?????????1x1?????????????????8??double??????????????
??x???????????????100x1???????????????800??double??????????????
??x_dataset????????????100x1??????????????2300??dataset?????????????
?
mean_x =
???-0.0684
std_x =
????0.9568
x: [100x1 double]
????min????????1st quartile????median???????3rd quartile????max??
????-2.8216????-0.7437?????????-0.088884????0.63638?????????2.3738
?
(6)?????如何查看使用的MATLAB的版本信息以及內存信息?
?????????以通過在MATLAB的命令窗口(Command Window)中鍵入“version”和“memory”來查看所使用的MATLAB版本信息和內存信息。
運行結果(由于MATLAB版本的不同以及電腦配置的不同,運行結果可能不同。)
>> version
ans =
7.14.0.739 (R2012a)
>> memory
Maximum possible array:?????????????444 MB (4.659e+08 bytes) *
Memory available for all arrays:???1190 MB (1.248e+09 bytes) **
Memory used by MATLAB:??????????????427 MB (4.476e+08 bytes)
Physical Memory (RAM):?????????????3327 MB (3.489e+09 bytes)
?
*??Limited by contiguous virtual address space available.
** Limited by virtual address space available.
?
(7)?????MATLAB支持中文嗎?
?????????支持!但在MATLAB中,有相當一部分工具箱的作者都是以英文為母語的,故建議熟練全英文環境。
?
(8)?????MATLAB支持自動補全(Tab Completion)么?
?????????支持!在較新版本中,MATLAB引入了命令自動補全功能,使用Tab鍵能自動補全MATLAB命令或給出所有可能的補全命令列表。
?
(9)?????MATLAB有哪些常用的熱鍵?
?????????MATLAB除了支持常見的Windows熱鍵(復制:Ctrl+C,剪切:Ctrl+X,粘貼:Ctrl+P等等),在MATLAB文件編輯器(Editor)中,還有如下一些常見的熱鍵:
F5:運行當前的M文件;
F9:運行選中的代碼段;
Ctrl+R:注釋選中的代碼段;
Ctrl+T:反注釋選中的代碼段;
Ctrl+I:將選中的代碼段智能縮進調整。
?
(10)?????如何清除變量?
使用clear命令可以清除工作空間(Workspace)中的所有變量,清除工作空間(Workspace)名字為name的變量,使用clear name命令。
?
(11)?????如何清空命令窗口(Command Window)?
使用clc命令可以清空命令窗口(Command Window)。
?
(12)?????MATLAB常用的數據類型有哪些?
MATLAB支持的基本數據類型有基本數值類型、字符串、元胞數組、結構、函數句柄、Java對象、邏輯類型等等。
?????????其中基本數值類型包括基本數值類型包括雙精度類型、單精度類型、整數類型等。
?
(13)?????如何查看函數的代碼?
MATLAB文件編輯器(Editor)菜單欄中可以使用file->Open直接打開相關M文件查看源碼,或者也可以只用edit函數打開,比如
edit mean;
會直接打開求均值函數mean查看源碼:
function y = mean(x,dim)
%MEAN???Average or mean value.
%???For vectors, MEAN(X) is the mean value of the elements in X. For
%???matrices, MEAN(X) is a row vector containing the mean value of
%???each column.??For N-D arrays, MEAN(X) is the mean value of the
%???elements along the first non-singleton dimension of X.
%
%???MEAN(X,DIM) takes the mean along the dimension DIM of X.
%
%???Example: If X = [1 2 3; 3 3 6; 4 6 8; 4 7 7];
%
%???then mean(X,1) is [3.0000 4.5000 6.0000] and
%???mean(X,2) is [2.0000 4.0000 6.0000 6.0000].'
%
%???Class support for input X:
%??????float: double, single
%
%???See also MEDIAN, STD, MIN, MAX, VAR, COV, MODE.
?
%???Copyright 1984-2009 The MathWorks, Inc.
%???$Revision: 5.17.4.5 $??$Date: 2010/09/02 13:35:22 $
?
if nargin==1,
??% Determine which dimension SUM will use
??dim = find(size(x)~=1, 1 );
??if isempty(dim), dim = 1; end
?
??y = sum(x)/size(x,dim);
else
??y = sum(x,dim)/size(x,dim);
end
?
(14)?????MATLAB里面可以使用科學計數法么?
可以。
1e10 = 1000000000
1.2e-4 = 0.00012
?
?
更多內容參見《量化投資:以MATLAB為工具》。
?????????該書預計2014年10月上市。
書籍交流論壇:MATLAB技術論壇讀書頻道《量化投資:以MATLAB為工具》專版,地址:http://www.matlabsky.com/forum-112-1.html
?
《量化投資:以MATLAB為工具》基礎篇-N分鐘學會MATLAB?文檔、代碼、數據下載地址
?????????《量化投資:以MATLAB為工具》基礎篇部分(N分鐘學會MATLAB)的相關文檔、代碼、數據已經完全免費開源共享,歡迎下載。
百度網盤下載地址:
http://pan.baidu.com/share/link?shareid=1036543686&uk=1761970726
?
作者簡介
李洋(faruto),中國量化投資學會專家委員會成員,MATLAB技術論壇(www.matlabsky.com)聯合創始人,北京師范大學應用數學碩士,先后就職于私募、期貨公司、保險公司,從事量化投資相關工作。十年MATLAB編程經驗,對機器學習、量化投資等相關領域有深入研究,已出版《MATLAB神經網絡30個案例分析》和《MATLAB神經網絡43個案例分析》等書籍。
郵箱:farutoliyang@foxmail.com
微博:http://weibo.com/faruto
鄭志勇(Ariszheng),中國量化投資學會專家委員會成員,方正富邦基金產品總監,北京理工大學運籌學與控制論碩士,先后就職于中國銀河證券、銀華基金、方正富邦基金,從事金融產品研究與設計工作。十余年MATLAB編程經驗,專注于產品設計、量化投資等相關領域的研究,尤其對于各種結構化產品、分級基金產品有著深入的研究,已出版《運籌學與最優化MATLAB編程》和《金融數量分析:基于MATLAB編程》等書籍。
郵箱:ariszheng@gmail.com
微博:http://weibo.com/ariszheng