@Channelchan
2018-11-29T14:40:17.000000Z
字数 3109
阅读 65259
用Python量化你的技术分析
通道突破是技术分析中一个判断趋势的重要方法,其观念在于市场价格穿透了之前的价格压力或支撑,继而形成一股新的趋势,而交易策略的目标即是在突破发生时能够确认并建立仓位以获取趋势的利润。




import pandas as pdimport warningsimport numpy as npfrom datetime import datetimeimport matplotlib.pyplot as pltimport talib as tafrom talib import abstractwarnings.filterwarnings('ignore')data = pd.read_excel('three.xlsx', sheetname='BTCUSDT.binance', index_col='datetime').iloc[-300:]
#均线百分比通道middleband = 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']plt.figure(figsize=(15,7))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()

#布林带data_B= abstract.BBANDS(data, timeperiod=20)plt.figure(figsize=(15,7))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()

#平均波幅率通道线atr = abstract.ATR(data, 20)middleband = abstract.MA(data, 20)upperband = middleband + atrlowerband = middleband - atrdata_B = pd.concat([middleband, upperband, lowerband], axis=1)data_B.columns = ['middleband', 'upperband', 'lowerband']plt.figure(figsize=(15,7))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()

#高低价通道upperband = abstract.MAX(data, 20, price='high')lowerband = 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.figure(figsize=(15,7))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()
![output_9_0.png-47.8kB][8]
Buy: 价格突破UpperBand 和 Sigma<0.005
Sell: b%>0.05
# 参数设置lowVolThrehold = 0.005; highVolThrehold = 0.05BBandPeriod = 20lot = 1# 指标计算up, mid, low = ta.BBANDS(am.close, self.BBandPeriod)sigma = (up - mid) / (2 * mid)# 现象条件breakUp = (am.close[-2] <= up[-2]) and (am.close[-1] > up[-2])breakDn = (am.close[-2] <= low[-2]) and (am.close[-1] > low[-2])# 进出场条件if breakUp and (sigma < self.lowVolThrehold) and (self.posDict[symbol + "_LONG"]==0):if self.posDict[symbol + "_SHORT"] == 0:self.buy(symbol, bar.close * 1.01, self.lot)elif self.posDict[symbol + "_SHORT"] > 0:self.cover(symbol, bar.close * 1.02, self.posDict[symbol + "_SHORT"])self.buy(symbol, bar.close * 1.01, self.lot)elif breakDn and (sigma < self.lowVolThrehold) and (self.posDict[symbol + "_SHORT"]==0):if self.posDict[symbol + "_LONG"] == 0:self.short(symbol, bar.close * 0.99, self.lot)elif self.posDict[symbol + "_LONG"] > 0:self.sell(symbol, bar.close * 0.99, self.posDict[symbol + "_LONG"])self.short(symbol, bar.close *0.99, self.lot)if sigma>highVolThrehold:if self.posDict[symbol + "_LONG"] > 0:self.sell(symbol, bar.close * 0.98, self.posDict[symbol + "_LONG"])elif self.posDict[symbol + "_SHORT"] > 0:self.cover(symbol, bar.close * 1.02, self.posDict[symbol + "_SHORT"])
写一个高低价通道突破策略
