赵走x博客
首页
书籍
软件
工具
古诗词
搜索
登录
29、布林带
28、指数移动平均线
27、简单移动平均线
26、真实波动幅度均值(ATR)
25、周汇总
24、日期分析
23、股票收益率
22、统计分析
21、取值范围:找到最大值和最小值
20、成交量加权平均价格(VWAP)
19、CSV 文件
18、文件读写
17、动手实践:数组的转换
16、数组的属性
15、数组的分割
14、数组的组合
13、动手实践:改变数组的维度
12、动手实践:多维数组的切片和索引
11、一维数组的索引和切片
10、动手实践:创建自定义数据类型
9、dtype 类的属性
8、自定义数据类型
7、字符编码
6、数据类型对象
5、NumPy 数据类型
4、选取数组元素
3、动手实践:创建多维数组
2、NumPy 数组对象
1、动手实践:向量加法
26、真实波动幅度均值(ATR)
资源编号:76413
人工智能
Numpy学习指南
热度:37
ATR(Average True Range,真实波动幅度均值)是一个用来衡量股价波动性的技术指标。 ATR的计算并不是重点,只是作为演示几个NumPy函数的例子,包括maximum函数。
ATR(Average True Range,真实波动幅度均值)是一个用来衡量股价波动性的技术指标。 ATR的计算并不是重点,只是作为演示几个NumPy函数的例子,包括maximum函数。 ### 动手实践:计算真实波动幅度均值 按照如下步骤计算真实波动幅度均值。 * (1) ATR是基于N个交易日的最高价和最低价进行计算的,通常取最近20个交易日。 ``` import numpy as np import sys h, l, c = np.loadtxt('data.csv', delimiter=',', usecols=(4, 5, 6), unpack=True) # N = int(sys.argv[1]) N = 20 h = h[-N:] l = l[-N:] ``` (2) 我们还需要知道前一个交易日的收盘价。 ``` previousclose = c[-N - 1:-1] ``` 对于每一个交易日,计算以下各项。 1. h – l 当日股价范围,即当日最高价和最低价之差。 2. h – previousclose 当日最高价和前一个交易日收盘价之差。 3. previousclose – l 前一个交易日收盘价和当日最低价之差。 * (3) max函数返回数组中的最大值。基于上面计算的3个数值,我们来计算所谓的真实波动幅 度,也就是这三者的最大值。现在我们想在一组数组之间按照元素挑选最大值——也就是在所有 的数组中第一个元素的最大值、第二个元素的最大值等。为此,需要用NumPy中的maximum函数, 而不是max函数。 ``` truerange = np.maximum(h - l, h - previousclose, previousclose - l) ``` * (4) 创建一个长度为N的数组atr,并初始化数组元素为0。 ``` atr = np.zeros(N) ``` (5) 这个数组的首个元素就是truerange数组元素的平均值。 ``` atr[0] = np.mean(truerange) ``` 用如下公式计算其他元素的值: ![-w166](https://img.handsomemark.com/2020/03/08/15836734673313.jpg) 这里,PATR表示前一个交易日的ATR值,TR即当日的真实波动幅度。 ``` for i in range(1, N): atr[i] = (N - 1) * atr[i - 1] + truerange[i] atr[i] /= N ``` ### 刚才做了些什么 我们生成了3个数组,分别表示3种范围——当日股价范围,当日最高价和前一个交易日收盘 价之差,以及前一个交易日收盘价和当日最低价之差。这告诉我们股价波动的范围,也就是波动 性的大小。ATR的算法要求我们找出三者的最大值。而之前使用的max函数只能给出一个数组内 的最大元素值,并非这里所需要的。我们要在一组数组之间挑选每一个元素位置上的最大值,也 就是在所有的数组中第一个元素的最大值、第二个元素的最大值等。在这一节的“动手实践”教 程中,我们了解到maximum函数可以做到这一点。最终,我们根据每一天的真实波动幅度值计算 出一个移动平均值。