网站建设专家cms,html5在线代码编辑器,服装外包加工网,seo推广培训Python 实现 OBV 指标计算#xff1a;股票技术分析的利器系列#xff08;7#xff09; 介绍算法解释 代码rolling函数介绍核心代码计算 VA 列计算 OBV 列计算 MAOBV 完整代码 介绍
OBV 指标是“On-Balance Volume”的缩写#xff0c;意为“量价平衡指标”。它是一种用于衡… 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(CLOSEREF(CLOSE,1),VOL,-VOL);
OBV:SUM(IF(CLOSEREF(CLOSE,1),0,VA),0);
MAOBV:MA(OBV,M);VA 计算 这行代码首先计算了 VAVolume Accumulation。CLOSE REF(CLOSE, 1) 是一个条件检查当前收盘价是否高于前一天的收盘价。如果当前收盘价高于前一天的收盘价则 VA 为当日成交量VOL否则为当日成交量的负值-VOL。 OBV 计算 这行代码计算了 OBVOn-Balance Volume。IF(CLOSEREF(CLOSE,1),0,VA) 这一部分首先判断当前收盘价是否等于前一天的收盘价如果相等则对应的 VA 为 0否则为 VA 的值。然后使用 SUM 函数对这些 VA 值进行累加得到 OBV。 MAOBV 计算 这行代码计算了 MAOBVMoving Average of OBV。MA(OBV, M) 是对 OBV 列进行移动平均计算其中 M 是移动平均窗口的大小。
代码
rolling函数介绍
rolling 函数通常与其他函数如 mean、sum、std 等一起使用以计算滚动统计量例如滚动均值、滚动总和等。
以下是 rolling 函数的基本语法
DataFrame.rolling(window, min_periodsNone, centerFalse, win_typeNone, onNone, axis0, closedNone)window: 用于计算统计量的窗口大小。min_periods: 每个窗口最少需要的非空观测值数量。center: 确定窗口是否居中默认为 False。win_type: 窗口类型例如 None、boxcar、triang 等默认为 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(windowM).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(windowM).mean()# 打印结果
print(df)