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




from jaqs.data import DataViewfrom jaqs.data import RemoteDataServiceimport osimport numpy as npimport talib as taimport pandas as pdfrom datetime import datetimeimport matplotlib.pyplot as pltimport warningswarnings.filterwarnings("ignore")dataview_folder = 'JAQS_Data/hs300'dv = DataView()dv.load_dataview(dataview_folder)
Dataview loaded successfully.
def change_index(df):df.index = pd.Index(map(lambda x: datetime.strptime(str(x),"%Y%m%d") , df.index))return dfdata = change_index(dv.get_ts('close_adj').loc[20170105:])
#均线百分比通道middleband = ta.abstract.MA(data, timeperiod=20, price='600036.SH')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['600036.SH'])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= ta.abstract.BBANDS(data, timeperiod=20, price='600036.SH')plt.figure(figsize=(15,7))plt.plot(data['600036.SH'])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()

high = change_index(dv.get_ts('high_adj').loc[20170105:])['600036.SH']low = change_index(dv.get_ts('low_adj').loc[20170105:])['600036.SH']
stock = pd.concat([high,low,data['600036.SH']],axis=1)stock.columns=['high','low','close']
#平均波幅率通道线atr = ta.abstract.ATR(stock, 20)middleband = ta.abstract.MA(data, 20, price='600036.SH')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['600036.SH'])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 = ta.abstract.MAX(stock, 20, price='high')lowerband = ta.abstract.MIN(stock, 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['600036.SH'])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: 价格突破UpperBand 和 Sigma<0.005
Sell: b%>0.05
Buy : 价格突破upperBand
Sell: 价格跌穿lowerband
# Bollinger Bandimport rqalphafrom rqalpha.api import *import talibdef init(context):context.s1 = "000001.XSHE"context.PERIOD = 20def handle_bar(context, bar_dict):prices = history_bars(context.s1, context.PERIOD+2, '1d', 'close')upperband, middleband, lowerband = talib.BBANDS(prices, context.PERIOD)sigma = (upperband[-1]-prices[-1])/(2*prices[-1])cur_position = context.portfolio.positions[context.s1].quantityshares = context.portfolio.cash/bar_dict[context.s1].closeif sigma>0.05 and cur_position > 0:order_target_value(context.s1, 0)if prices[-2]<=upperband[-2] and prices[-1]>=upperband[-1] and sigma<0.005:order_shares(context.s1, shares)config = {"base": {"start_date": "2015-06-01","end_date": "2017-12-30","accounts": {'stock':1000000},"benchmark": "000001.XSHE"},"extra": {"log_level": "error",},"mod": {"sys_analyser": {"enabled": True,"plot": True}}}rqalpha.run_func(init=init, handle_bar=handle_bar, config=config)

#ATR_Channel_1import rqalphafrom rqalpha.api import *import talibdef init(context):context.s1 = "000001.XSHE"context.PERIOD = 20def handle_bar(context, bar_dict):price = history_bars(context.s1, context.PERIOD+1, '1d', 'close')high = history_bars(context.s1, context.PERIOD+1, '1d', 'high')low = history_bars(context.s1, context.PERIOD+1, '1d', 'low')MA = talib.SMA(price, context.PERIOD)atr = talib.ATR(high,low,price,timeperiod=context.PERIOD)upperband = MA[-1]+atr[-1]lowerband = MA[-1]-atr[-1]# print upperbandcur_position = context.portfolio.positions[context.s1].quantityshares = context.portfolio.cash/bar_dict[context.s1].closeif price[-1] < lowerband and cur_position > 0:order_target_value(context.s1, 0)if price[-1] > upperband:order_shares(context.s1, shares)config = {"base": {"start_date": "2015-06-01","end_date": "2017-12-30","accounts": {'stock':1000000},"benchmark": "000001.XSHE"},"extra": {"log_level": "error",},"mod": {"sys_analyser": {"enabled": True,"plot": True}}}rqalpha.run_func(init=init, handle_bar=handle_bar, config=config)

写一个高低价通道突破策略
