@Channelchan
2017-03-04T11:34:11.000000Z
字数 2565
阅读 26107
均线百分比通道
布林带
平均波幅率通道
高低价通道
通道突破是技术分析中一个判断趋势的重要方法,其观念在于市场价格穿透了之前的价格压力或支撑,继而形成一股新的趋势,而交易策略的目标即是在突破发生时能够确认并建立仓位以获取趋势的利润。
import 模块
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')
均线百分比通道
middleband = ta.abstract.MA(data, timeperiod=20)
upperband = middleband*1.03
lowerband = middleband*0.97
data_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 + atr
lowerband = middleband - atr
data_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)/2
data_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 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')
atr = ta.abstract.ATR(data, 20)
data['SMA20'] = ta.abstract.MA(data, 20)
data['SMA5'] = ta.abstract.MA(data, 5)
data['upperband20'] = data['SMA20'] + atr
data['lowerband20'] = data['SMA20'] - atr
data['upperband5'] = data['SMA5'] + atr
data['lowerband5'] = data['SMA5'] - atr
x_b=[]
y_b=[]
x_e=[]
y_e=[]
data = data.dropna()
it = data.iterrows()
t0, d0 = next(it)
pos = 0
for 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 = 1
elif pos == 1 and (d1.close < d0.lowerband5 or d1.close < d0.lowerband20):
x_e.append(t1)
y_e.append(d1.close)
pos = 0
t0, d0 = t1, d1
plt.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()