4.2 常用技术指标的MATLAB实现

4.2 常用技术指标的MATLAB实现

目前证券市场上的技术指标数不胜数,如相对强弱指标(RSD)、随机指标(KDJ)、趋向指标(DMI)、平滑异同移动平均线(MACD)、能量潮(OBV)、心理线(PSY)等。根据指标的设计原理和应用法则,可以将技术指标分为趋势型指标、反趋势指标、能量指标、大盘指标、压力支撑指标等类别。

趋势型指标是投资者运用最多,也最容易在市场中获利的方法。市场中的著名格言“让利润充分增长,限制损失”是趋势型指标的真实反映。趋势型指标通常利用两根线的交叉作为交易信号,并以此作为买卖时点的判断。

常用的趋势型指标包括简单移动均线(SMA)、指数移动平均线(EMA)、自适应移动平均线(AMA)、振动升降指标(ASI)、佳庆指标(CHAIKIN)、平均差(DMA)、趋向指标(DMI)、区间振荡指标(DPO)、简易波动指标(EMV)、指数平滑异同移动平均线(MACD)、三重指数平滑平均线(TRIX)、终极指标(UOS)、十字滤线(VHF)、量价曲线(VPT)、威廉变异离散量(WVAD) 等。

这里主要介绍一下简单移动均线(SMA)、指数移动平均线(EMA)、自适应移动平均线(AMA)、指数平滑异同移动平均线(MACD) 和平均差(DMA)这儿个指标,包括指标的定义、实现、图像展示。

4.2.1 简单移动均线(SMA)和指数移动平均线(EMA)

简单移动均线(SMA)和指数移动平均线(EMA)都属于移动平均线,移动平均分析是利用统计学上移动平均的原理,对每天的股价或成交数据进行平均化处理,以消除偶然变动,减弱季节和循环变动的影响。移动平均线是以道·琼斯的平均成本概念为理论基础,采用移动平均分析的方法,将一段时期内的股票价格平均值连成曲线,用来显示股价的历史波动情况,进而反映股价指数未来发展趋势的技术分析方法。

股价移动平均线是目前股票市场上使用最简单、应用最广泛的技术分析方法之一,由于移动平均线客观精确、适应性强,因而成为绝大多数研究运行趋势的基础。按照计算时间区间的不同,移动平均线可分为短期、长期等类型,一般来说,计算期间在20天以内称为短期,20天以上称为长期。不同计算长度的移动均线可以用来判断不同时段市场的趋势。这里要说明的是移动平均线不仅可以用于长周期级别(比如日线级别)的金融数据,也可以用于短周期级别(比如分钟级别)的金融数据和高频数据。

简单移动均线(SMA)就是算术移动平均,其计算方法如下:

其中,N为移动平均的窗口长度,SMA(N)t为t时刻的简单移动平均值,Pt-i为t-i时刻的待求移动平均线的金融数据的价格。

MATLAB有内置的movavg函数可以计算移动平均线,其使用语法如下:

[Short,Long]=movavg(Asset,Lead,Lag,Alpha)

【例4-3】只需给出金融数据的移动平均线的长度(其中Lead为短期均线长度参数,Lag为长期均线长度参数),movavg函数就可以给出长短期的移动平均线,测试代码如下,使用的数据仍为股指期货IF在某日的主力数据的1分钟线。



运行结果如图4-4所示。

由图4-4可以看出,对于分钟级别的数据,使用移动平均线也可以有效地对趋势进行捕捉。

由于简单移动平均线在求均值时对于所有价格的权重设置是一样的(都为移动平均的窗口长度的倒数),但时间越靠近当下的时刻,其价格的信息含量应该越大。指数移动平均线考虑了这一点,以指数式递减加权进行移动平均,其计算公式如下:

其中,N为移动平均的窗口长度,EMA(N)t为t时刻的指数移动平均值,Pt为t时刻的待求指数移动平均线的金融数据的价格,k为平滑指数,一般k=2/(N+1),平滑指数k也可以单独设定。

通过上式可以看到,指数移动平均线使用递归的方式进行定义,将其定义展开可得:

从上式可以更清楚地看出EMA加权平均的特性。在EMA指标中,价格的权重系数以指数等比形式缩小。时间越靠近当今时刻,它的权重越大,说明EMA函数对近期的价格加强了权重比,能及时反映近期价格波动情况。在指数移动平均线中,均线长度N仅仅是用来计算平滑系数的参数,其意义和在简单移动平均线中大不相同。

【例4-4】根据指数移动平均线的定义,可以编写函数。如下的EMA函数可以实现指数移动平均线的计算:

【例4-5】对指数移动平均线进行测试,并和简单移动平均线进行对比,测试代码如下:


运行结果如图4-5所示。

利用移动平均线进行择时交易的方法有很多,其中最为著名的是葛南维移动平均线八大法则。该法则中有4条用来研判买进时机,4条用来研判卖出时机。简单来说,移动平均线在价格之下,而且又呈上升趋势时是买进时机;反之,平均线在价格线之上,又呈下降趋势时则是卖出时机。

利用移动均线择时的另外一种常用方法是交叉择时法则,即当一条短期均线从下向上穿过长期均线时,形成所谓金叉,此时应该做多而当一短期均线从上向下穿过长期均线时,形成所谓死叉,此时应该做空或空仓。

利用金叉和死叉进行择时不仅在移动均线中运用广泛,而且是趋势型指标的一个通用法则。

4.2.2 自适应移动平均线(AMA)

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

Step 01 价格方向。

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

direction=price-price[n]

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

Step 02 波动性。

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

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

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

Step 03 效率系数(ER)。

以上两个组合起来表示方向移动对噪音之比,称为效率系数(ER)。其表达式如下:

Efficency_Ratio=direction/volatility

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

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

Step 04 变换上述系数为趋势速度。

为了应用于指数式移动平均值,比率将被变换为平滑系数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])

1. 自调节式过滤器设计

为了与系统的自适应特性相一致,当价格波动变得更多或更少时,过滤器也要相应取较大或较小值。为了完成这点,过滤器被定义为AMA变化的一个小的百分数:过滤器=percentage×@std(AMA-AMA[l], n)。其中@std(series, n)是价格系列n个周期的标准差。

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

2.  向交易规则中添加过滤器:

当AMA-@lowest(AMA,n)>过滤器时,买入:

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

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

【例4-6】根据自适应移动平均线的定义,可以编写函数来实现。以下的AMA函数可以实现自适应移动平均线的计算:

【例4-7】进行自适应移动平均线的测试,并与简单移动平均线和指数移动平均线进行对比。测试代码如下,使用的数据仍为股指期货E在某日的主力数据的1分钟线。

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

4.2.3 指数平滑异同移动平均线(MACD)

MACD指标是根据均线的构造原理,通过分析短期指数移动平均线与长期指数移动平均线之间的聚合与分离状况,对买进、卖出时机做出判断的技术指标。

MACD的计算:

(1) 计算短期(参数S)指数移动平均线和长期(参数L)指数移动平均线EMA1、EMA2。

(2) 计算尚差值DIFF=EMA1-EMA2。

(3) 计算DIFF的指数移动平均线(参数M),即DEA。

(4) 计算MACD=2×(DIFF-DEA) 。

在MACD的计算和测试中,需要设定的参数主要包括短期均线和长期均线的计算参数S和L,以及DEA的计算长度参数M。

MACD的运用:

(1) DIFF、DEA均为正,DIFF向上突破DEA,买入信号。

(2) DIFF、DEA均为负,DIFF 向下跌破DEA,卖出信号。

(3) DEA线与K线发生背离,行情反转信号。

(4) 分析MACD性状线,由红变绿(正变负),卖出信号;由绿变红,买入信号。

【例4-8】根据MACD的定义可以进行函数实现并测试,代码如下,使用的数据仍为股指期货IF在某日的主力数据的1分钟线。

运行结果如图4-7所示。

4.2.4 平均差(DMA)

DMA指标即所谓平均线差指标,是依据快挝两条移动平均线的差值情况来分析价格趋势的一种技术分析指标。它主要通过计算两条基准周期不同的移动平均线的差值,来判断当前买入卖出的能盘大小和l 未来价格走势的趋势。

DMA的计算:

(1) 计算短期(参数S)移动均线和段期(参数L)移动均线MA1、MA2。

(2) 计算平均线差DMA=MA1-MA2。

(3) 计算DMA的M日移动平均线,即MDMA。

在DMA的计算中,需要设定的参数主要是短期均线和长期均线的计算参数S、L,以及MDMA的计算参数M。

DMA的运用:

(1) DMA向上交叉其平均线MDMA时,买进。

(2) DMA向下交叉其平均线MDMA时,卖出。

(3) DMA与股价产生背离时的交叉信号可信度较高。

【例4-9】根据DMA的定义可以进行函数实现并测试,代码如下,使用的数据仍为股指期货IF在某日的主力数据的1分钟线。


运行结果如图4-8所示。