布林线交易策略及其Python实现 -- 知识铺
20
布林线简介
BOLL指标是美国股市分析家约翰·布林根据统计学中的标准差原理设计出来的一种非常简单实用的技术分析指标。一般而言,股价的运动总是围绕某一价值中枢(如均线、成本线等)在一定的范围内变动,布林线指标正是在上述条件的基础上,引进了“股价通道”的概念,其认为股价通道的宽窄随着股价波动幅度的大小而变化,而且股价通道又具有变异性,它会随着股价的变化而自动调整。正是由于它具有灵活性、直观性和趋势性的特点,BOLL指标渐渐成为投资者广为应用的市场上热门指标。
布林线构成
由4条线构成,分为 B1线、B2线、B3线及B4线。B1线为指数(或股价)阻力线,B4线是支撑线,从布林线的宽度可以看出指数或股价的变动区间,股价盘整时,四线收缩,称收口;股价向上或向下突破时,四线打开,称为开口。当股价向上击穿B1阻力线时,卖点出现,向下击穿B4线时,买点出现,当股价沿着阻力线(支撑线)上升(下降),虽并未击穿支撑线(压力线),但已回头突破B2线(B3线)时,也是较佳卖(买)点。
布林线计算方法
在所有的指标计算中,BOLL指标的计算方法是最复杂的之一,其中引进了统计学中的标准差概念,涉及到中轨线(MB)、上轨线(UP)和下轨线(DN)的计算。另外,和其他指标的计算一样,由于选用的计算周期的不同,BOLL指标也包括日BOLL指标、周BOLL指标、月BOLL指标年BOLL指标以及分钟BOLL指标等各种类型。经常被用于股市研判的是日BOLL指标和周BOLL指标。虽然它们的计算时的取值有所不同,但基本的计算方法一样。 以日BOLL指标计算为例,其计算方法如下:
日BOLL指标的计算公式
-
中轨线=N日的移动平均线
-
上轨线=中轨线+两倍的标准差
-
下轨线=中轨线-两倍的标准差
日BOLL指标的计算过程
1)计算MA
- MA=N日内的收盘价之和÷N
2)计算标准差MD
- MD=平方根N日的(C-MA)的两次方之和除以N
3)计算MB、UP、DN线
-
MB=N日的MA
-
UP=MB+2×MD
-
DN=MB-2×MD
各大股票交易软件默认N是20,所以MB等于当日20日均线值
在股市分析软件中,BOLL指标一共由四条线组成,即上轨线UP 、中轨线MB、下轨线DN和价格线。其中上轨线UP是UP数值的连线,用黄色线表示;中轨线MB是MB数值的连线,用白色线表示;下轨线DN是DN数值的连线,用紫色线表示;价格线是以美国线表示,颜色为浅蓝色。和其他技术指标一样,在实战中,投资者不需要进行BOLL指标的计算,主要是了解BOLL的计算方法和过程,以便更加深入地掌握BOLL指标的实质,为运用指标打下基础。
[1]
python计算bull线的函数
#计算移动平均线(参数为天数)
def ma(收盘价, 参数):
均线 = 收盘价.rolling(参数).mean()
均线=round(均线,3)
return 均线
#根据移动平均线计算出布林线上轨线up_bb,下轨线low_bb
def bull(收盘价, 均线, 参数):
std = 收盘价.rolling(参数).std()
up_bb = 均线 + std * 2
low_bb = 均线 - std * 2
up_bb,low_bb=round(up_bb,3),round(low_bb,3)
return up_bb, low_bb
布林线的交易策略
布林线交易策略比较多,本文以一种最简单的策略为例讲解:
1.当收盘价从下轨线(low_bb)突破时(前一天收盘价应当位于low_bb下方),买入股票
2.当收盘价从上轨线(up_bb)跌破时(前一天收盘价应当位于up_bb上方),卖出股票
布林线交易策略代码:
def ma(收盘价, 参数):
均线 = 收盘价.rolling(参数).mean()
均线=round(均线,3)
return 均线
def bull(收盘价, 均线, 参数):
std = 收盘价.rolling(参数).std()
up_bb = 均线 + std * 2
low_bb = 均线 - std * 2
up_bb,low_bb=round(up_bb,3),round(low_bb,3)
return up_bb, low_bb
def 布林线交易策略(code,close,ma20,num,up_bb,low_bb):
i,s,flag=num,0,0 #i记录股票交易日起始,s记录交易次数(一次买卖的过程),flag标志持股状态
交易=jy.交易(code, str(num)+“日布林线策略”)
while( i< len(close)-3):
#当收盘价从下轨线(low_bb)突破时(前一天收盘价应当位于low_bb下方),买入股票
if(close[i]< low_bb[i] and close[i+1] > low_bb[i+1] and flag==0):
交易.买入股票(close.index[i],close[i])
i=i+1
flag=1
else:
i=i+1
while(flag and i< len(close)-3):
#当收盘价从上轨线(up_bb)跌破时(前一天收盘价应当位于up_bb上方),卖出股票
if(close[i] > up_bb[i] and close[i+1] < up_bb[i+1]):
交易.卖出股票(close.index[i],close[i])
i=i+1
s=s+1
flag=0
else:
i=i+1
return 交易
布林线交易策略评估
import pandas as pd
import jy
import stock
import 画K线
def ma(收盘价, 参数):
均线 = 收盘价.rolling(参数).mean()
均线=round(均线,3)
return 均线
def bull(收盘价, 均线, 参数):
std = 收盘价.rolling(参数).std()
up_bb = 均线 + std * 2
low_bb = 均线 - std * 2
up_bb,low_bb=round(up_bb,3),round(low_bb,3)
return up_bb, low_bb
def 布林线交易策略(code,close,ma20,num,up_bb,low_bb):
i,s,flag=num,0,0 #i记录股票交易日起始,s记录交易次数(一次买卖的过程),flag标志持股状态
交易=jy.交易(code, str(num)+“日布林线策略”)
while( i< len(close)-3):
if(close[i]< low_bb[i] and close[i+1] > low_bb[i+1] and flag==0):
交易.买入股票(close.index[i],close[i])
i=i+1
flag=1
else:
i=i+1
while(flag and i< len(close)-3):
if(close[i] > up_bb[i] and close[i+1] < up_bb[i+1]):
交易.卖出股票(close.index[i],close[i])
i=i+1
s=s+1
flag=0
else:
i=i+1
return 交易
股票代码=‘002191’
天数=500
截止日期=‘20220312’
股票数据=stock.读取csv数据(股票代码,天数,截止日期)
参数=20
ma20=ma(股票数据.收盘价,参数)
up_bb, low_bb=bull(股票数据.收盘价,ma20,参数)
交易记录=布林线交易策略(股票代码,股票数据.收盘价,ma20,参数,up_bb,low_bb)
交易记录.显示交易()
代码运行效果:
可以看出,股票代码002191截至20220321日前500天交易周期内,根据布林线交易策略,交易次数为4次,收益率34%,盈亏比为100%,说明该策略在该周期内是有效的。
我们现在把K线图画出来,同时将布林线上轨(up_bb)和下轨(low_bb)都加入K线图中.
#画K线图
k线数据=画K线.读取数据(股票代码, 天数, 截止日期)
#K线图上标记买入价格,卖出价格点
buypd=pd.DataFrame(data={‘Date’:交易记录.买入时间,‘买入价格’:交易记录.买入价格})
buypd.Date=pd.to_datetime(buypd.Date)
buypd.set_index(‘Date’,drop=True,append=False, inplace=True)
sellpd=pd.DataFrame(data={‘Date’:交易记录.卖出时间,‘卖出价格’:交易记录.卖出价格})
sellpd.Date=pd.to_datetime(sellpd.Date)
sellpd.set_index(‘Date’,drop=True,append=False, inplace=True)
买入交易 = pd.merge(k线数据.Close,buypd,on=[‘Date’],how=‘outer’)
卖出交易 = pd.merge(k线数据.Close,sellpd,on=[‘Date’],how=‘outer’)
添加买卖点 = [画K线.mpf.make_addplot(买入交易.买入价格, scatter=True, markersize=50, marker=’s’, color=‘r’),
画K线.mpf.make_addplot(卖出交易.卖出价格, scatter=True, markersize=50, marker=‘v’, color=‘b’)
]
#添加布林线指标到K线图中
添加bull= [画K线.mpf.make_addplot(up_bb, type=‘line’,panel=0),画K线.mpf.make_addplot(low_bb, type=‘line’,panel=0)] #panel=1设置kdj指标放在图中间
添加买卖点 += 添加bull
画K线.绘图参数 = dict(
type=‘candle’,
mav=参数,
addplot=添加买卖点,
volume=True,
datetime_format="%Y-%m-%d",
title=’\n股票代码 %s K线图’ % (股票代码),
ylabel=‘股票蜡烛价格’,
ylabel_lower=‘成交量’,
warn_too_much_data=2000, #设置最大显示数据记录条数
figratio=(15, 10),
figscale=10)
画K线.mpf.plot(k线数据,
**画K线.绘图参数,
style=画K线.s,
show_nontrading=False
)
画K线.mpf.show()
bull线交易策略运行效果
完整代码排版格式:
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/stocktactics/post/20240413/%E5%B8%83%E6%9E%97%E7%BA%BF%E4%BA%A4%E6%98%93%E7%AD%96%E7%95%A5%E5%8F%8A%E5%85%B6Python%E5%AE%9E%E7%8E%B0--%E7%9F%A5%E8%AF%86%E9%93%BA/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com