http://www.matlabsky.com/thread-43937-1-1.html
 
《量化投资:以MATLAB为工具》连载(3)基础篇-N分钟学会MATLAB(下)
 
 
《量化投资:以MATLAB为工具》简介
         《量化投资:以MATLAB为工具》是由电子工业出版社(PHEI)下属旗舰级子公司——北京博文视点资讯有限公司出版的《量化投资与对冲基金丛书》之一,丛书主编为丁鹏博士,《量化投资:以MATLAB为工具》由李洋(faruto)、郑志勇(ArisZheng)编著,主要介绍MATLAB在量化投资中的具体应用。该书预计2014年10月上市,欢迎大家多多支持。在书籍上市之前,会在中国量化投资学会的各种网络平台进行系列连载介绍,方便读者提前一窥书籍概要。
 
《量化投资:以MATLAB为工具》连载(3)基础篇-N分钟学会MATLAB(下)
 
引言
         之所以采用下文这种Q&A的形式来作为《量化投资:以MATLAB为工具》的基础篇,是想让刚刚接触MATLAB的读者能快速有效地了解MATLAB,毕竟在一个注重时间效率的年代大家更喜欢速成的东西。
         本篇形式上参考了刘思喆老师的《153分钟学会R》,当然内容方面结合了MATLAB本身的特色,本篇的内容来源多样,既有来自于MATLAB的官方帮助文档,也有来自我个人的一些总结,还有若干来自MATLAB技术论坛(http://www.matlabsky.com)的讨论问题。
         MATLAB是一个非常庞大的体系,其官方工具箱就有数十种,内部函数有数百个,可以说学习MATLAB是一件没有尽头的事情。
         想来自己接触MATLAB已经有快10年的时间了,在学习MATLAB的道路上接触很多志同道合的朋友,希望这篇简单的“N分钟学会MATLAB(60<N<180)”能成为你认识、学习MATLAB的好助手。
                                                                                                                                                     李洋(faruto)
 
数学运算
(1)    如何模拟高斯(正态)分布数据?
         使用random('Normal',Mean_Value, STD_Value, N, M)可以产生N*M个来自于均值为Mean_Value,标准差为STD_Value的高斯(正态)分布数据。
         其中'Normal'是个参数选项,改变这个参数也可以生成其他的分布数据(相应地后面的分布的参数也需要修改),主要的分布有
表0- 1:主要分布及其参数名字
参数
分布名称

'beta' or 'Beta'

Beta Distribution

'bino' or 'Binomial'

Binomial Distribution

'chi2' or 'Chisquare'

Chi-Square Distribution

'exp' or 'Exponential'

Exponential Distribution

'ev' or 'Extreme Value'

Extreme Value Distribution

'f' or 'F'

F Distribution

'gam' or 'Gamma'

Gamma Distribution

'gev' or 'Generalized Extreme Value'

Generalized Extreme Value Distribution

'gp' or 'Generalized Pareto'

Generalized Pareto Distribution

'geo' or 'Geometric'

Geometric Distribution

'hyge' or 'Hypergeometric'

Hypergeometric Distribution

'logn' or 'Lognormal'

Lognormal Distribution

'nbin' or 'Negative Binomial'

Negative Binomial Distribution

'ncf' or 'Noncentral F'

Noncentral F Distribution

'nct' or 'Noncentral t'

Noncentral t Distribution

'ncx2' or 'Noncentral Chi-square'

Noncentral Chi-Square Distribution

'norm' or 'Normal'

Normal Distribution

'poiss' or 'Poisson'

Poisson Distribution

'rayl' or 'Rayleigh'

Rayleigh Distribution

't' or 'T'

Student's t Distribution

'unif' or 'Uniform'

Uniform Distribution (Continuous)

'unid' or 'Discrete Uniform'

Uniform Distribution (Discrete)

'wbl' or 'Weibull'
Weibull Distribution
 
字符操作
(2)    MATLAB对大小写敏感吗?
         MATLAB对大小写是敏感的,可以使用lower、upper等函数对字符进行转化。
 
(3)    如何在MATLAB中定义带引号的字符串?
         在MATLAB编程中,如果想得到的带有引号的字符串(字符串中本身带有引号),怎么实现?输入str = 'string' 得到的是
>> str = 'string'
str =
string
其中str里没有单引号,如果像下面这样
>> str = ''string' '
str = ' 'string' '
Error: Unexpected MATLABexpression.
又会出现报错,原因是MATLAB在进行匹配是一个单引号' 对一个单引号 '。如果字符串中有单引号,还按照一般的方式进行输入就会造成匹配的错误,就上面那个错误提示了。正确的解决方式是:
>> str ='''string'''
str =
'string'
输入三个单引号就可以实现了。如果你想要双引号,比如 str = "string"此时就直接输入双引号就行了。
>> str = '"string" '
str =
"string"
注意:此时不是三个单引号,是一对单引号和一对双引号,放到MATLAB中能很容易的看清楚的。
 
绘图相关
(4)    如何在同一画面画出多张图?
         使用subplot函数可以在同一个画面画出多张图,见下例
figure;
income =[3.2,4.1,5.0,5.6];
outgo =[2.5,4.0,3.35,4.9];
 
subplot(2,1,1);
plot(income);
title('Income');
 
subplot(2,1,2);
plot(outgo);
title('Outgo');
运行结果
                      图0- 3:subplot函数运行样例
(5)    如何加图例?
         使用legend函数可以增加图例

figure;
income =[3.2,4.1,5.0,5.6];
outgo =[2.5,4.0,3.35,4.9];

subplot(2,1,1);
plot(income);
legend('sin1(x)','cos(x)')
title('Income');

subplot(2,1,2);
plot(income);
legend('sin(x)','cos(x)','Location','northwest')
title('Outcome');

(6)    怎么做饼图?
         pie函数可以制作二维的饼图,pie3函数可以制作三维的饼图,见下例
x = [1 3 0.5 2.5 2];
explode = [0 1 0 0 0];
 
figure;
subplot(2,1,1);
pie(x,explode);
title('二维饼图');
colormap jet
 
subplot(2,1,2);
pie3(x,explode);
title('三维饼图');
colormap hsv
运行结果
                        图0- 4:pie函数、pie3运行样例
 
数学、金融、统计相关
(7)    有没有直接计算峰度和偏度的函数?
         使用skewness和kurtosis函数可以直接计算峰度和偏度
 
(8)    如何利用MATLAB获取免费的金融数据
         MATLAB有一个数据获取工具箱(DatafeedToolbox),Datafeed Toolbox提供从主要的金融数据提供商出获取当前的、当天的、历史的和实时市场数据的工具。将金融数据域MATLAB集成起来,用户可开发实时模型反应当前金融市场行为。这个工具箱也提供导出MATLAB数据到数据服务提供商的函数。用户可建立从MATLAB到数据服务提供商提供的历史数据或者预定实时数据流的连接。证券查找对话框可以使工程师在 MATLAB 环境中查找指定证券的代码(仅针对Bloomberg)。工程师可以使用证券的简要缩写码和代码来表示一个证券。
         DatabaseToolbox支持如下的金融数据服务提供商:
Bloomberg®
eSignal
Factset®
Federal Reserve Economic Data (FRED)
Haver Analytics
Interactive Data
Kx Systems®
Reuters® Market Data System
Thomson® Datastream
Yahoo!® Finance
         其中雅虎财经(YahooFinance)的数据接口是完全免费的,你可以免费从雅虎财经下载全球的股票与期货数据进行建模测试,比如下载中国股市的数据,你只需知道相应股票的代码(在Yahoo Finance中上海证券交易所股票代码后需要加一个“.SS”,深圳证券交易所股票代码后需要加一个.SZ),见下例,获取三友化工(600409.SS 三友化工 Sanyou Chemical)在某一时段的股票日收盘数据数据,
conn = yahoo;
test =fetch(conn,{'600409.SS'},{'Close'},'08/01/13','08/08/13','d');
 
d = fints(test(:,1),test(:,2), 'Close', 'D', '600409.SS_Close')
 
close(yahoo)
运行结果
d =
 
    desc: 600409.SS_Close
    freq: Daily (1)
 
    'dates: (6)'    'Close:  (6)'
    '01-Aug-2013'    [    4.2100]
    '02-Aug-2013'    [    4.2100]
    '05-Aug-2013'    [    4.3200]
    '06-Aug-2013'    [    4.3900]
    '07-Aug-2013'    [    4.3500]
    '08-Aug-2013'    [    4.3600]
         上述操作也可以使用在DatafeedToolbox GUI界面上完成,在MATLAB命令窗口(Commond Window)键入dftool可以调出Datafeed Toolbox GUI界面
file:///C:/Users/faruto/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
图0- 17:Datafeed Toolbox GUI界面
(9)    利用MATLAB可以实现支持向量机(SVM)模型吗?
         较新版本的MATLAB中有svmtrain、svmclassfity等函数可以实现SVM,但笔者更推荐使用LIBSVM工具箱,这个工具箱是个第三方工具箱,由台湾大学林智仁(Lin Chih-Jen)教授等开发设计,该工具箱用于实现SVM模型更加方便自由。
         更多关于SVM的理论和应用方面的知识可以查看下面的免费视频链接进行学习:
支持向量机(SVM)相关免费学习视频集锦
http://www.matlabsky.com/thread-36823-1-1.html
 
(10)    如何计算一个资金流的最大回撤?
         根据最大回撤的定义:
Equity为资金流,在索引(下标)Index处,可以找出之前的资金流的最大值,设该最大值为Max,如果Index处的资金流就为这个最大值,则Index处的最大回撤为0,否则Index处的最大回撤( Equtity(Index)-Max )/Max。
         下面的RetraceRatio.m函数可以实现最大回撤的计算。
function[DrawDownPercent,DrawDownAbs] = RetraceRatio(Equity)
% 计算最大回撤比例
% by liyang 2012/5/25
%% 初始化
len = numel(Equity);
DrawDownPercent =zeros(len, 1);
DrawDownAbs = zeros(len,1);
%% 计算最大回撤比例
C = Equity(1);
for i = 2:len
    C = max(Equity(i),C);
    if C == Equity(i)
        DrawDownPercent(i) = 0;
    else
        DrawDownPercent(i) = (Equity(i)-C)/C;
    end
end
%% 计算最大回撤绝对数值
C = Equity(1);
for i = 2:len
    C = max(Equity(i),C);
    if C == Equity(i)
        DrawDownAbs(i) = 0;
    else
        DrawDownAbs(i) = (Equity(i)-C);
    end
end
         下面使用该函数计算一下某一资金流(权益)的最大回撤,见下例
load FundMarketCash
fund = TestData(:,1);
 
[DrawDownPercent,DrawDownAbs]= RetraceRatio(fund);
 
figure;
subplot(3,1,1:2);
plot(fund);
xlim([1 length(fund)]);
title('Fund','FontWeight', 'Bold');
 
subplot(313);
plot( DrawDownPercent );
xlim([1 length(fund)]);
title('最大回撤比例', 'FontWeight','Bold');
运行结果
                           图0- 18:最大回撤图形展示
 
其他
 
(11)    Cell编程模式(CellMode)是什么?
         在MATLAB文件编辑器(Editor)中,开启Cell编程模式(CellMode)后,可以使用两个分号“%%”将代码分块展示,也可以直接插入HTML代码和Latex代码等进行代码注释和讲解。
 
(12)    MATLAB可以用网页显示结果么?
         可以。在MATLAB文件编辑器(Editor)中,选择File->Publish可以直接生成代码以及测试结果的网页,结合Cell编程模式(Cell Mode)可以直接生成精美的网页方便代码以及测试结果的交流分享,下图为本文档的相应代码和测试结果生成的网页截图。
file:///C:/Users/faruto/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg
图0- 19:Publish网页截图
 
 
 


 
更多内容参见《量化投资:以MATLAB为工具》。
         该书预计2014年10月上市。
书籍交流论坛:MATLAB技术论坛读书频道《量化投资:以MATLAB为工具》专版,地址:http://www.matlabsky.com/forum-112-1.html
 
 
《量化投资:以MATLAB为工具》基础篇-N分钟学会MATLAB 文档、代码、数据下载地址
         《量化投资:以MATLAB为工具》基础篇部分(N分钟学会MATLAB)的相关文档、代码、数据已经完全免费开源共享,欢迎下载。
百度网盘下载地址:
 
作者简介
李洋(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

《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)的更多相关文章

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

    http://blog.sina.com.cn/s/blog_4cf8aad30102uylf.html <量化投资:以MATLAB为工具>连载(1)基础篇-N分钟学会MATLAB(上) ...

  2. 推荐学习《Python与量化投资从基础到实战》PDF及代码+《量化投资以Python为工具》PDF及代码

    利用python分析量化投资问题是现在研究的热点,推荐两份资料用于学习 <Python与量化投资:从基础到实战>主要讲解如何利用Python进行量化投资,包括对数据的获取.整理.分析挖掘. ...

  3. PostMan工具使用之基础篇

    PostMan工具使用之基础篇 一.什么是PostMan Postman一款非常流行的API调试工具.(其他测试工具 Jmeter.soapUI) 二.下载及安装: 1.下载: 下载地址:https: ...

  4. 项目管理构建工具——Maven(基础篇)

    项目管理构建工具--Maven(基础篇) 在前面的内容中我们学习了JDBC并且接触到了jar包概念 在后面我们的实际开发中会接触到很多jar包,jar包的导入需要到互联网上进行就会导致操作繁琐 Mav ...

  5. 量化投资学习笔记07——python知识补漏

    看<量化投资:以python为工具>这本书,第一部分是python的基础知识.这一部分略读了,只看我还不知道或不熟的. 定义复数 x = complex(2, 5) #2+5j 也可以直接 ...

  6. 量化投资技术分析工具---ipython使用

    量化投资实际上就是分析数据从而做出决策的过程python数据处理相关模块NumPy:数组批量计算pandas:灵活的表计算Matplotlib:数据可视化 学习目标:用NumPy+pandas+Mat ...

  7. python书籍推荐:量化投资:以Python为工具

    所属网站分类: 资源下载 > python电子书 作者:mimi 链接:http://www.pythonheidong.com/blog/article/451/ 来源:python黑洞网 内 ...

  8. Python金融应用编程(数据分析、定价与量化投资)

    近年来,金融领域的量化分析越来越受到理论界与实务界的重视,量化分析的技术也取得了较大的进展,成为备受关注的一个热点领域.所谓金融量化,就是将金融分析理论与计算机编程技术相结合,更为有效的利用现代计算技 ...

  9. 1、量化投资—为什么选择Python?

    Python在量化领域的现状 就跟Java在web领域无可撼动的地位一样,Python也已经在金融量化投资领域占据了重要位置,从各个业务链条都能找到相应的框架实现. 在量化投资(证券和比特币)开源项目 ...

随机推荐

  1. 同步、更新、下载Android Source & SDK from 国内镜像站(转载)

    同步.更新.下载Android Source & SDK from 国内镜像站 转自: 同步.更新.下载Android Source & SDK from 国内镜像站 Download ...

  2. Sizeof面试题

    sizeof()功能:计算数据空间的字节数1.与strlen()比较      strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素.       ...

  3. POJ 3233 Matrix Power Series(矩阵等比求和)

    题目链接 模板题. #include <cstdio> #include <cstring> #include <iostream> #include <ma ...

  4. ZeroMQ接口函数之 :zmq_setsockopt –设置ZMQ socket的属性

    ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html 本文地址 :http://www.cnblogs.com/fengbo ...

  5. java实现图像灰度化

    /*在研究Java实现将一张图片转成字符画的时候,发现将图像转化字符串是根据照片的灰度采用不同的字符画出来,形成一个灰度表.于是就研究了下关于灰度值这个东西,于是跳了一个大坑...因为鄙人用的ubun ...

  6. Daily Scrum02 12.10

    不同于往常,今天我们在中午体育课后,就简单的进行了一次小组会议,主要是讨论了一下,我们的单词软件的查询功能的优化的进度与暂时达到的效果,界面的各个按钮等元素的素材的准备有点拖慢,由于要反复修改,查看效 ...

  7. Bootstrap个人总结

    Bootstrap框架 1.以栅栏式布局,分12列,16列,24列和32列,常用12列. 2.整个页面必须在container容器内部 3.移动端以 <meta name="viewp ...

  8. ubuntu14.04下安装ngnix,mediawiki,nodebb,everything,gitlab

    本周折腾了以下几个东西,mediawiki(维基),nodebb(论坛),gitlab(私有git服务器). 本来的目的是搭建一个wiki,选用了mediawiki后,使用apache搭建好了. 搭论 ...

  9. JavaScript之数组方法整理

    Array概述      除了Object类型,最常用的类型:      实质:有序的数据列表,      特性:可以动态的调整数组的大小 创建数组的两种方式 构造函数创建方式  var arr = ...

  10. jQuery基础,定时器,工厂函数

    这个星期刚刚学的JQuery,下面我来说说我学的这几个例子 jQuery是JavaScript的一个程序库. Jquery的工厂函数$(): 在Jquery中 $符号等价于jquery,作用是将DOM ...