量化投资常用技能 系列文章目录
我们已经介绍了三篇关于量化投资方面绘图的文章和一篇指标类的推导和介绍的文章,大家有兴趣可以了解一下
绘图篇量化投资常用技能——绘图篇 1:绘制股票收盘价格曲线和ochl烛状图量化投资常用技能——绘图篇 2:绘制移动平均线量化投资常用技能——绘图篇3:绘制黄金分割线指标篇量化投资常用技能——指标篇1:详解 MACD指标绘制、及其计算过程和作用
量化投资常用技能——指标篇2
量化投资常用技能 系列文章目录前言一、布林线指标介绍二、布林线指标的数学计算过程三、布林线指标的代码实现和绘图主要的计算部分的计算方法完整的绘图代码四、BOLL指标的一般研判标准布林线功能在常态范围内,布林线使用的技术和方法在单边上升行情布林线的使用方法缩口的意义:布林线开口的意义:使用布林线的注意事项前言
由于这一部分主要是给大家介绍指标的数学公式和计算方法,更深入的了解它们,其中有众多的数学公式和理论推导过程,我尽可能排版的工整,方便各位阅读。如果只想看代码实现可以跳到最后面“代码实现”部分
上一篇通过层层递进的指标介绍和一步一步的数学公式推导给大家介绍了MACD指标的计算方法和它两线一柱的具体构成,可能看起来会比较吃力,但是理解了对之后的决策非常有实用价值。另外MACD指标的代码实现大家可以自己多尝试,清楚代码组成后很容易自己上手使用,可以自己调整函数接口来适应自己的代码,完成程序化的股票交易并在历史数据上回测
大家可以关注我的GitHub:ExileSaber
量化投资这部分内容会在整个包完成并调试后上传,虽然现在还没较高的水平,但是可以一起学习进步
一、布林线指标介绍
该部分主要参考百度百科的介绍
布林线指标,即BOLL指标(Bollinger Bands)
布林线(BOLL)由约翰·布林先生创造,利用统计原理,求出股价的标准差及其信赖区间,从而确定股价的波动范围及未来走势,利用波带显示股价的安全高低价位,因而也被称为布林带
绘图会发现布林线上下限范围不固定,随股价的滚动而变化,其上下限范围是随着股价波动幅度的大小而变化的,股价涨跌幅度加大时,带状区变宽,涨跌幅度狭小盘整时,带状区则变窄,我们可以根据这个特点来设置相关的策略。
具体的策略介绍会放在 “量化投资常用技能——决策篇” 中
二、布林线指标的数学计算过程
布林线指标简单来说就是移动平均线为中轨线,两倍移动标准差为间距的上轨线和下轨线
首先计算中轨线(移动平均线MA)
n日移动平均线的计算公式
MA=(C1+C2+...+Cn)/nMA = (C_1+C_2+...+C_n)/n MA=(C1+C2+...+Cn)/n
其中C 为收盘价,n 为移动平均周期数。之前有介绍如何绘制移动平均线,可以查看我之前的文章:量化投资常用技能——绘图篇 2:绘制移动平均线
计算移动标准差线MD
n日移动标准差的计算公式
MD=((C1−MA)2+(C2−MA)2+...+(Cn−MA)2)/nMD =\sqrt{\big((C_1-MA)^2+(C_2-MA)^2+...+(C_n-MA)^2\big)/n} MD=((C1−MA)2+(C2−MA)2+...+(Cn−MA)2)/n
其中C 为收盘价,n 为移动标准差周期数,MA为n日移动平均值
计算中轨线(MB)上轨线(UP)下轨线(DN)
MB=n日的MAMB = n日的MAMB=n日的MA
UP=MB+2×MDUP = MB + 2 \times MDUP=MB+2×MD
DN=MB−2×MDDN = MB - 2 \times MDDN=MB−2×MD
三、布林线指标的代码实现和绘图
分为两个部分来讲解,一个是主要的计算部分的代码,学习的同时也可以自己灵活运用在其他地方。另外就是整体的绘图部分,包括烛状图和布林线指标
主要的计算部分的计算方法
列表构造使用尽可能简洁的语句,避免繁琐冗长的代码
# 此处的data数据类型为Series对象mean_data = np.array([data[i: i+window].mean() for i in range(len(data) - window + 1)]) # 计算移动平均线,转换为ndarray对象数据类型是为了更方便的计算上下轨线std_data = np.array([data[i: i+window].std() for i in range(len(data) - window + 1)]) # 计算移动标准差up_line = mean_data + 2 * std_data # 上轨线down_line = mean_data - 2 * std_data # 下轨线
两个ndarray对象的相加是对应元素相加,非常方便,因此必须要保证两个ndarray对象等长
完整的绘图代码
为了绘图全面,我们将“量化投资常用技能——绘图篇 1:绘制股票收盘价格曲线和ochl烛状图”中绘制烛状图的函数 plotplotplot_ochlochlochl 黏贴到这一部分代码中,即可完成美观工整的图像绘制。另外在数据方面,我们采用另外一种获取数据的方式(该方法不一定每次都可以有效,需要自己寻找解决方法)。完整代码如下:
缺少的库直接 pip install 安装即可
import numpy as npimport matplotlib.pyplot as pltimport pandas_datareader.data as webimport datetimefrom matplotlib.dates import date2numimport mpl_finance as mpf# ———————————————————— ## ———— 默认参数设置 ———— ## ———————————————————— #__colorup__ = "red"__colordown__ = "green"window = 30start = datetime.datetime(, 1, 1)end = datetime.date.today()stock = web.DataReader("600519.SS", "yahoo", start, end) # 选择茅台股的数据# ———————————————————— #def bulin_line(data_df, window=20, axs=None, show=False):'''绘制布林线均值回归策略:param data: 传入Series类型数据:param window: 移动平均线计算窗口大小:param axs: 是否子图绘制:param show: 是否绘图:return:'''drawer = plt if axs is None else axsdata = data_df['Close']# 此处的data数据类型为Series对象mean_data = np.array([data[i: i + window].mean() for i in range(len(data) - window + 1)]) # 计算移动平均线,转换为ndarray对象数据类型是为了更方便的计算上下轨线std_data = np.array([data[i: i + window].std() for i in range(len(data) - window + 1)]) # 计算移动标准差up_line = mean_data + 2 * std_data # 上轨线down_line = mean_data - 2 * std_data # 下轨线x = data.indexdrawer.plot(x[window - 1:], mean_data, 'r--', label='mean data', alpha=0.8)drawer.plot(x[window - 1:], up_line, 'b--', label='up line', alpha=0.6)drawer.plot(x[window - 1:], down_line, 'b--', label='down line', alpha=0.6)drawer.legend()if show:plt.show()def plot_ochl(data_df, axs=None, show=False):'''绘制烛状图:param data_df: 输入的数据,默认采用tsla的历史行情数据,输入的数据类型目前只支持DataFrame类型:param axs: 是否在子图上绘制:param show: 是否显示图像:return:'''if axs is None:fig, ax = plt.subplots(figsize=(14, 7))ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)drawer = axelse:drawer = axsqutotes = []# 这部分根据实际表格情况做修改for index, (d, o, c, h, l) in enumerate(zip(data_df.index, data_df.Open, data_df.Close, data_df.High, data_df.Low)):d = date2num(d) # 蜡烛图的日期要使用matplotlib.finance.date2num进行转换为特有的数字值val = (d, o, c, h, l) # 日期,开盘,收盘,最高,最低组成tuple对象valqutotes.append(val) # 加val加入qutotes# 使用mpf.candlestick_ochl进行蜡烛绘制,ochl代表:open,close,high,lowmpf.candlestick_ochl(drawer, qutotes, width=0.6, colorup=__colorup__, colordown=__colordown__)drawer.autoscale_view()drawer.xaxis_date()if show:plt.show()plot_ochl(stock)bulin_line(stock, window=window, show=True)
最后的绘制效果如下:
四、BOLL指标的一般研判标准
该部分主要介绍几个常见的研判标准,实际情况并不一定会和研判标准相符合
这部分主要借鉴了百度百科的介绍,放在最后供大家学习代码后也可以了解一下一些BOLL指标的研判标准
布林线功能
布林线可以指示支撑和压力位置布林线可以显示超买,超卖布林线可以指示趋势布林线具备通道作用在常态范围内,布林线使用的技术和方法
常态范围通常是股价运行在一定宽度的带状范围内,它的特征是股价没有极度大涨 大跌,处在一种相对平衡的状态之中,此时使用布林线的方法非常简单
当股价穿越上限压力线(动态上限压力线,静态最上压力线BOLB1)时,卖点信号当股价穿越下限支撑线(动态下限支撑线,静态最下支撑线BOLB4)时,买点信号当股价由下向上穿越中界限(静态从BOLB4穿越BOLB3)时,为加码信号当股价由上向下穿越中界线(静态由BOLB1穿越BOLB2)时,为卖出信号
在单边上升行情布林线的使用方法
在一个强势市场中,股价连续上升,通常股价会运行在上轨线和下轨线之间,当股价连续上升较长时间,股价上穿上轨线,次日又下穿下轨线且进一步打破下轨线,带动上轨线,出现由上升转平的明显拐点,此时为卖出信号。另外可以适当增强这个判断,打破均线就卖出也是可以考虑的