Python 实现 BRAR 指标计算(情绪指标):股票技术分析的利器系列(11)

Python 实现 BRAR 指标计算(情绪指标):股票技术分析的利器系列(11)

    • 介绍
      • 算法公式
    • 代码
      • rolling函数介绍
      • 核心代码
        • 计算BR
        • 计算AR
    • 完整代码


介绍

BRAR 是一种情绪指标,用于衡量特定金融市场中的买卖情绪。它代表着买入意愿相对于卖出意愿的比率。

先看看官方介绍:

BRAR (情绪指标)
用法
1.BR>400,暗示行情过热,应反向卖出;BR<40 ,行情将起死回生,应买进;
2.AR>180,能量耗尽,应卖出;AR<40 ,能量已累积爆发力,应买进;
3.BR 由300 以上的高点下跌至50以下的水平,低于AR 时,为绝佳买点;
4.BR、AR、CR、VR 四者合为一组指标群,须综合搭配使用。

算法公式

BR:SUM(MAX(0,HIGH-REF(CLOSE,1)),N)/SUM(MAX(0,REF(CLOSE,1)-LOW),N)*100;
AR:SUM(HIGH-OPEN,N)/SUM(OPEN-LOW,N)*100;

代码

rolling函数介绍

rolling 函数通常与其他函数(如 meansumstd 等)一起使用,以计算滚动统计量,例如滚动均值、滚动总和等。

以下是 rolling 函数的基本语法:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
  • window: 用于计算统计量的窗口大小。
  • min_periods: 每个窗口最少需要的非空观测值数量。
  • center: 确定窗口是否居中,默认为 False
  • win_type: 窗口类型,例如 Noneboxcartriang 等,默认为 None
  • on: 在数据帧中执行滚动操作的列,默认为 None,表示对整个数据帧执行操作。
  • axis: 执行滚动操作的轴,默认为 0,表示按列执行操作。
  • closed: 确定窗口的哪一端是闭合的,默认为 None

核心代码

计算BR

BR 是一种技术指标,代表着“买卖气指标”(Buy/Sell Pressure)。BR指标通常用于股票市场的技术分析,旨在衡量买卖双方的力量对价格变动的影响。BR指标的计算涉及到最高价、最低价和收盘价的变动,以及特定周期内的累积运算。

def BR(df, n):high_ref_close = df['HIGH'] - df['CLOSE'].shift(1)high_ref_close = high_ref_close.where(high_ref_close > 0, 0)  # MAX(0, HIGH - REF(CLOSE, 1))sum_high_ref_close = high_ref_close.rolling(window=n, min_periods=1).sum()ref_close_low = df['CLOSE'].shift(1) - df['LOW']ref_close_low = ref_close_low.where(ref_close_low > 0, 0)  # MAX(0, REF(CLOSE, 1) - LOW)sum_ref_close_low = ref_close_low.rolling(window=n, min_periods=1).sum()br = sum_high_ref_close / sum_ref_close_low * 100return br
  1. high_ref_close = df['HIGH'] - df['CLOSE'].shift(1)

    • 这一行计算了当日最高价与前一日收盘价之间的差值。df['CLOSE'].shift(1)表示将收盘价向上平移一行(即前一天的收盘价),然后用当日的最高价减去这个平移后的收盘价,得到的就是当日最高价与前一日收盘价之间的差值。
  2. high_ref_close = high_ref_close.where(high_ref_close > 0, 0) # MAX(0, HIGH - REF(CLOSE, 1))

    • 这一行使用 where 方法将 high_ref_close 中小于等于0的值替换为0。这一步相当于实现了 MAX(0, HIGH - REF(CLOSE, 1)) 这个函数,即取 HIGH - REF(CLOSE, 1) 与 0 中的较大值。
  3. sum_high_ref_close = high_ref_close.rolling(window=n, min_periods=1).sum()

    • 这一行计算了 high_ref_close 在指定窗口大小 n 内的滚动求和。这一步是计算了 BR 公式中分子部分的累加和。
  4. ref_close_low = df['CLOSE'].shift(1) - df['LOW']

    • 这一行计算了前一日收盘价与当日最低价之间的差值。同样地,使用 df['CLOSE'].shift(1) 将收盘价向上平移一行,然后用这个平移后的收盘价减去当日的最低价,得到的就是前一日收盘价与当日最低价之间的差值。
  5. ref_close_low = ref_close_low.where(ref_close_low > 0, 0) # MAX(0, REF(CLOSE, 1) - LOW)

    • 这一行同样使用 where 方法将小于等于0的值替换为0,实现了 MAX(0, REF(CLOSE, 1) - LOW) 这个函数,即取 REF(CLOSE, 1) - LOW 与 0 中的较大值。
  6. sum_ref_close_low = ref_close_low.rolling(window=n, min_periods=1).sum()

    • 这一行计算了 ref_close_low 在指定窗口大小 n 内的滚动求和。这一步是计算了 BR 公式中分母部分的累加和。
  7. br = sum_high_ref_close / sum_ref_close_low * 100

    • 最后一行将分子部分的累加和除以分母部分的累加和,然后乘以100,得到了 BR 指标的值。
计算AR

AR 是一种技术指标,代表“人气指标”(AR,Attention Rate)。AR指标用于衡量特定时间段内股票市场的人气或关注度,这可以提供对市场情绪的一种衡量。

def AR(df, n):sum_high_open = (df['HIGH'] - df['OPEN']).rolling(window=n, min_periods=1).sum()sum_open_low = (df['OPEN'] - df['LOW']).rolling(window=n, min_periods=1).sum()ar = sum_high_open / sum_open_low * 100return ar
  1. sum_high_open = (df['HIGH'] - df['OPEN']).rolling(window=n, min_periods=1).sum()

    • 这一行计算了当日最高价与开盘价之间的差值的累加和。(df['HIGH'] - df['OPEN']) 计算了每日最高价与开盘价之间的差值,然后 .rolling(window=n, min_periods=1) 将这个差值序列进行滚动求和,窗口大小为 nmin_periods=1 表示至少要有一个有效值才进行计算。
  2. sum_open_low = (df['OPEN'] - df['LOW']).rolling(window=n, min_periods=1).sum()

    • 这一行计算了开盘价与当日最低价之间的差值的累加和,方式与上一行类似。
  3. ar = sum_high_open / sum_open_low * 100

    • 最后一行将当日最高价与开盘价之间的差值的累加和除以开盘价与当日最低价之间的差值的累加和,然后乘以100,得到了 AR 指标的值。

完整代码

import pandas as pdimport a_get_datadef BR(df, n):high_ref_close = df['HIGH'] - df['CLOSE'].shift(1)high_ref_close = high_ref_close.where(high_ref_close > 0, 0)  # MAX(0, HIGH - REF(CLOSE, 1))sum_high_ref_close = high_ref_close.rolling(window=n, min_periods=1).sum()ref_close_low = df['CLOSE'].shift(1) - df['LOW']ref_close_low = ref_close_low.where(ref_close_low > 0, 0)  # MAX(0, REF(CLOSE, 1) - LOW)sum_ref_close_low = ref_close_low.rolling(window=n, min_periods=1).sum()br = sum_high_ref_close / sum_ref_close_low * 100return brdef AR(df, n):sum_high_open = (df['HIGH'] - df['OPEN']).rolling(window=n, min_periods=1).sum()sum_open_low = (df['OPEN'] - df['LOW']).rolling(window=n, min_periods=1).sum()ar = sum_high_open / sum_open_low * 100return ardata = {'CLOSE': 填每日收盘的数据,'HIGH': 填每日最高的数据,'LOW': 填每日最低的数据'OPEN': 填每日开盘的数据
}df = pd.DataFrame(data)# 计算BR和AR指标
n = 26  # N的值
df['BR'] = BR(df, n)
df['AR'] = AR(df, n)print(df)

在这里插入图片描述

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

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

相关文章

试一下newb,还是有错误呀

解题&#xff1a;原式&#xff1d; 2. 在递增的等比数列 ( a n ) (a_n) (an​)中&#xff0c;若 ( a 3 − a 1 5 2 ) (a_3 - a_1 \frac{5}{2}) (a3​−a1​25​), ( a 2 3 ) (a_2 3) (a2​3), 则公比 (q) A. ( 4 3 ) ( \frac{4}{3} ) (34​) B. ( 3 2 ) ( \frac{3}{2} …

旧物回收小程序开发,开启绿色生活新篇章

随着科技的发展和人们生活水平的提高&#xff0c;物质生活的丰富带来了大量的废弃物。如何合理处理这些废弃物&#xff0c;实现资源的再利用&#xff0c;已成为社会关注的焦点。旧物回收小程序的开发与应用&#xff0c;为这一问题提供了有效的解决方案。本文将探讨旧物回收小程…

软考47-上午题-【数据库】-数据查询语言DQL2

一、聚合函数 聚合函数实现数据统计的功能&#xff0c;返回一个单一的值。聚合函数一般与select语句的group by子句一起使用。 示例&#xff1a; 二、数据分组-group by 聚合函数加上group by子句进行分组。 通常一个聚合函数的作用范围是满足where子句中指定条件的记录&…

Atcoder ABC341 C - Takahashi Gets Lost

Takahashi Gets Lost&#xff08;高桥迷路了&#xff09; 时间限制&#xff1a;3s 内存限制&#xff1a;1024MB 【原题地址】 所有图片源自Atcoder&#xff0c;题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【…

vscode输入英文时字体之间的间隔突然变大,似中文

vscode输入英文时字体之间的间隔突然变大&#xff0c;似中文 主要原因&#xff1a; 是由于输入法变成全角模式了。原因可能是不小心按了 shift空格键快捷键造成的。 正常情况&#xff0c;全角就是字母和数字等与汉字占等宽位置的字。 半角就是ASCII方式的字符&#xff0c;在没…

并发编程线程安全性之可见性有序性

可见性 可见性: 就是说一个线程对共享变量的修改&#xff0c;另一个线程能够立刻看到 通俗点说&#xff0c;就是两个线程共享一个变量&#xff0c;无论哪一个线程修改了这个变量&#xff0c;另外一个线程都能够立刻看到上一个线程对这个变量的修改 产生线程安全问题的原因 计…

桶装水配送小程序有什么功能 怎么制作

桶装水配送小程序是一种方便快捷的订水服务工具&#xff0c;可以帮助用户轻松订购桶装水&#xff0c;并实时跟踪订单配送情况。下面具体介绍送水小程序的功能。 1. 客户订水功能&#xff1a;用户可以通过小程序轻松选择需要的桶装水数量和配送时间&#xff0c;填写联系信息和地…

leet hot 100-7 无重复字符的最长子串

无重复字符的最长子串 原题链接思路代码 原题链接 leet hot 100-7 3. 无重复字符的最长子串 思路 声明一个无序map容器&#xff0c;容器里面记录着窗口里面字符的数量 &#xff0c;如果字符的数量大于1 遍历到s[i]的时候 数量1 此时如果map里面相关的数量大于1 说明窗口里面…

ocr识别tesseract.js本地复现

来源&#xff1a; https://github.com/naptha/tesseract.js chatgpt今天帮倒忙&#xff0c;一直给一些旧的东西&#xff0c;代码就老报错&#xff0c;最后还是我出面看看log和err调了一下&#xff0c;还的是我啊 复现效果 这个挺好复现的&#xff0c;用的英文模式比中文识别…

阿里云服务器ECS u1实例性能如何?199元一年

阿里云服务器ECS u1实例&#xff0c;2核4G&#xff0c;5M固定带宽&#xff0c;80G ESSD Entry盘优惠价格199元一年&#xff0c;性能很不错&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;购买限制条件为企业客户专享&#xff0c;实名认证信息是企业用户即可&a…

常用芯片学习——YC688语音芯片

YC688 广州语创公司语音芯片 使用说明 YC688是一款工业级的MP3语音芯片 &#xff0c;完美的集成了MP3、WAV的硬解码。支持SPI-Flash、TF卡、U盘三种存储设备。可通过电脑直接更新SPI-Flash的内容&#xff0c;无需上位机软件。通过简单的串口指令即可完成三种存储设备的音频插…

C/C++文件操作

一、文本文件操作 1、写文件操作 代码 #include<fstream> #include<iostream>int main() {ofstream outfile("Student.txt", ios::out);if (!outfile) {cout << "文件写入失败" << endl;exit(0); //程序终止}cout << &qu…

R绘图 | 单列数据的分布图,对A变量分bin求B变量的平均值

问题1&#xff1a;单个向量的 density 分布图&#xff1f; (1) 模拟数据 set.seed(202402) datdiamonds[sample(nrow(diamonds), 1000),]> head(dat) # A tibble: 6 10carat cut color clarity depth table price x y z<dbl> <ord> &l…

物资管理新篇章:Java+SpringBoot实战

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

微信小程序本地开发

微信小程序本地开发时不需要在小程序后台配置服务器域名直接在小程序项目中填写后端在本机的IP地址和端口号 如图&#xff08;第一步&#xff09; 填写地址后发现报错&#xff0c;url不是合法域名&#xff0c;则在详情设置不校验合法域名 如图&#xff08;第二歩&#xff09;…

Flink代码单词统计 ---批处理

flatMap&#xff1a;一对多转换操作&#xff0c;输入句子&#xff0c;输出分词后的每个词groupBy&#xff1a;按Key分组&#xff0c;0代表选择第1列作为Keysum&#xff1a;求和&#xff0c;1代表按照第2列进行累加print&#xff1a;打印最终结果 1.WordCount代码编写 需求&am…

如何从零实现一个词云效果

词云是一种文本数据的可视化形式&#xff0c;它富有表现力&#xff0c;通过大小不一&#xff0c;五颜六色&#xff0c;随机紧挨在一起的文本形式&#xff0c;可以在众多文本中直观地突出出现频率较高的关键词&#xff0c;给予视觉上的突出&#xff0c;从而过滤掉大量的文本信息…

Segment Routing IPv6介绍

定义 SRv6&#xff08;Segment Routing IPv6&#xff0c;基于IPv6转发平面的段路由&#xff09;是基于源路由理念而设计的在网络上转发IPv6数据包的一种协议。SRv6通过在IPv6报文中插入一个路由扩展头SRH&#xff08;Segment Routing Header&#xff09;&#xff0c;在SRH中压…

matlab 线性四分之一车体模型

1、内容简介 略 57-可以交流、咨询、答疑 路面采用公式积分来获得&#xff0c;计算了车体位移、非悬架位移、动载荷等参数 2、内容说明 略 3、仿真分析 略 线性四分之一车体模型_哔哩哔哩_bilibili 4、参考论文 略

十一、Qt自定义Widget组件、静态库与动态库

一、自定义Widget组件 1、自定义Widget组件 使用步骤采用提升法&#xff08;promotion&#xff09;重新定义paintEvent事件 2、实现程序 &#xff08;1&#xff09;创建项目&#xff0c;基于QWidget &#xff08;2&#xff09;添加类&#xff0c;为Widget组件提升类 #inclu…