移动平均值

移动平均值是趋势跟随指标中的一种,有三种不同的类型:简单移动平均(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语言小册

订阅更新,获取更多学习资料,请关注我们的 微信公众号

小菜学编程

推荐阅读更多精彩内容

  • 本背景基于智慧交通的流量预测,使用异常数据算法修正异常数据。 数据不清洁对于预测模型影响非常大,甚至要超越模型本身...
    蠟筆小噺没有烦恼阅读 565评论 0 0
  • 问题 在R中,如何计算数据的移动平均? 指南 假设我们分析的目标数据为一条带有缺失值的有噪正弦波: filter(...
    Datartisan数据工匠阅读 1,335评论 0 0
  • 技术分析:股指是最好的参照基本分析:把握宏观经济投资组合:根据行情调整成功者的启示:具备与众不同的思维方式超越专家...
    你在学校阅读 2,873评论 0 12
  • 其实特别喜欢信与信封,喜欢笔尖在纸面留下痕迹,喜欢一字一句带来的点点欢喜,可惜现在的网络无处不在。很想活在过去,用...
    望湘人阅读 35评论 0 0
  • 姓名:谢新葵 公司:宁波大发化纤有限公司 宁波盛和塾《六项精进》第235期学员感谢二组 【日精进打卡第77天】 知...
    sandy201704阅读 35评论 0 0