Python 实现 OBV 指标计算:股票技术分析的利器系列(7)

Python 实现 OBV 指标计算:股票技术分析的利器系列(7)

    • 介绍
      • 算法解释
    • 代码
      • rolling函数介绍
      • 核心代码
        • 计算 VA 列
        • 计算 OBV 列
        • 计算 MAOBV
    • 完整代码


介绍

OBV 指标是“On-Balance Volume”的缩写,意为“量价平衡指标”。它是一种用于衡量买卖压力的技术分析工具,主要基于成交量的变化来预测价格趋势。OBV 指标的计算方法很简单,它将每日的成交量根据价格变动分为买入量和卖出量,然后根据这些量的正负来对当前价格走势形成判断。

OBV 指标的基本原理是,如果某一天的收盘价高于前一天的收盘价,则当天的成交量被视为买入量,反之则被视为卖出量。通过累加这些买入量和卖出量,形成一个持续增加或减少的曲线,这条曲线反映了资金流入和流出的情况。当 OBV 曲线上升时,意味着成交量在上涨,市场上存在着买盘力量;反之,当 OBV 曲线下降时,意味着成交量在下降,市场上存在着卖盘力量。

先看看官方介绍:

OBV (累积能量线)
用法
1.股价一顶比一顶高,而OBV 一顶比一顶低,暗示头部即将形成;
2.股价一底比一底低,而OBV 一底比一底高,暗示底部即将形成;
3.OBV 突破其 N 字形波动的高点次数达5 次时,为短线卖点;
4.OBV 跌破其 N 字形波动的低点次数达5 次时,为短线买点;
5.OBV 与ADVOL、PVT、WAD、ADL同属一组指标群,使用时应综合研判。

算法解释

VA:=IF(CLOSE>REF(CLOSE,1),VOL,-VOL);
OBV:SUM(IF(CLOSE=REF(CLOSE,1),0,VA),0);
MAOBV:MA(OBV,M);
  1. VA 计算

    • 这行代码首先计算了 VA(Volume Accumulation)。
    • CLOSE > REF(CLOSE, 1) 是一个条件,检查当前收盘价是否高于前一天的收盘价。
    • 如果当前收盘价高于前一天的收盘价,则 VA 为当日成交量(VOL);否则为当日成交量的负值(-VOL)。
  2. OBV 计算

    • 这行代码计算了 OBV(On-Balance Volume)。
    • IF(CLOSE=REF(CLOSE,1),0,VA) 这一部分首先判断当前收盘价是否等于前一天的收盘价,如果相等,则对应的 VA 为 0,否则为 VA 的值。
    • 然后使用 SUM 函数对这些 VA 值进行累加,得到 OBV。
  3. MAOBV 计算

    • 这行代码计算了 MAOBV(Moving Average of OBV)。
    • MA(OBV, M) 是对 OBV 列进行移动平均计算,其中 M 是移动平均窗口的大小。

代码

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

核心代码

计算 VA 列
# 计算 VA 列
df['VA'] = df['VOL'].where(df['CLOSE'] > df['CLOSE'].shift(1), -df['VOL'])

VA 列也被称为 “Volume Adjustment”(成交量调整)列。它表示在价格上涨时和价格下跌时的成交量调整值,根据收盘价与前一日收盘价的比较情况来确定是正值还是负值。因此,它可以用来衡量价格变动对成交量的影响,有助于理解买卖压力的变化

计算 OBV 列
# 计算 OBV 列
df['OBV'] = df['VA'].where(df['CLOSE'] != df['CLOSE'].shift(1), 0).cumsum()

OBV 列通常也称为"On-Balance Volume"(量价平衡指标)列。 OBV 是一种累积型的指标,用于衡量买入和卖出压力的相对强度。 OBV 列的数值根据成交量的变化以及价格走势的涨跌而增加或减少,它反映了资金流入和流出的情况。 OBV 列的变化可以帮助分析者判断价格趋势的强弱以及市场的买卖力量对比情况。

计算 MAOBV
# 计算 MAOBV
M = 30
df['MAOBV'] = df['OBV'].rolling(window=M).mean()

完整代码

import pandas as pdimport a_get_datadata = {'CLOSE': 填每日收盘的数据,'VOL': 填每日交易量的数据
}df = pd.DataFrame(data)
# 计算 VA 列
df['VA'] = df['VOL'].where(df['CLOSE'] > df['CLOSE'].shift(1), -df['VOL'])# 计算 OBV 列
df['OBV'] = df['VA'].where(df['CLOSE'] != df['CLOSE'].shift(1), 0).cumsum()# 计算 MAOBV
M = 30
df['MAOBV'] = df['OBV'].rolling(window=M).mean()# 打印结果
print(df)

在这里插入图片描述

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

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

相关文章

《游戏引擎架构》 -- 学习4

资源及文件系统 文件系统 游戏引擎的文件系统API通常提供以下功能: 搜需路径:是含一串路径的字符串,各路径之间以特殊字符(如冒号或分号)分隔,找文件时就会从这些路径进行搜寻。例如在命令行下执行程序&a…

Code Composer Studio (CCS) - 全局搜索功能

Code Composer Studio [CCS] - 全局搜索功能 1. Ctrl H,全局搜索功能References 1. Ctrl H,全局搜索功能 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

VS和QT联合开发

提示:本文为学习记录,若有疑问,请联系作者,谦虚受教。 文章目录 前言一、安装二、新建项目1.VS打不开UI文件2.VS找不到QT对应的版本号三、其他问题1.vs无法识别加载ui新添加的控件2.UI界面出现中文乱码3.修改VS字体颜色4.自动代码补全功能5.添加<QtSerialPort/qserialpo…

【AI大模型】ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

Leetcode | 231. 2 的幂 C语言

Problem: 231. 2 的幂 文章目录 思路解题方法Code 思路 说白了就是靠硬算&#xff0c;但是要知道对sum不进行控制就会导致直接超标&#xff0c;所以要在for循环的条件中加上sum < n 解题方法 由思路可知 Code bool isPowerOfTwo(int n) {long int sum 1;for(int i 0; i &…

拉伸图片覆盖整个页面的css写法

如果您想要拉伸一张图片以覆盖整个页面&#xff0c;可以使用以下CSS代码&#xff1a; body {margin: 0;padding: 0;height: 100%;background-image: url(your-image-url.jpg); /* 替换为您的图片URL */background-size: cover;background-position: center center; /* 可选&…

vue3+vite项目中显示SVG图片

使用vite显示本地svg图标 vite-plugin-svg-icons是一个Vite插件&#xff0c;其作用是将SVG图标文件转换为Vue组件&#xff0c;以便在Vue项目中使用。 使用vite-plugin-svg-icons插件&#xff0c;可以将SVG图标文件导入到项目中&#xff0c;并将其转换为可复用的Vue组件。这样&a…

语文成绩(洛谷)

题目 原题 题目背景 语文考试结束了&#xff0c;成绩还是一如既往地有问题。 题目描述 语文老师总是写错成绩&#xff0c;所以当她修改成绩的时候&#xff0c;总是累得不行。她总是要一遍遍地给某些同学增加分数&#xff0c;又要注意最低分是多少。你能帮帮她吗&#xff1f; 输…

【springboot】 `@Column` 注解的使用

定义一个实体的属性时&#xff0c;如果和数据库的列名不一致的时候&#xff0c;需要用column 建立映射关系。 Column 是 Java 持久化 API&#xff08;Java Persistence API&#xff0c;JPA&#xff09;中的注解之一&#xff0c;用于指定实体类中属性与数据库表中列的映射关系。…

2024牛客(4)K题

登录—专业IT笔试面试备考平台_牛客网 using i64 long long; using ll long long; constexpr ll M 1e9 7; template<class Info> struct SegmentTree {int n;std::vector<Info> info;SegmentTree() : n(0) {}SegmentTree(int n_, Info v_ Info()) {init(n_, …

Vue样式绑定

1. 绑定 HTML class ①通过class名称的bool值判断样式是否被启用 <template><!--通过样式名称是否显示控制样式--><div :class"{ haveBorder: p.isBorder, haveBackground-color: p.isBackgroundcolor }">此处是样式展示区域</div><br /…

Linux篇:开发工具yum/vim/gcc/g++/Makefile/gdb

一. yum&#xff1a;软件包管理器 什么是软件包&#xff1f; 在Linux 下安装软件 , 一个通常的办法是下载到程序的源代码 , 并进行编译 , 得到可执行程序 . 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好 , 做成软件包 (可以理解成windows 上的安装程序) 放在…

Linux C++ 字符编码转换 GBK与UTF8互转

Linux 下使用 iconv 命令可以转换文件的编码 iconv -f GBK -t UTF-8 input_file -o output_fileC 代码 使用 iconv 函数 iconv 函数签名&#xff1a; size_t iconv(iconv_t cd,、 char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); 需要注意的是&…

Python基础20 面向对象(3)多态、封装、反射

文章目录 一、多态1、什么是多态2、多态小实验 二、封装1、什么是封装2、内部属性的约定 三、反射1、什么是反射2、四个实现自省的函数&#xff08;1&#xff09;hasattr(object,name)&#xff08;2&#xff09;getattr(object,name,defaultNone)&#xff08;3&#xff09;seta…

神秘人暗访:行政窗口为什么要开展神秘顾客调研

在竞争日益激烈的服务市场中&#xff0c;行政窗口作为公共服务的直接提供者&#xff0c;其服务质量的好坏直接关系到政府的形象和公众对政府的信任度。为了更好地满足市民的需求&#xff0c;提升服务质量&#xff0c;开展神秘顾客调查显得尤为重要。神秘顾客调查的必要性包括以…

内网穿透的应用-如何本地部署Elasticsearch搜索分析引擎实现并发布公网远程访问

文章目录 系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装 Cpolar4. 创建Elasticsearch公网访问地址5. 远程访问Elasticsearch6. 设置固定二级子域名 Elasticsearch是一个基于Lucene库的分布式搜索和分析引擎&#xff0c;它提供了一个分布式、多…

探索Flask框架:打造优雅而强大的Web应用

在当今互联网时代&#xff0c;Web应用的需求日益增长&#xff0c;而作为开发者&#xff0c;我们需要一个简洁明快、灵活可扩展的框架来满足这些需求。Flask框架作为一个Python微型框架&#xff0c;在其简洁的设计理念和丰富的扩展生态系统之间找到了完美的平衡&#xff0c;为我…

洛谷--二分(Java实现)

洛谷 B3627 立方根 题目描述 给定正整数 n&#xff0c;求 √n​。答案向下取整。 输入格式 仅一行&#xff0c;一个正整数 n。 输出格式 仅一行&#xff0c;一个正整数&#xff0c;表示√n。向下取整输出。 输入输出样例 输入 #1 27 输出 #1 3 输入 #2 100000 输…

ORACLE之 decode函数

语法&#xff1a; DECODE(expression, search1, result1, search2, result2, ..., default_result) 其中&#xff0c;expression是要进行比较的表达式&#xff0c;search1, search2等是可能的值&#xff0c;result1, result2等是对应的结果。如果expression等于search1&#x…

Java类的成员、继承、多态

当谈论Java类的成员、继承和多态时&#xff0c;我们谈论的是面向对象编程的基本概念。让我逐一介绍&#xff1a; 1. **成员**&#xff1a; - **字段&#xff08;Field&#xff09;**&#xff1a;也称为属性或变量&#xff0c;用于存储对象的状态信息。 - **方法&#xf…