布林带策略
原理
这个策略的原理很简单,就是当股价突破你的上轨线时,则卖出;当股价突破你的下轨线,则买入。中轨线为周期内均值线。但是此策略不适合单独使用,若股票最近涨停或者跌停,很快就会突破你的上下轨线。且多次涨停或跌停,会造成方差过大,上下轨线的区间过大。
实现策略
中轨线一般是周期内的均值(一般是20日),可以是收盘价的均值,也可以日最高点,日最低价来计算均值。此处我采用收盘价均值。上轨线为均值加上固定倍数的标准差,下轨线为均值减去固定倍数的标准差。固定倍数一般取2。也可以是其他值。Python实现主要从tushare获取数据,由于我的pro版本积分不够,所以普通版本和Pro版本混合使用。
import pandas as pdimport tushare as tsimport numpy as npimport matplotlib.pyplot as pltimport datetime##日期这里我很懒直接自动获取的30日内的所有交易日数据,差不多20日吧end_date=(datetime.datetime.today()+datetime.timedelta(days=-1)).strftime("%Y-%m-%d")start_date=(datetime.datetime.today()+datetime.timedelta(days=-30)).strftime("%Y-%m-%d")##布林带策略函数def boll_brand(df,n):data=ts.get_today_all()codes=data['code']res=[]ups=[]downs=[]means=[]for code in codes:mean=df[df['code']==code]['close'].mean()std=df[df['code']==code]['close'].std()up=mean+n*stddown=mean-n*stdups.append(up)downs.append(down)means.append(mean)if data[data['code']==code]['trade'].values[-1]>up:res.append(1)elif data[data['code']==code]['trade'].values[-1]<down:res.append(0)else:res.append(-1)data['boll_brand']=resdata['up']=upsdata['down']=downsdata['mean']=meansreturn datapro=ts.pro_api('输入自己的pro版本的暗号呀')data = pro.stock_basic()#data.rename(columns={'symbol':'code'}, inplace = True)##获取20日股票数据df=pd.DataFrame()for codes in data[u'symbol']:df_1=ts.get_k_data(codes,start=start_date,end=end_date)df=df.append(df_1)df.head()#获取2被方差的布林带策略的上下轨线值,判断是否买入和卖出data=boll_brand(df,2)#data[data['boll_brand']==0]
我的代码真的很懒很简单,此策略真的不适合那种涨停好几天的股票呀。要多种策略结合使用。