布林带策略
原理
这个策略的原理很简单,就是当股价突破你的上轨线时,则卖出;当股价突破你的下轨线,则买入。中轨线为周期内均值线。但是此策略不适合单独使用,若股票最近涨停或者跌停,很快就会突破你的上下轨线。且多次涨停或跌停,会造成方差过大,上下轨线的区间过大。
实现策略
中轨线一般是周期内的均值(一般是20日),可以是收盘价的均值,也可以日最高点,日最低价来计算均值。此处我采用收盘价均值。上轨线为均值加上固定倍数的标准差,下轨线为均值减去固定倍数的标准差。固定倍数一般取2。也可以是其他值。Python实现主要从tushare获取数据,由于我的pro版本积分不够,所以普通版本和Pro版本混合使用。
import pandas as pd
import tushare as ts
import numpy as np
import matplotlib.pyplot as plt
import 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*std
down=mean-n*std
ups.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']=res
data['up']=ups
data['down']=downs
data['mean']=means
return data
pro=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]
我的代码真的很懒很简单,此策略真的不适合那种涨停好几天的股票呀。要多种策略结合使用。