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

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 大小写是敏感的,可以使用 lowerupper 等函数对字符进行转化。
 
(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- 3subplot函数运行样例
(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- 4pie函数、pie3运行样例
 
数学、金融、统计相关
(7)    有没有直接计算峰度和偏度的函数?
          使用 skewnesskurtosis 函数可以直接计算峰度和偏度
 
(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

转载于:https://www.cnblogs.com/carl2380/p/6224683.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值