[关闭]
@Channelchan 2017-03-06T18:58:13.000000Z 字数 3730 阅读 26739

TA_Lib 动能篇

Momentum MACD Oscillator RSI Stochastic


技术分析对价格的计算与物理学中对速度的计算相似,需要知道价格移动的距离、时间、移动的速度与加速度,这些变化都反映着市场价格在不同维度上的变化。在技术分析中动量指标的类型主要有两种,一种是Momentum 指标,它有中间轴,可以是0或100,上下没有界限;另一种是Oscillator 振荡器,它的取值在0至100之间。以下我们一起通过算法,代码、图表和策略来理解价格的动量。


Momentum 指标有中间轴,可以是0或100,上下没有界限。

Oscillator 振荡器取值在0-100之间。


Momentum


可将不同股票叠加对比的动能指标,找出目前最强的股票。

  1. import talib as ta
  2. import tushare as ts
  3. import pandas as pd
  4. import numpy as np
  5. import matplotlib.pyplot as plt
  1. symbol=['000001','000005','000006','000008','000009']
  2. data_dict={}
  3. for s in symbol:
  4. data = ts.get_k_data(s, start='2016-01-01', end='2016-12-31', ktype='D',autype='qfq')
  5. data.index = pd.to_datetime(data['date'], format='%Y-%m-%d')
  6. data['ROC'] = ta.abstract.ROCR100(data)
  7. data_dict[s]=data['ROC']
  8. data = pd.DataFrame(data_dict)
  1. plt.plot(data)
  2. plt.hlines(100,data.index[0],data.index[-1] , linestyles='dashed', alpha=0.5)
  3. plt.legend(data.columns, loc='upper left')
  4. plt.show()

1

常见用法:
1. 当指标大于100,看涨,小于100看跌。
2. 当各个股票放在一起对比,可以找出最强最弱的股票。


MACD

output: MACD, MACDsignal, Hist



  1. data = ts.get_k_data('000001', start='2016-01-01', end='2016-12-31', ktype='D',autype='qfq')
  2. data.index = pd.to_datetime(data['date'],format='%Y-%m-%d')
  3. dc = np.array(data['close'])
  4. data['MACD'], data['signal'], data['hist'] = ta.MACD(dc)
  1. fig, (ax, ax1) = plt.subplots(2, 1, sharex=True)
  2. ax.plot(data.index, data['close'])
  3. ax1.plot(data.index, data['MACD'])
  4. ax1.plot(data.index, data['signal'])
  5. ax1.bar(data.index, data['hist'])
  6. plt.show()

macd
三种常见用法:
交叉信号(Cross Signals)
金叉或MACD大于MACDsignal,看涨;死叉或MACD小于MACDsignal,看跌。
柱的斜率(The slope of MACD-Histogram)
当前的柱比前一根高,看涨;当前的柱比前一根低,看跌。
背离(Divergence)
价格创新高,而MACD的值没有创新高,顶背离,看跌。
价格创新低,而MACD的值没有创新低,底背离,看涨。


Oscillator(0-100)

RSI

RSI是属于领先指标或同步指标,永远不会滞后。


  1. data['RSI'] = ta.RSI(dc,20)
  1. plt.subplot(2,1,1)
  2. plt.plot(data['close'])
  3. plt.subplot(2,1,2)
  4. plt.plot(data['RSI'],'r')
  5. plt.axhline(70,alpha=0.3)
  6. plt.axhline(30,alpha=0.3)
  7. plt.show()

3
常见用法:

图表的领先形态(Charting Patterns-Leading ahead)
可以通过观察RSI对价格做领先的形态或走势判断。

超买超卖(Overbought/OverSold)
当RSI下穿30后回升上穿30,买入;当RSI上穿70后下穿70,卖出。

背离(Divergence)
价格创新高,而RSI的值没有创新高,顶背离,看跌。
价格创新低,而RSI的值没有创新低,底背离,看涨。


Stochastic



  1. kd = ta.abstract.STOCH(data, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
  2. plt.subplot(2,1,1)
  3. plt.plot(data['close'])
  4. plt.subplot(2,1,2)
  5. plt.plot(kd['slowk'])
  6. plt.plot(kd['slowd'],'y')
  7. plt.axhline(70,alpha=0.3)
  8. plt.axhline(30,alpha=0.3)
  9. plt.show()

4
超买超卖(Overbought/OverSold)
当K下穿30后回升上穿30,买入;当K上穿70后下穿70,卖出。

交叉信号(Cross Signals)
金叉或K大于D,看涨;死叉或K小于D,看跌。

线的方向(Line Direction)
当K,D两条线都往同一个方向时,对价格的短期方向是一种确认。


RSI均线判断背离方法:

底背离买入:


顶背离卖出:

  1. import talib as ta
  2. import tushare as ts
  3. import pandas as pd
  4. import matplotlib.pyplot as plt
  5. data = ts.get_k_data('000001', start='2016-01-01', end='2016-12-31', ktype='D',autype='qfq')
  6. data.index = pd.to_datetime(data['date'],format='%Y-%m-%d')
  7. data['RSI'] = ta.abstract.RSI(data, 14)
  8. data['RSI_MA'] = ta.abstract.MA(data, 20, price='RSI')
  9. data['C_MA'] = ta.abstract.MA(data, 20, price='close')
  10. x_b = []
  11. y_b = []
  12. x_s = []
  13. y_s = []
  14. data = data.dropna()
  15. it = data.iterrows()
  16. t0, d0 = next(it)
  17. pos = 0
  18. for t1, d1 in it:
  19. if pos==0 and d1.close < d1.C_MA and d1.RSI > d1.RSI_MA:
  20. x_b.append(t1)
  21. y_b.append(d1.close)
  22. pos=1
  23. elif pos==1 and d1.close > d1.C_MA and d1.RSI < d1.RSI_MA:
  24. x_s.append(t1)
  25. y_s.append(d1.close)
  26. pos=0
  27. t0, d0 = t1, d1
  28. plt.subplot(2,1,1)
  29. plt.plot(data['close'])
  30. plt.plot(data['C_MA'])
  31. plt.scatter(x_b, y_b, c='r', marker='^', linewidths=3)
  32. plt.scatter(x_s, y_s, c='g', marker='v', linewidths=3)
  33. plt.subplot(2,1,2)
  34. plt.plot(data['RSI'],'r')
  35. plt.plot(data['RSI_MA'],'y')
  36. plt.axhline(70,alpha=0.3)
  37. plt.axhline(30,alpha=0.3)
  38. plt.show()

6

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注