移动平均值

96
fasionchan
2016.10.06 14:12* 字数 725

移动平均值是趋势跟随指标中的一种,有三种不同的类型:简单移动平均(MA)、指数移动平均(EMA)以及加权移动平均。

SMA

简单移动平均(SMA)计算在一定期间内数据的平均值。比如,5天MA指的是过去5天价格的平均值,20天MA指的是过去20天价格的平均值,其余以此类推。计算公式如下:

其中:

  • P——为被平均价格
  • N——计算周期

TA-Lib是一个开源技术指标库,接口非常优雅。下面,以苹果公司股票数据为例,演示如何快速计算移动平均:

import pandas
import StringIO
import talib

aapl_csv = '''
date,open,high,low,close,volume
2016-09-01,106.140,106.800,105.620,106.730,26701500.000
2016-09-02,107.700,108.000,106.820,107.730,26334900.000
2016-09-06,107.900,108.300,107.510,107.700,26880400.000
2016-09-07,107.830,108.760,107.070,108.360,42364300.000
2016-09-08,107.250,107.270,105.240,105.520,53002000.000
2016-09-09,104.640,105.720,103.130,103.130,45973100.000
2016-09-12,102.650,105.720,102.530,105.440,45292800.000
2016-09-13,107.510,108.790,107.240,107.950,62176200.000
2016-09-14,108.730,113.030,108.600,111.770,110888700.000
2016-09-15,113.860,115.730,113.490,115.570,89983600.000
2016-09-16,115.120,116.130,114.040,114.920,79677200.000
2016-09-19,115.190,116.180,113.250,113.580,47023000.000
2016-09-20,113.050,114.120,112.510,113.570,34514300.000
2016-09-21,113.850,113.990,112.440,113.550,36003200.000
2016-09-22,114.350,114.940,114.000,114.620,31074000.000
2016-09-23,114.420,114.790,111.550,112.710,52325900.000
2016-09-26,111.640,113.390,111.550,112.880,29869400.000
2016-09-27,113.000,113.180,112.340,113.090,24576200.000
2016-09-28,113.690,114.640,113.430,113.950,29641100.000
2016-09-29,113.160,113.800,111.800,112.180,35887000.000
2016-09-30,112.460,113.370,111.800,113.050,36238600.000
2016-10-03,112.710,113.050,112.280,112.520,21701800.000
2016-10-04,113.060,114.310,112.630,113.000,29652300.000
'''

data = pandas.DataFrame.from_csv(StringIO.StringIO(aapl_csv))
print talib.MA(data.close.values, 5)

注意到,例子中数据以CSV格式内嵌于代码中,以StringIO为媒介,转化成DataFrame对象,方便使用。数据内嵌于代码的方式,减少不必要的依赖,让例子演示更为流畅。

另外,Python控制台下运行help(talib.MA)可以查看TA-Lib相关指标计算函数的用法,例如:

help(MA)

由此,可以清楚看到MA函数需要三个参数:

  • real,必选,源数据,类似必须是ndarray
  • timeperiod,可选,计算周期,如:5天
  • matype,移动平均类型,默认为简单移动平均(Simple Moving Average)

EMA

指数移动平均值(EMA)是比简单移动平均值SMA更优的趋势跟踪指标。它赋予近期数据更高的权重,所以比SMA值反应更快。同时,EMA不会对即将淘汰的数据做出剧烈反应。

公式中,

  • P(tod)——为当日收盘价
  • EMA(yest)——前一日指数移动平均值
  • K——2/(N+1)
  • N——计算周期

同样地,TA-Lib已经涵盖了EMA运算,用法也是类似的。将SMA例子中最后两行代码换成以下两行,便得到EMA

data = pandas.DataFrame.from_csv(StringIO.StringIO(aapl_csv))
print talib.EMA(data.close.values, 5)

交易策略

MA上升时,做多。在价格跌到移动平均线附近或稍微跌破一点时买入。一旦做多,就将保护性止损位设在近期低点之下;一旦价格守在MA线之上,就将止损位上移到盈亏平衡点。

MA下降时,做空。在价格向上反弹到MA线附近或稍微突破一点时卖空,将保护性止损位设在近期的高点之上。一旦价格收在EMA线之下,就将止损位上移到盈亏平衡点。

MA走平且只做窄幅波动时,表明市场处于无趋势盘整之中。这时,不要再用趋势跟随指标来知道操作。

Python Quants