@Channelchan
2017-03-06T18:58:13.000000Z
字数 3730
阅读 26739
Momentum
MACD
Oscillator
RSI
Stochastic
技术分析对价格的计算与物理学中对速度的计算相似,需要知道价格移动的距离、时间、移动的速度与加速度,这些变化都反映着市场价格在不同维度上的变化。在技术分析中动量指标的类型主要有两种,一种是Momentum 指标,它有中间轴,可以是0或100,上下没有界限;另一种是Oscillator 振荡器,它的取值在0至100之间。以下我们一起通过算法,代码、图表和策略来理解价格的动量。
import talib as ta
import tushare as ts
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
symbol=['000001','000005','000006','000008','000009']
data_dict={}
for s in symbol:
data = ts.get_k_data(s, start='2016-01-01', end='2016-12-31', ktype='D',autype='qfq')
data.index = pd.to_datetime(data['date'], format='%Y-%m-%d')
data['ROC'] = ta.abstract.ROCR100(data)
data_dict[s]=data['ROC']
data = pd.DataFrame(data_dict)
plt.plot(data)
plt.hlines(100,data.index[0],data.index[-1] , linestyles='dashed', alpha=0.5)
plt.legend(data.columns, loc='upper left')
plt.show()
常见用法:
1. 当指标大于100,看涨,小于100看跌。
2. 当各个股票放在一起对比,可以找出最强最弱的股票。
output: MACD, MACDsignal, Hist
data = ts.get_k_data('000001', start='2016-01-01', end='2016-12-31', ktype='D',autype='qfq')
data.index = pd.to_datetime(data['date'],format='%Y-%m-%d')
dc = np.array(data['close'])
data['MACD'], data['signal'], data['hist'] = ta.MACD(dc)
fig, (ax, ax1) = plt.subplots(2, 1, sharex=True)
ax.plot(data.index, data['close'])
ax1.plot(data.index, data['MACD'])
ax1.plot(data.index, data['signal'])
ax1.bar(data.index, data['hist'])
plt.show()
三种常见用法:
交叉信号(Cross Signals)
金叉或MACD大于MACDsignal,看涨;死叉或MACD小于MACDsignal,看跌。
柱的斜率(The slope of MACD-Histogram)
当前的柱比前一根高,看涨;当前的柱比前一根低,看跌。
背离(Divergence)
价格创新高,而MACD的值没有创新高,顶背离,看跌。
价格创新低,而MACD的值没有创新低,底背离,看涨。
RSI是属于领先指标或同步指标,永远不会滞后。
data['RSI'] = ta.RSI(dc,20)
plt.subplot(2,1,1)
plt.plot(data['close'])
plt.subplot(2,1,2)
plt.plot(data['RSI'],'r')
plt.axhline(70,alpha=0.3)
plt.axhline(30,alpha=0.3)
plt.show()
常见用法:
图表的领先形态(Charting Patterns-Leading ahead)
可以通过观察RSI对价格做领先的形态或走势判断。
超买超卖(Overbought/OverSold)
当RSI下穿30后回升上穿30,买入;当RSI上穿70后下穿70,卖出。
背离(Divergence)
价格创新高,而RSI的值没有创新高,顶背离,看跌。
价格创新低,而RSI的值没有创新低,底背离,看涨。
kd = ta.abstract.STOCH(data, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
plt.subplot(2,1,1)
plt.plot(data['close'])
plt.subplot(2,1,2)
plt.plot(kd['slowk'])
plt.plot(kd['slowd'],'y')
plt.axhline(70,alpha=0.3)
plt.axhline(30,alpha=0.3)
plt.show()
超买超卖(Overbought/OverSold)
当K下穿30后回升上穿30,买入;当K上穿70后下穿70,卖出。
交叉信号(Cross Signals)
金叉或K大于D,看涨;死叉或K小于D,看跌。
线的方向(Line Direction)
当K,D两条线都往同一个方向时,对价格的短期方向是一种确认。
底背离买入:
import talib as ta
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
data = ts.get_k_data('000001', start='2016-01-01', end='2016-12-31', ktype='D',autype='qfq')
data.index = pd.to_datetime(data['date'],format='%Y-%m-%d')
data['RSI'] = ta.abstract.RSI(data, 14)
data['RSI_MA'] = ta.abstract.MA(data, 20, price='RSI')
data['C_MA'] = ta.abstract.MA(data, 20, price='close')
x_b = []
y_b = []
x_s = []
y_s = []
data = data.dropna()
it = data.iterrows()
t0, d0 = next(it)
pos = 0
for t1, d1 in it:
if pos==0 and d1.close < d1.C_MA and d1.RSI > d1.RSI_MA:
x_b.append(t1)
y_b.append(d1.close)
pos=1
elif pos==1 and d1.close > d1.C_MA and d1.RSI < d1.RSI_MA:
x_s.append(t1)
y_s.append(d1.close)
pos=0
t0, d0 = t1, d1
plt.subplot(2,1,1)
plt.plot(data['close'])
plt.plot(data['C_MA'])
plt.scatter(x_b, y_b, c='r', marker='^', linewidths=3)
plt.scatter(x_s, y_s, c='g', marker='v', linewidths=3)
plt.subplot(2,1,2)
plt.plot(data['RSI'],'r')
plt.plot(data['RSI_MA'],'y')
plt.axhline(70,alpha=0.3)
plt.axhline(30,alpha=0.3)
plt.show()