网站建设公司的电话,欧美做受网站视频播放,xydown wordpress,南通房产网Python 实现 ADTM 指标计算#xff1a;股票技术分析的利器系列#xff08;9#xff09; 介绍算法解释 核心代码rolling函数介绍计算 DTMnp.where 使用介绍np.maximum 计算 DBM计算 STM计算 SBM计算 ADTM 完整代码 介绍
ADTM#xff08;动态买卖气指标#xff09;是一种用… Python 实现 ADTM 指标计算股票技术分析的利器系列9 介绍算法解释 核心代码rolling函数介绍计算 DTMnp.where 使用介绍np.maximum 计算 DBM计算 STM计算 SBM计算 ADTM 完整代码 介绍
ADTM动态买卖气指标是一种用于衡量市场买卖力量对比的指标。它通过计算动态买盘指标DTM和动态卖盘指标DBM之间的差值来反映买卖双方的力量对比情况。
简单点说就是看买家和卖家谁更强的一个东西。就是算一算买盘DTM和卖盘DBM的活跃程度谁大谁小。如果ADTM是正的那就意味着买家比较牛行情可能朝上走反之如果ADTM是负的那就表示卖家势头强股市可能往下走。所以瞅瞅ADTM的数字投资者就能稍微明白点市场的味道更容易决定接下来是涨是跌。当然有些人还会把ADTM搞个移动平均MAADTM就是为了数据更平滑些看长期的买卖势头走向。
先看看官方介绍 ADTM(动态买卖气指标 用法 1.该指标在1到-1之间波动 2.低于-0.5时为很好的买入点,高于0.5时需注意风险。 算法解释
DTM:IF(OPENREF(OPEN,1),0,MAX((HIGH-OPEN),(OPEN-REF(OPEN,1))));
DBM:IF(OPENREF(OPEN,1),0,MAX((OPEN-LOW),(OPEN-REF(OPEN,1))));
STM:SUM(DTM,N);
SBM:SUM(DBM,N);
ADTM:IF(STMSBM,(STM-SBM)/STM,IF(STMSBM,0,(STM-SBM)/SBM));
MAADTM:MA(ADTM,M);指标描述DTM动态买盘指标衡量股价上涨时买盘活跃程度的累加成交量DBM动态卖盘指标衡量股价下跌时卖盘活跃程度的累加成交量STM动态买盘指标和买盘活跃程度总和上涨时SBM动态卖盘指标和卖盘活跃程度总和下跌时ADTM动态买卖气指标买卖气势指标DTM和DBM之差MAADTMADTM的移动平均值ADTM的移动平均值用于观察长期买卖气势趋势
核心代码
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。
计算 DTM 如果当天的开盘价小于等于前一天的开盘价这意味着当天的股价下跌或者持平那么对应的 DTM 值就是 0。 如果当天的开盘价大于前一天的开盘价这意味着当天的股价上涨那么我们要比较两者之间的差值。具体计算方式是用当天的最高价减去当天的开盘价和前一天的开盘价减去前一天的开盘价的差值然后取较大的那个差值作为 DTM 的值。 DTM np.where(df[OPEN] df[OPEN].shift(1), 0,np.maximum(df[HIGH] - df[OPEN], df[OPEN] - df[OPEN].shift(1)))np.where 使用介绍
np.where 是 NumPy 库中的一个函数用于根据条件返回输入数组中的元素。让我用更简单的语言解释一下 np.where 的作用
这个函数有三个参数条件、满足条件时返回的值、不满足条件时返回的值。它的作用就是根据条件来选择返回的值。
例如假设我们有一个数组 arr我们想要根据数组中的每个元素是否大于 0 来返回对应的值如果大于 0我们返回 positive否则返回 non-positive可以这样使用 np.where
import numpy as nparr np.array([1, -2, 3, -4, 5])
result np.where(arr 0, positive, non-positive)
print(result)输出结果将会是 [positive non-positive positive non-positive positive]这就是根据条件返回的结果。
np.maximum
np.maximum 是 NumPy 库中的一个函数用于比较两个数组中对应位置的元素并返回一个新数组该数组包含每个位置上两个数组中较大的元素。
让我用更简单的语言解释一下 np.maximum 的作用
假设我们有两个数组 arr1 和 arr2它们有相同的形状即相同的行数和列数。我们想要创建一个新的数组其中的每个元素都是对应位置上 arr1 和 arr2 中较大的元素。这时我们就可以使用 np.maximum 函数。
例如假设我们有以下两个数组
import numpy as nparr1 np.array([1, 3, 5, 7])
arr2 np.array([2, 4, 6, 8])我们可以使用 np.maximum 函数来比较这两个数组中的元素
result np.maximum(arr1, arr2)
print(result)输出结果将会是 [2 4 6 8]这个新数组中的每个元素都是对应位置上 arr1 和 arr2 中较大的元素。
计算 DBM 如果当天的开盘价大于等于前一天的开盘价这意味着当天的股价上涨或者持平那么对应的 DBM 值就是 0。 如果当天的开盘价小于前一天的开盘价这意味着当天的股价下跌我们要比较两者之间的差值。具体计算方式是用当天的开盘价减去当天的最低价和前一天的开盘价减去前一天的开盘价的差值然后取较大的那个差值作为 DBM 的值。 DBM np.where(df[OPEN] df[OPEN].shift(1), 0,np.maximum(df[OPEN] - df[LOW], df[OPEN] - df[OPEN].shift(1)))
计算 STM 首先将动态买盘指标DTM转换为 Pandas 的 Series 类型。 然后使用 rolling 方法创建一个滚动窗口对象该对象会在指定的窗口大小内对数据进行滚动计算。 在这个例子中windowN 意味着窗口的大小为 N即在 N 天内进行计算。min_periods1 表示即使在窗口期间只有一个非空值也会进行计算。 最后对滚动窗口中的数据进行求和操作得到动态买盘指标和STM。 STM pd.Series(DTM).rolling(windowN, min_periods1).sum()计算 SBM 首先将动态卖盘指标DBM转换为 Pandas 的 Series 类型。 然后使用 rolling 方法创建一个滚动窗口对象该对象会在指定的窗口大小内对数据进行滚动计算。 在这个例子中windowN 意味着窗口的大小为 N即在 N 天内进行计算。min_periods1 表示即使在窗口期间只有一个非空值也会进行计算。 最后对滚动窗口中的数据进行求和操作得到动态卖盘指标和SBM。 SBM pd.Series(DBM).rolling(windowN, min_periods1).sum()计算 ADTM 首先比较动态买盘指标和STM和动态卖盘指标和SBM的大小关系。 如果 STM 大于 SBM则计算公式为 (STM - SBM) / STM表示买盘力量较强时的买卖气指标值。 如果 STM 等于 SBM则将买卖气指标值设为 0表示买卖力量相对平衡。 如果 STM 小于 SBM则计算公式为 (STM - SBM) / SBM表示卖盘力量较强时的买卖气指标值。 ADTM np.where(STM SBM, (STM - SBM) / STM, np.where(STM SBM, 0, (STM - SBM) / SBM))完整代码
import pandas as pd
import numpy as npimport a_get_dataN 23
M 8# 计算ADTM指标
def calculate_ADTM(df, N, M):DTM np.where(df[OPEN] df[OPEN].shift(1), 0,np.maximum(df[HIGH] - df[OPEN], df[OPEN] - df[OPEN].shift(1)))DBM np.where(df[OPEN] df[OPEN].shift(1), 0,np.maximum(df[OPEN] - df[LOW], df[OPEN] - df[OPEN].shift(1)))STM pd.Series(DTM).rolling(windowN, min_periods1).sum()SBM pd.Series(DBM).rolling(windowN, min_periods1).sum()ADTM np.where(STM SBM, (STM - SBM) / STM, np.where(STM SBM, 0, (STM - SBM) / SBM))MAADTM pd.Series(ADTM).rolling(windowM, min_periods1).mean()df[ADTM] ADTMdf[MAADTM] MAADTMdata {CLOSE: 填每日收盘的数据,HIGH: 填每日最高的数据,LOW: 填每日最低的数据OPEN: 填每日开盘的数据
}df pd.DataFrame(data)
# 计算ADTM指标
calculate_ADTM(df, N, M)print(df)