移動平均值是趨勢跟隨指標中的一種,有三種不同的類型:簡單移動平均(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語言小冊
訂閱更新,獲取更多學習資料,請關注我們的 微信公眾號 :
小菜學編程