加载中…

加载中...

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

《量化投资:以MATLAB为工具》连载(6)K线图以及常用技术指标的MATLAB实现

(2014-09-03 22:59:26)
标签:

matlab

quant

金融

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

《量化投资:以MATLAB为工具》连载(6)K线图以及常用技术指标的MATLAB实现

 

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

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

 

《量化投资:以MATLAB为工具》连载(6)K线图以及常用技术指标的MATLAB实现

 

技术分析是指研究过去金融市场的资讯(主要是经由使用图表)来预测价格的趋势与决定投资的策略。纯理论上,技术分析只考虑市场或金融工具真实的价格行为,在假设其价格会反应所有在投资者经由其他渠道得知前的所有相关因素的前提之下。技术分析是与基本面分析相对应的一种证券交易分析方法,也是实际操作中运用最多的分析方法之一。关于利用技术分析进行市场交易的有效性问题,无论在学术界和实务界历来都争议不断,姑且不论其最终结果如何,但就从实际操作中来看,较好地理解和运用技术分析,对于实现投资收益、减小波动风险都是十分有意义的。

从实际运用的角度来看,不同的技术分析方法,不论其产生的历史背景和基本原理如何,都是在证券交易的价量等历史资料基础上,通过统计分析、数学计算乃至绘制图表等方法的处理,最终用来预测各种证券未来价格走势,从而为投资决策服务。一般来说,可以将技术分析方法分为5类:K线类、指标类、切线类、形态类、波浪类。

在技术分析中,K线图分析无疑是最基本但也是最重要的,K线是构成其他复杂技术指标的基础,同时单纯K线以及K线组合的分析也是技术分析很重要的一个组成部分。K线图源于日本德川幕府时代(16031867年),被当时日本米市的商人用来记录米市的行情与价格波动,后因其细腻独到的标画方式而被引入到股市及期货市场。所谓K线图,就是将某一金融标的在某一周期内的开盘价、收盘价、最高价、最低价等涨跌变化状况,用图形的方式表现出来。K线图具有直观、立体感强、携带信息量大的特点,预测后市走向较准确,是现今应用较为广泛的技术分析手段。本章将会介绍如何使用MATLAB来绘制K线图。

技术指标是技术分析中使用最多的一种方法,通过考虑市场行为的多个方面建立一个数学模型,并给出完整的数学计算公式,从而得到一个体现证券市场的某个方面内在实质的数字,即所谓的技术指标值。指标值的具体数值和相互间关系直接反映证券市场所处的状态,为我们的操作行为提供指导方向。本章会介绍并实现一些常见的技术指标。

 

K线图的MATLAB实现

MATLAB的金融工具箱中(Financial Toolbox)中有一个内置的函数candle可以进行K线图的绘制,其使用语法如下。

candle(HighPrices, LowPrices, ClosePrices, OpenPrices)

candle(HighPrices, LowPrices, ClosePrices, OpenPrices, Color, Dates, Dateform)

candle(tsobj)

candle(tsobj, color)

candle(tsobj, color, dateform)

candle(tsobj, color, dateform, ParameterName, ParameterValue, ...)

hcdl = candle(tsobj, color, dateform, ParameterName, ParameterValue, ...)

其中上面前两个语法是输入开盘价、收盘价、最高价、最低价后进行K线图的绘制,后五个语法是专门针对MATLAB的金融时序数据(ftsfinancial time series)格式设计的形式。

下面是candle函数的使用例子,使用的测试数据是MATLAB内置的测试数据。

load disney;

scrsz = get(0,'ScreenSize');

figure('Position',[scrsz(3)*1/4 scrsz(4)*1/6 scrsz(3)*4/5 scrsz(4)]*3/4);

 

candle(dis_HIGH(end-20:end), dis_LOW(end-20:end), dis_CLOSE(end-20:end),...

dis_OPEN(end-20:end), 'b');

title('K线图Demo-MATLAB内置函数candle实现', 'FontWeight','Bold', 'FontSize', 15);

运行结果如下图

《量化投资:以MATLAB为工具》连载(6)K线图以及常用技术指标的MATLAB实现

说明: CandleDemo

5- 1candle函数运行样例

更多关于candle函数的用法这里不打算详细介绍,因为实际使用中当进行大数据量化绘图时,candle函数运行速度较慢,且candle函数无法灵活的分别设置阴线和阳线的颜色,这里更加推荐自己编写相关函数进行K线图的绘制,见下一小节。

 

… …

 

常用技术指标的MATLAB实现

 

… …

 

自适应移动平均线,又叫做卡夫曼自适应移动平均线,该均线系统最早出现在卡夫曼(Perry J.Kaufman)的《精明交易者》(《Smarter Trading》)这本书书中,自适应移动平均线与指数移动平均线的定义类似,也是采用递归形式定义,只不过其平滑系数(平滑指数)不是固定不变的,是动态变动的,体现了“自适应”的因为,自适应移动平均线的具体算法过程如下。

步骤1:价格方向

价格方向被表示为整个时间段中的净价格变化。比如,使用n天的间隔(或n小时):

direction = price – price[n];

其中,direction是当前价格差或方向数值,price是当前价格(当日收盘价或小时收盘价),price[n]n日前的收盘价(或n个周期前)。

步骤2:波动性

波动性是市场噪音的总数量,它可以用许多不同的方法定义,但是这个计算使用了所有“日到日”或“小时到小时”的价格变化的总和(每一个都作为一个正数),在同样的n个周期上。

如下表达:

volatility = @sum(@abs(price – price[1]), n);

其中,volatility是指今日的波动性数值,@abs是绝对值函数,@sum(value, n)n个周期中的数值之和函数。

步骤3:效率系数(ER

以上两个成分被组合起来,以表达方向移动对噪音之比,称之为效率系数,ER

Efficiency_Ratio = direction/volativity;

用“方向性”除以“噪音”,该系数的值就从01 变化。当市场在全部n日以同一方向移动时,则方向=波动性,效率系数=1。如果波动对于同样的价格移动是增加了,“波动性”就变得较大并且ER往小于1的方向移动。如果价格不变化,则方向=0ER=0

这个结果作为一个指数式平滑系数是方便的,它每天改变趋势线的一个百分比,ER=1就等效于100%,对应最快的移动平均线,它应当能有效工作,因为价格在一个方向上移动而没有回撤。当ER=0时,一个非常慢的移动平均值是最好的,可以在市场趋势不明时避免贸然止损离场。

步骤4:变换上述系数为趋势速度

为了应用于一个指数式移动平均值,比率将被变换为一个平滑系数c,依靠下面的公式,每天的均线速度可以简单地用改变平滑系数来改变,成为自适应性的。该公式如下:

EXPMA = EXPMA[1] + c*(price – EXPMA[1]);

测试表明,平方平滑系数的数值大大地改进了结果,这是依靠在一个横盘的市场中阻止了趋势线的移动。在横盘的市场中这个过程选择了非常慢的趋势,而在高度趋势化的周期中加速至非常快的趋势(但不是100%)。这个平滑系数是:

fastest = 2/(N+1) = 2/(2+1) = 0.6667;

slowest = 2/(N+1) = 2/(30+1) = 0.0645;

smooth = ER*(fastest - slowest) + slowest;

c = smooth*smooth;

平方平滑系数迫使c的数值趋向于零。这意味着较慢的移动平均线将比快速移动平均值用得更多。这和在出现不确定状况时你就更加保守是一样的道理。

AMA = AMA[1] + c*(price – AMA[1]);

自调节式过滤器设计

为了与系统的自适应特性相一致,当价格波动变得更多或更少时,过滤器也要相应取较大或较小值。为了完成这点,过滤器被定义为AMA变化的一个小的百分数:

过滤器= percentage*@std(AMA-AMA[1], n);

其中,@std(series, n)是价格系列n个周期的标准差。

最小的过滤器百分数0.1可被用于较快的交易,而较大的百分数1.0将可以选择出更有意义的价格移动的交易。典型例证是:外汇和期货市场交易较快,股票和利率市场交易较慢。通常,过滤器大小是依据20天周期的数据来计算。

向交易规则中添加过滤器

AMA-@lowest(AMA, n) > 过滤器,买入;

@highest(AMA, n)AMA > 过滤器,卖出。

 

上面的自适应移动平均线的算法过程描述不但给出了自适应移动平均线的定义,也给出了基于自适应移动平均线开发交易系统的一个大体框架。通过上面可以看出,自适应移动平均线的关键是效率系数的定义,通过效率系数可以描述当下市场的趋势性强弱,进而通过效率系数来计算平滑系数(平滑指数),可以给出调整均线的快慢程度,自适应的跟随市场的趋势。

根据自适应移动平均线的定义,可以编写函数进行实现。

《量化投资:以MATLAB为工具》连载(6)K线图以及常用技术指标的MATLAB实现

说明: AMAdemo

这里要说明的是,不同的均线各有利弊,不能说哪种均线就一定是最佳的,包括自适应移动均线,当盘整行情到来说,如果均线参数选择的不适当,任何一种均线都会一定程度的失效,无法有效的捕捉行情。对于每种均线,一定要深入了解相应均线的定义以及其适用条件,尽量发挥相应均线的优势。

 

 

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

         该书预计201410月上市。

书籍交流论坛:MATLAB技术论坛读书频道《量化投资:以MATLAB为工具》专版,地址:http://www.matlabsky.com/forum-112-1.html

 

作者简介

李洋(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 | 会员注册 | 产品答疑

    新浪公司 版权所有