
证券市场的价格是复杂变化的,投资者在这个市场上进行投资时都要有一套方法来制定或选择投资策略进行投资.股票技术分析是以预测市场价格变化的未来趋势为目的,通过分析历史图表对市场价格的运动进行分析的一种方法.股票技术分析是证券投资市场中非常普遍应用的一种分析方法.本章节目标为使用MATLAB函数计算主要技术分析指标并绘图.
14.1理论简介
股票基本分析的目的是为了判断股票现行股价的价位是否合理并描绘出它长远的发展空间,而股票技术分析主要是预测短期内股价涨跌的趋势.通过基本分析我们可以了解应购买何种股票,而技术分析则让我们把握具体购买的时机.在时间上,技术分析法注重短期分析,在预测旧趋势结束和新趋势开始方面优于基本分析法,但在预测较长期趋势方面则不如后者.大多数成功的股票投资者都是把两种分析方法结合起来加以运用.他们用基本分析法估计较长期趋势,而用技术分析法判断短期走势和确定买卖的时机.
股票技术分析和基本分析都认为股价是由供求关系所决定.基本分析主要是根据对影响供需关系种种因素的分析来预测股价走势,而技术分析则是根据股价本身的变化来预测股价走势.技术分析的基本观点是:所有股票的实际供需量及其背后起引导作用的种种因素,包括股票市场上每个人对未来的希望、担心、恐惧等等,都集中反映在股票的价格和交易量上.
股票技术分析的理论基础是空中楼阁理论.空中楼阁理论是美国著名经济学家凯恩斯于1936年提出的,该理论完全抛开股票的内在价值,强调心理构造出来的空中楼阁.投资者之所以要以一定的价格购买某种股票,是因为他相信有人将以更高的价格向他购买这种股票.至于股价的高低,这并不重要,重要的是存在更大的笨蛋愿以更高的价格向你购买.精明的投资者无须去计算股票的内在价值,他所须做的只是抢在最大笨蛋之前成交,即股价达到最低点之前买进股票,而在股价达到最高点之后将其卖出.
14.2行情数据的K线图
14.2.1数据读取
技术分析的指标计算与绘图分析,以2010-2011年沪深300指数行情数据为例进行函数的编程与绘图.
沪深300指数存储在Hs300.xls文件中,通过使用xlsread函数进行数据的读取.
%读取数据
filename='HS300.xls';
[num,txt,raw] = xlsread(filename);
%txt的第一列为日期数据
Date=datenum(txt(4:length(txt),1));
%num列依次为{'开盘价','最高价','最低价','收盘价','成交量';}
OpenPrice=num(:,1);
HighPrice=num(:,2);
LowPrice=num(:,3);
ClosePrice=num(:,4);
Vol=num(:,5);
%存储数据在HS300Data.mat文件中
save HS300Data Date OpenPrice HighPrice LowPrice ClosePrice Vol
14.2.2蜡烛图(K线)
在MATLAB的Financial Toolbox的蜡烛图通过candle函数实现.candle图中,阳线为空心,阴线为实心.
函数语法:
candle(HighPrices, LowPrices, ClosePrices, OpenPrices, Color, Dates, Dateform)
输入参数:
HighPrices:最高价序列
LowPrices:最低价序列
ClosePrices:收盘价序列
OpenPrices:开盘价序列
Color:(可选)蜡烛图颜色,默认为蓝色
Dates:(可选)日期
Dateform:(可选)时间格式
函数输出为蜡烛(K线)图,程序为candleTest.m
%读取数据
load HS300Data
%画两个蜡烛图,一个是2010年的,一个2010年6月的
subplot(2,1,1)
%2010年的数据,根据时间数据的年份判断
Idx2010=find(year(Date)==2010);
candle(HighPrice(Idx2010), LowPrice(Idx2010), ClosePrice(Idx2010),...
时间格式为 月/年
title('2010年K线')
%2010年6月的K线
subplot(2,1,2)
%在2010年的时间数据中选取月份为6的数据
Idx=find(month(Date(Idx2010))==6);
Idx2010_06=Idx2010(Idx);
candle(HighPrice(Idx2010_06),LowPrice(Idx2010_06) ,ClosePrice(Idx2010_06), OpenPrice(Idx2010_06),[],Date(Idx2010_06),12);%时间格式为 月/年
title('2010年6月K线')
注释:如同行情软件一样,当K线图的密度较大时候,日K线的阳阴难以分别,如何实现周K线、月K线,需要原数据根据新的时间周期进行处理.
交易量数据可以使用bar()函数绘图candleTest2.m
%读取数据
load HS300Data
%画两个蜡烛图,一个是2010年的,一个2010年6月的
subplot(2,1,1)
%2010年的数据,根据时间数据的年份判断
Idx2010=find(year(Date)==2010);
candle(HighPrice(Idx2010), LowPrice(Idx2010), ClosePrice(Idx2010),...
时间格式为 月/年
title('2010年K线')
%2010年交易量
subplot(2,1,2)
bar(Date(Idx2010),Vol(Idx2010))
dateaxis('x',12)
%设置数据使得两个子图的X轴对齐
axis([Date(Idx2010(1)), Date(Idx2010(end)), 0, max(Vol(Idx2010))])
title('2010年交易量')
14.3技术指标计算
14.3.1移动平均线
移动平均线是应用最普遍的技术指标之一,它帮助交易者确认现有趋势、判断将出现的趋势、发现过度延生即将反转的趋势.移动平均线(MA)是以道琼斯的平均成本概念为理论基础,采用统计学中"移动平均"的原理,将一段时期内的股票价格平均值连成曲线,用来显示股价的历史波动情况,进而反映股价指数未来发展趋势的技术分析方法.它是道氏理论的形象化表述.
在MATLAB中计算移动平均线的函数为movavg.
函数语法:
画图:movavg(Asset, Lead, Lag, Alpha)
返回数据不画图:[Short, Long] = movavg(Asset, Lead, Lag, Alpha)
输入参数:
Asset:资产价格序列
Lead: Short移动平均线的周期,例如3天;
Lag: Long移动平均线的周期,例如20天;
Alpha:平均的方法,(默认)0为算术平均值,0.5为平方根权重加权平均值,1为线性加权平均值,2为平方加权平平均值
输出参数:
Short:Short移动平均线
Long:Long移动平均线
例如,以沪深300指数收盘价,Lead=3、Lag=20计算移动平均线,程序movavgTest.m
%%读取数据
load HS300Data
%计算移动平均值
Lead=3;
lag=20;
Alpha=0;
[Short, Long] = movavg(ClosePrice, Lead, lag, Alpha);
%画图
plot(Date,ClosePrice);
hold on
plot(Date(Lead:end),Short(Lead:end),'r--');
plot(Date(lag:end),Long(lag:end),'b.-');
dateaxis('x',12)
%标记线型
legend('ClosePrcie','ShortMovavg','LongMovavg')
%X轴名称
xlabel('date')
%Y轴名称
ylabel('price')
%标题
title('Movavg')
结果如图:
14.3.2布林带
布林带由布林格 (Bollinger) 发明,也叫布林通道,是各种投资市场广泛运用的路径分析指标.一般价格的波动是在一定的区间内的,区间的宽度代表价格的变动幅度,越宽表示价格变动幅度越大,越窄表示价格变动幅度越小.布林带由支撑线(LOWER)、阻力线(UPER) 和中线(MID) 三者组成,当价格突破阻力线(或支撑线)时,表示卖出(或买入)时机. SD()为计算标准差
中间线 = 20 日均线
Up 线 = 20 日均线 + 2SD(20 日收巿价 )
Down 线 =20 日均线 - 2SD(20 日收巿价 )
在MATLAB中计算布林带的函数为bollinger.
函数语法:
[mid, uppr, lowr] = bollinger(data, wsize, wts, nstd)
输入参数:
Data: 时间序列数据
Wsize:(可选)窗口大小(数据长度),默认为20
Wts:(可选)权重因子,默认为0
Nstd:(可选)上下届的标准差倍数,默认为2
输出参数:
mid, uppr, lowr:布林带的中值、上界与下界.
例如,以沪深300指数收盘价,计算布林带,程序bollingerTest.m
%%读取数据
load HS300Data
%计算移动平均值
wsize=20;
wts=0;
nstd=2;
[mid, uppr, lowr] = bollinger(ClosePrice, wsize, wts, nstd);
%画图
plot(Date,ClosePrice,'k');
hold on
plot(Date(wsize:end),mid(wsize:end),'b-');
plot(Date(wsize:end),uppr(wsize:end),'r.-');
plot(Date(wsize:end),lowr(wsize:end),'r.-');
dateaxis('x',12)
%标记线型
legend('ClosePrcie','mid','uppr','lowr')
%X轴名称
xlabel('date')
%Y轴名称
ylabel('price')
%标题
title('bollinger')
结果如图:
14.3.3平滑异同移动平均线
MACD称为指数平滑异同移动平均线,是从双移动平均线发展而来的,由快的移动平均线减去慢的移动平均线,MACD的意义和双移动平均线基本相同,但阅读起来更方便.当MACD从负数转向正数,是买的信号.当MACD从正数转向负数,是卖的信号.当MACD以大角度变化,表示快的移动平均线和慢的移动平均线的差距非常迅速的拉开,代表了一个市场大趋势的转变.
DIF线 (Difference)短期移动平均线和长期移动平均线的离差值;
DEA线 (Difference Exponential Average)DIF线的M日指数平滑移动平均线 ;
MACD线 DIF线与DEA线的差.
在MATLAB中计算MACD的函数为macd.
函数语法:
[macdvec, nineperma] = macd(data)
输入参数:
data: 价格序列
输出参数:
macdvec:MACD线
nineperma: the nine-period exponential moving average
例如,以沪深300指数收盘价,计算MACD线,程序MACDTest.m
%读取数据
load HS300Data
%计算MACD
[macdvec, nineperma] = macd(ClosePrice);
%画图
subplot(2,1,1) %沪深300收盘价图
plot(Date,ClosePrice);
legend('ClosePrice')
dateaxis('x',12);
subplot(2,1,2);%沪深300MACD指标
plot(Date,macdvec,'r');
hold on
plot(Date,nineperma,'b--');
legend('Macdvec','Nineperma')
dateaxis('x',12);
结果如图:
注释:函数的演示案例以沪深300日行情为例,若使用高频数据则将数据代入函数即可.
14.3.4其他技术指标
表1 其他技术指标与函数
| MATLAB函数 | 指标名词 | 释义 |
| adline | Accumulation/Distribution line | 累积/派发线(Accumulation/Distribution Line)指标由Marc7Chaikin提出,是一种非常流行的平横交易量指标.其原理与OBV类似,但是只以当日的收盘价位来估算成交流量,用于估定一段时间内该证券累积的资金流量. |
| adosc | Accumulation/Distribution oscillator | 累积/派发线震荡指标 |
| bollinger | Time series Bollinger band | 布林带由布林格 (Bollinger) 发明,也叫布林通道,是各种投资市场广泛运用的路径分析指标.一般价格的波动是在一定的区间内的,区间的宽度代表价格的变动幅度,越宽表示价格变动幅度越大,越窄表示价格变动幅度越小.布林带由支撑线(LOWER)、阻力线(UPER) 和中线(MID) 三者组成,当价格突破阻力线(或支撑线)时,表示卖出(或买入)时机. |
| chaikosc | Chaikin oscillator | 蔡金摆动指标,这个指标由三个主要部分组成.首先:如果股票或指数高于一天之内的平仓价(你可以用[max+min]/2计算出平均值),就意味着一天的积累.越接近股票的平仓指数或最大指数,积累就越活跃.相反地,如果股票的平仓价低于一天的平均值,就意味着分布带来的位置.越接近最低值,分布就越活跃 |
| chaikvolat | Chaikin volatility | 蔡金波动性指标-- 计算最高价和最低价之间的价差.以在最大和最小之间的振幅为基础蔡金波动指标来断定波动价值.与真实范围平均数不同, 蔡金波动制表在账户中没有间隔.根Chaikin的诠释 ,指标价值的增长直接关系到短的时间空隙,就是说价格接近他们的最小值(像当惊慌卖出),在长时间里指标波动减缓,表明价格处于繁忙状态(例如,条件成熟牛市的状态). |
| macd | MovingAverage Convergence/Divergence (MACD) | MACD称为指数平滑异同移动平均线,是从双移动平均线发展而来的,由快的移动平均线减去慢的移动平均线,MACD的意义和双移动平均线基本相同,但阅读起来更方便.当MACD从负数转向正数,是买的信号.当MACD从正数转向负数,是卖的信号.当MACD以大角度变化,表示快的移动平均线和慢的移动平均线的差距非常迅速的拉开,代表了一个市场大趋势的转变. |
| onbalvol | On-Balance Volume (OBV) | OBV的英文全称是:On Balance Volume,中英名称可翻译为:平衡交易量,是由美国的投资分析家Joe Granville所创.该指标通过统计成交量变动的趋势来推测股价趋势.OBV以N字型为波动单位,并且由许许多多N型波构成了OBV的曲线图,对一浪高于一浪的N型波,称其为上升潮(UP TIDE),至于上升潮中的下跌回落则称为跌潮(DOWN FIELD) |
| pvtrend | Price and Volume Trend (PVT) | 价量趋势指标 (PVT),类似能量潮指标,显示增长交易成交量总和计算平仓价的改变. 在OBV的情况下,如果平仓价处于高水平,我们添加当前成交量到当前指标值并且减去其余的价值.在 PVT的情况下,只有部分当前成交量被添加到PVT值, 你必须指出前一个柱当前价格和平仓价之间的差别 |
| rsindex | Relative Strength Index (RSI) | 分析RSI指标最为普遍的方法是:我们要寻找这样一个分离的情况,在那点上,证券的价格是创新高的,但RSI指标并未能超过它以前的那个高度.这样的分离暗示着一个迫近的相反趋势.当RSI指标那时开始反转,并且下降到它最近的那个低谷,人们称之为失败摇摆,失败摇摆被看作为是即将到来的一个相反趋势的确认. |
| stochosc | Stochastic oscillator | 随机震荡技术指标比较一定时段里,价格的范围同证券价格收市值的相关情况.该振荡指标以双线来显示.主线被称为K线,第二根线被称为D线,它的数值是主线K的移动平均线.K通常显示为一个固定的曲线,而D线则显示为点状曲线. |
| willad | Williams Accumulation/Distribution line | 终极摆动指标 通常摆动指标是比较金融工具的平均价格和之前n 周期它的价值. 一次Larry Williams 注意到这种指标的效率有所不同,它取决于你需要计算的单周期数.所以他创建了终极摆动指标,能够使用大强度的三个摆动指标计算不同周期. |
| willpctr | Williams %R | 威廉%R指标是一个动态技术指标,由它来决定市场是否过度买入或买进.威廉的%R曲线和随机震荡指标非常类似.唯一的区别在与%R曲线有上下运动的标尺,而随机震荡指标有振动指数有内部的舒张 |
