@Channelchan
2017-03-04T03:34:11.000000Z
字数 2565
阅读 26328
均线百分比通道 布林带 平均波幅率通道 高低价通道
通道突破是技术分析中一个判断趋势的重要方法,其观念在于市场价格穿透了之前的价格压力或支撑,继而形成一股新的趋势,而交易策略的目标即是在突破发生时能够确认并建立仓位以获取趋势的利润。
import 模块
import talib as taimport tushare as tsimport pandas as pdimport 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')
均线百分比通道
middleband = ta.abstract.MA(data, timeperiod=20)upperband = middleband*1.03lowerband = middleband*0.97data_B = pd.concat([middleband, upperband , lowerband], axis=1)data_B.columns = ['middleband','upperband','lowerband']

布林带通道线
data_B= ta.abstract.BBANDS(data, timeperiod=20)

平均波幅率通道线
atr = ta.abstract.ATR(data, 20)middleband = ta.abstract.MA(data,20)upperband = middleband + atrlowerband = middleband - atrdata_B = pd.concat([middleband, upperband, lowerband], axis=1)data_B.columns = ['middleband', 'upperband', 'lowerband']

高低价通道
upperband = ta.abstract.MAX(data, 20, price='high')lowerband = ta.abstract.MIN(data, 20, price='low')middleband = (upperband+lowerband)/2data_B = pd.concat([middleband, upperband, lowerband], axis=1)data_B.columns = ['middleband', 'upperband', 'lowerband']

全部图的展示代码:
plt.plot(data['close'])plt.plot(data_B['middleband'], 'r', alpha=0.3)plt.plot(data_B['upperband'], 'g', alpha=0.3)plt.plot(data_B['lowerband'], 'g', alpha=0.3)plt.show()
Buy:
Exit:
import talib as taimport tushare as tsimport pandas as pdimport matplotlib.pyplot as pltdata = 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')atr = ta.abstract.ATR(data, 20)data['SMA20'] = ta.abstract.MA(data, 20)data['SMA5'] = ta.abstract.MA(data, 5)data['upperband20'] = data['SMA20'] + atrdata['lowerband20'] = data['SMA20'] - atrdata['upperband5'] = data['SMA5'] + atrdata['lowerband5'] = data['SMA5'] - atrx_b=[]y_b=[]x_e=[]y_e=[]data = data.dropna()it = data.iterrows()t0, d0 = next(it)pos = 0for t1, d1 in it:if pos == 0 and d1.close > d0.upperband5 and d1.close > d0.upperband20:x_b.append(t1)y_b.append(d1.close)pos = 1elif pos == 1 and (d1.close < d0.lowerband5 or d1.close < d0.lowerband20):x_e.append(t1)y_e.append(d1.close)pos = 0t0, d0 = t1, d1plt.plot(data['close'])plt.plot(data['upperband20'], alpha=0.3)plt.plot(data['lowerband20'], alpha=0.3)plt.plot(data['upperband5'], alpha=0.3,c='r')plt.plot(data['lowerband5'], alpha=0.3,c='r')plt.scatter(x_b, y_b, c='r', marker='^', linewidths=3)plt.scatter(x_e, y_e, c='g', marker='v', linewidths=3)plt.show()

