加载中…

加载中...

个人资料
faruto
faruto 新浪个人认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,143,192
  • 关注人气:2,115
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)

(2014-08-13 16:43:03)
标签:

matlab

quant

程序化

量化投资

ctp

分类: 量化投资:以MATLAB为工具

《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)

 

 

《量化投资:以MATLAB为工具》简介

         《量化投资:以MATLAB为工具》是由电子工业出版社(PHEI)下属旗舰级子公司——北京博文视点资讯有限公司出版的《量化投资与对冲基金丛书》之一,丛书主编为丁鹏博士,《量化投资:以MATLAB为工具》由李洋(faruto)、郑志勇(ArisZheng)编著,主要介绍MATLAB在量化投资中的具体应用。该书预计201410月上市,欢迎大家多多支持。在书籍上市之前,会在中国量化投资学会的各种网络平台进行系列连载介绍,方便读者提前一窥书籍概要。

 

《量化投资:以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)     如何删掉缺失值?

MATALB中使用NaNNot-a-Number)表示缺失值,

A = [1 NaN 3]

判断矩阵(向量)某一元素是否为NaN时不能使用如下方式:

A(2) == NaN

需要使用isnan函数,使用如下方式可以删除缺失值:

A( isnan(A) ) = []

运行结果

A =

        3

可以看到缺失值已经被删除了。

 

(2)     如何将字符串转变为命令执行?

使用eval函数可以将字符串转变为命令执行,参考下例:

A = 3;

B = 5;

 

string = [num2str(A),'+',num2str(B)]

 

eval_r(string);

运行结果

string =

3+5

ans =

     8

         有时候巧妙的使用eval函数会使某些程序实现起来更加方便灵活。

 

(3)     如何向一个向量追加元素?

这在MATLAB中实现非常容易,见下例

A = [1 2 3 4]

 

A(end+1) = 5

运行结果

A =

              4

A =

                 5

 

(4)     如何移除矩阵的某行(列)数据?

涉及到MATLAB中矩阵的一些操作,见下例

A = magic(5)

B = A;

C = A;

 

B(5,:) = []

C(:,5) = []

运行结果

A =

    17    24          15

    23          14    16

          13    20    22

    10    12    19    21     3

    11    18    25        9

B =

    17    24          15

    23          14    16

          13    20    22

    10    12    19    21     3

C =

    17    24        8

    23          14

          13    20

    10    12    19    21

    11    18    25     2

 

(5)     如何比较两个矩阵是否相同呢?

比较每个元素是否相同,如果每个元素都相同,那么这两个矩阵也相同,可以使用循环来达到这一目的,但使用all函数可以更方便的实现这一目的,all函数会检查一个矩阵的每一列是否都为非零或者逻辑真,见下例

A = magic(5)

B = A;

 

B(1) = 888

 

whetherAequalsB = all( all( A == B ) )

运行结果

A =

    17    24          15

    23          14    16

          13    20    22

    10    12    19    21     3

    11    18    25        9

B =

   888    24          15

    23          14    16

          13    20    22

    10    12    19    21     3

    11    18    25        9

whetherAequalsB =

     0

 

(6)     如何去掉数据中的重复元素?

参考unique函数,unique函数可以去掉矩阵中的重复元素。

A = [1 1 2 2 3 4 5 6 6]

 

A_unique = unique(A)

运行结果

A =

                             6

A_unique =

                    6

 

(7)     如何求数据的极值?

使用minmax函数可以求数据的极小值和极大值,见下例:

A = 1:10;

 

A_min = min(A)

 

A_max = max(A)

运行结果

A =

                               10

A_min =

     1

A_max =

    10

 

(8)     如何求矩阵最大()值并返回其行列号?

         主要有几种方式,见下面的实例

% 方法1

disp('方法1');

A=[0 17 50;-12 40 3;5 -10 2;30 4 3]

[C,I]=max(A(:))

[m,n]=ind2sub(size(A),I)

% 方法2

disp('方法2');

A=[0 17 50;-12 40 3;5 -10 2;30 4 3]

[M,I]=max(A)

[N,J]=max(M)

[I(J),J]

% 方法3

disp('方法3');

A=[0 17 50;-12 40 3;5 -10 2;30 4 3]

N=max(max(A))    %或者N=max(A(:))

[r,c]=find(N==A)

% 方法4

disp('方法4');

A=[0 17 50;-12 40 3;5 -10 2;30 4 3]

[Y_col,Ind_row]=max(A)   %每列的最大值及行号

[Y_row,Ind_col]=max(A')    %每行的最大值及列号

运行结果

方法1

A =

       17    50

   -12    40     3

      -10     2

    30        3

C =

    50

I =

     9

m =

     1

n =

     3

方法2

A =

       17    50

   -12    40     3

      -10     2

    30        3

M =

    30    40    50

I =

           1

N =

    50

J =

     3

ans =

        3

方法3

A =

       17    50

   -12    40     3

      -10     2

    30        3

N =

    50

r =

     1

c =

     3

方法4

A =

       17    50

   -12    40     3

      -10     2

    30        3

Y_col =

    30    40    50

Ind_row =

           1

Y_row =

    50    40       30

Ind_col =

              1

 

(9)     如何判断数据是否为数字?

参考isnumeric函数。

 

(10)     如何从一组数据中随机抽取数据?

使用randsrc函数可以从一组数据中按照指定概率随机抽取数据,其用法之一如下:

out = randsrc(m,n,[alphabet; prob])

意义是从alphabet数据中按照概率prob抽取数据生成一个m*n的矩阵,见下例

out = randsrc(5,5,[-3 -1 1 3; .2 .3 .3 .2])

即从[-3 -1 1 3]中抽取数据生成5*5的矩阵,并且使得-33出现的概率为0.2-11出现的概率为0.3,运行结果(由于是随机抽取数据,多次运行结果可能不同。)

out =

       -3       -1    -1

    -1       -1    -1    -1

                 1

       -3    -3    -3     3

             -1    -3

 

(11)     如何将数据标准化?

                   使用zscore函数可以将数据标准化,这里标准化的定义是将数据减去其均值再除以其标准差,见下例

x = [1 1 2 3 5 8 11]

 

Z = zscore(x)

 

Ztemp = ( x-mean(x) )./std(x)

运行结果

x =

                      11

Z =

   -0.8967   -0.8967   -0.6352   -0.3736    0.1495    0.9341    1.7187

Ztemp =

   -0.8967   -0.8967   -0.6352   -0.3736    0.1495    0.9341    1.7187

 

 

更多内容参见《量化投资:以MATLAB为工具》。

         该书预计201410月上市。

书籍交流论坛: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

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有