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

2024-02-23 05:04

本文主要是介绍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)

在这里插入图片描述

这篇关于Python 实现 OBV 指标计算:股票技术分析的利器系列(7)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/737590

相关文章

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被