【量化交易笔记】6.布林带的实现

news2024/11/26 14:55:45

上一讲介绍A股移动平均值(MA)指标,本讲我们来讲解布林布的实现。

布林线(BOLL)技术指标简介

布林线(Bollinger Bands,BOLL)又称布林带,是约翰·布林(John Bollinger)提出的一种行情价格频带分轨,是根据统计学中的标准差原理,设计出来的一种非常实用的技术指标。布林线也建立在移动平均线之上,但包含最近的价格波动,使指标更能适应不同的市场条件。布林线通常可由上轨(压力线)、中轨(行情平衡线)和下轨(支撑线)三条轨道线组成,属于通道式指标或路径式指标[1]。
股票的布林带指标是一种基于统计学的技术指标,用于衡量股票价格在一定时间内的波动范围。它是通过计算股票价格在一定时间内的移动平均数以及标准差,对股票价格的上下限进行约束,从而帮助投资者判断股票价格是否处于超买或超卖状态,并作出相应的交易决策。

BOLL公式详解

参数设置

n n n : 时间周期数
**标准差 σ **(STDEV):
σ = ∑ i = 1 n ( P i − M A ) 2 n \sigma=\sqrt{\frac{\sum_{i=1}^n(Pi-MA)^2}{n}} σ=ni=1n(PiMA)2

标准差因子 β \beta βSTDEV Factor):
β = 2 \beta=2 β=2
中界线 n 日内收盘价的算术平均 n 日内收盘价的算术平均 n日内收盘价的算术平均
阻力线 中界线 + 标准差因子 × 标准差 中界线 + 标准差因子 \times 标准差 中界线+标准差因子×标准差
支撑线 中界线 − 标准差因子 × 标准差 中界线 − 标准差因子 \times 标准差 中界线标准差因子×标准差

B B A N D M i d = M A n − p e r i o d s BBAND_{Mid}=MA_{n-periods} BBANDMid=MAnperiods
B B A N D U p = B B A N D M i d + β × σ BBAND_{Up}=BBAND_{Mid} + \beta \times \sigma BBANDUp=BBANDMid+β×σ
B B A N D L o w = B B A N D M i d − β × σ BBAND_{Low}=BBAND_{Mid} - \beta \times \sigma BBANDLow=BBANDMidβ×σ

用到的主要Python库

Python绘图库Matplotlib 3.2.1
Python金融数据处理库Pandas 1.0.2
Python矩阵计算库Numpy 1.16.0

Python代码&详解

# 导入及处理数据
import pandas as pd
import numpy as np
# 绘图
import matplotlib.pyplot as plt
# 设置图像标签显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
import matplotlib as mpl
# 解决一些编辑器(VSCode)或IDE(PyCharm)等存在的图片显示问题,
# 应用Tkinter绘图,以便对图形进行放缩操作
mpl.use('TkAgg')

# 导入数据并做处理
def import_csv(stock_code):
    df = pd.read_csv(stock_code + '.csv')
    df.rename(columns={
        'date': 'Date',
        'open': 'Open',
        'high': 'High',
        'low': 'Low',
        'close': 'Close',
        'volume': 'Volume'
    },
              inplace=True)
    df['Date'] = pd.to_datetime(df['Date'], format='%Y/%m/%d')
    df.set_index(['Date'], inplace=True)
    return df


stock_code = 'sh600519'
# 绘制数据的规模
scale = 500
df = import_csv(stock_code)[-scale:]

# SMA:简单移动平均(Simple Moving Average)
time_period = 20  # SMA的计算周期,默认为20
stdev_factor = 2  # 上下频带的标准偏差比例因子
history = []  # 每个计算周期所需的价格数据
sma_values = []  # 初始化SMA值
upper_band = []  # 初始化阻力线价格
lower_band = []  # 初始化支撑线价格

# 构造列表形式的绘图数据
for close_price in df['Close']:
    # 
    history.append(close_price)

    # 计算移动平均时先确保时间周期不大于20
    if len(history) > time_period:
        del (history[0])

    # 将计算的SMA值存入列表
    sma = np.mean(history)
    sma_values.append(sma)  
    # 计算标准差
    stdev = np.sqrt(np.sum((history - sma) ** 2) / len(history))  
    upper_band.append(sma + stdev_factor * stdev)
    lower_band.append(sma - stdev_factor * stdev)

# 将计算的数据合并到DataFrame
df = df.assign(收盘价=pd.Series(df['Close'], index=df.index))
df = df.assign(中界线=pd.Series(sma_values, index=df.index))
df = df.assign(阻力线=pd.Series(upper_band, index=df.index))
df = df.assign(支撑线=pd.Series(lower_band, index=df.index))

# 绘图
ax = plt.figure()
# 设定y轴标签
ax.ylabel = '%s price in ¥' % (stock_code)

df['收盘价'].plot(color='k', lw=1., legend=True)
df['中界线'].plot(color='b', lw=1., legend=True)
df['阻力线'].plot(color='r', lw=1., legend=True)
df['支撑线'].plot(color='g', lw=1., legend=True)
plt.show()

所得图像如下:

布林线的买卖法则

布林带指标基于股票价格的波动范围,可以反映股票价格在历史上的波动情况,并给出有关价格上涨和下跌的建议。根据布林带指标的上下限和股票价格的走势,可以得出以下买卖法则。

  1. 上穿下轨买入信号:当股票价格从下方上穿下轨时,表明股票价格已经处于超卖状态,建议买入股票。

  2. 上穿中线买入信号:当股票价格从下方上穿中线时,表明股票价格已经开始上涨,建议买入股票。

  3. 下穿上轨卖出信号:当股票价格从上方下穿上轨时,表明股票价格已达到顶部,可能出现价格下跌的情况,建议卖出股票。

  4. 下穿中线卖出信号:当股票价格从上方下穿中线时,表明股票价格可能已经到达顶部,建议卖出股票。

需要注意的是,这些买卖信号只是参考建议,需要结合其他技术指标和市场情况进行分析。此外,在使用布林带指标时,也应该注意时间周期的选择,短周期的布林带指标波动幅度较大,长周期的布林带指标波动幅度较小,选择不同的时间周期,可以更精确地判断市场状况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

dbForge Studio for SQL Server Crack

dbForge Studio for SQL Server Crack 增加了对源代码管理中的数据操作语言(DML)触发器排序的支持。 添加了对不使用EXEC/EXECUTE关键字调用过程/函数的语法支持。 在语法检查中添加了对EXEC命令的支持。 dbForge Studio for SQL Server是一个IDE,用于SQL Server中的…

抖音本地生活服务商贴牌小程序

作为社交电商平台的一部分,抖音本地生活服务的市场前景非常广阔。以下是抖音本地生活服务商市场前景的几个方面: 巨大的用户群体:抖音拥有数亿的用户,这些用户中有很多人需要本地生活服务,如美食、酒店、旅游等&am…

对话三维家创始人蔡志森:AIGC让家装从“填空题”变成了“选择题”

(图片来源:Pixels) 三维家讲透了一个道理:数字化企业如何利用已有优势构建AGI能力。 数科星球原创 作者丨苑晶 编辑丨大兔 AIGC火热半年有余,人们已对ChatGPT不再陌生。 从互联网巨头再到上一代AI企业,…

TiKV 新架构:Partitioned Raft KV 原理解析

作者:徐奇 TiKV 推出了名为“partitioned-raft-kv”的新实验性功能,该功能采用一种新的架构,不仅可以显著提高 TiDB 的可扩展性,还能提升 TiDB 的写吞吐量和性能稳定性。 在上一篇文章中,我们介绍了 Partitioned Raf…

就业内推 | 中国移动招网工,有云计算认证的看过来

01 中移集成 🔷招聘岗位:云网络工程师 🔷职责描述: 1、具有云网项目售前工作经验,精通云网络架构和技术原理;熟悉国内主流云厂商阿里云、腾讯云等整体架构和产品体系。 2、具备一定的云网项目交付能力&…

【追梦之旅】——栈居然还能这样玩?!+ 力扣 - 有效括号

【追梦之旅】——栈居然还能这样玩?! 力扣 - 有效括号 ~😎 前言🙌什么是栈?栈的C语言实现头文件编写源码:功能文件编写源码:测试文件编写源码: 力扣题解——有效的括号 总结撒花&…

从C出发 33 --- 自定义数据类型(中)

struct 结构体类型的本质是 数据类型 ,既然是数据类型,就是用来创建变量,而创建的这个变量其实是 变量的集合,是结构体里面成员变量的集合 struct Test {int a,b;}; struct Test tt.a 1; t.b 2;//意味着,结构体变…

数据结构学习记录——图的遍历(深度优先搜索、广度优先搜索、为什么需要两种遍历、图不连通怎么办)

目录 深度优先搜索 概念 图解过程 伪代码 时间复杂度 具体代码(C语言) 广度优先搜索 概念 图解过程 伪代码 时间复杂度 具体代码(C语言) 为什么需要两种遍历 图不连通怎么办 连通 路径 回路 连通图 连通…

FreeRTOS(2)----任务管理

一,任务的基本概念 FreeRTOS是一个支持多任务的操作系统,多个任务可以共享一个优先级,当任务configUSE_TIME_SLICING 为 1,则可以使用时间调度的方式共享处理器。 简而言之,freertos任务就是一系列任务的集合。 二&…

day05_Java中的运算符

在Java中提供了丰富的运算符 其按照功能分:算术运算符、赋值运算符、比较运算符、逻辑运算、条件运算符按照操作数个数分:一元运算符(单目运算符)、二元运算符(双目运算符)、三元运算符 (三目…

python 元类

目录 元类type介绍使用元类创建类直接使用type继承type 类和对象的创建过程元类有什么用使用元类实现一个单例模式 元类type介绍 我们知道在python中一切皆对象,即使是类,也是对象,那么类这个对象是的类是谁呢?那就是元类。 通过…

Autosar NM网络管理机制(三大三小模式切换、NM网络报文的帧格式解析、NM中用到的定时器配置)

网络管理机制 AUTOSAR网络管理机制其实十分简单,概括下来三句话: 需要通信就发网络报文,否则就停发网络报文,所有节点同睡同醒。 下图是网络管理的状态机: 网络管理包括三个模式:Network Mode、Prepare …

【指针初阶 2023516】

#include <stdio.h>int main() {int a 100;int * pa &a;//pa是专门用来存放地址&#xff08;指针&#xff09;的&#xff0c;这里的pa就被称为指针变量char* pc &a;//指针变量在32为平台下是4个字节//指针变量在64为平台下是8个字节//int arr[10];//printf(&q…

计算机图形学-GAMES101-3

一、transformation-变换 &#xff08;1&#xff09;Scale 缩放变换示意图 图形每个像素对应坐标的计算公式 写成缩放矩阵的形式 非均匀缩放 &#xff08;2&#xff09;Reflection Matrix 镜面变换示意图 图形每个像素对应坐标的计算公式 写成镜像矩阵的形式 …

阿里HR:年轻人你把握不住.....

前言 去阿里面试测试工程师&#xff0c;这里面水太深&#xff0c;什么未来规划&#xff0c;职业发展的东西都是虚拟的&#xff0c;作者还太年轻&#xff0c;没有那个经历&#xff0c;把握不住。项目只有几个&#xff0c;开心快乐就行&#xff0c;不PK&#xff0c;文明PK。 很…

文心一言 VS chatgpt (17)-- 算法导论4.1 3~4题

三、在你的计算机上实现最大子数组问题的暴力算法和递归算法。请指出多大的问题规模n0是性能交叉点一一从此之后递归算法将击败暴力算法?然后&#xff0c;修改递归算法的基本情况一一当问题规模小于 n0 时采用暴力算法。修改后&#xff0c;性能交叉点会改变吗? 文心一言&…

进程间通信(匿名管道、命名管道、共享内存)

目录 匿名管道 创建管道---pipe() 命名管道 创建FIFO FIFO 操作 用命名管道实现server&client通信 共享内存 1.创建共享内存函数shmget() 2.获得共享内存地址函数shmat() 3.删除共享内存函数shmdt() 4.共享内存控制函数shmctl() 在Linux下的多个进程间的通信机制…

Unittest单元测试框架之unittest的第三方库paramunittest参数化基础及应用

一、unittest参数化介绍 参数化测试用于当需要使用多组不同的测试数据测试同一个方法的时候 paramunittest是unittest实现参数化的一个专门的模块&#xff0c;可以传入多组参数&#xff0c;自动生成多个用例 实现unittest参数化的方式有多种&#xff0c;如ddt、paramunittest等…

Linux-进程信号

Linux-进程信号 一&#xff0c;信号入门信号的概念生活中的信号技术应用角度的信号使用kill -l 查看信号列表信号的处理方式 二&#xff0c;信号产生通过终端按键产生信号Core Dumpcode dump标志位 通过系统调用向进程发信号killraiseabort 由软件条件产生信号SIGPIPESIGALRM 硬…

三届跻身世界级,长沙国际工程机械展的突破之路

文 | 智能相对论 作者 | 易不二 长沙正在成为全球工程机械企业争相奔赴的产业“盛宴”。 近日完美落幕的第三届长沙国际工程机械展&#xff0c;留下了全球30多个国家、1500余家企业“同台竞技”的精彩亮相&#xff0c;并达成了536亿元的现场交易额。 卡特彼勒、日立、沃尔沃…