这些不是计算移动平均线的等效方法

  • 本文关键字:方法 计算 移动 python pandas
  • 更新时间 :
  • 英文 :


我正试图在一列上创建一个移动平均值。以下是以两种不同方式实现的循环:

方法1

for j in range (0,len(dataset_train)):
dataset_train.loc[j+1,'TR'] = max(
abs(dataset_train.loc[j+1,'High']-dataset_train.loc[j+1,'Low']),
abs(dataset_train.loc[j,'Close']-dataset_train.loc[j+1,'Low']),
abs(dataset_train.loc[j+1,'High']-dataset_train.loc[j,'Close']),
)
dataset_train.loc[j+13, 'ATR'] = dataset_train.loc[j:j+13,'TR'].sum()/14

方法2

for j in range (0,len(dataset_train)):
dataset_train.loc[j+1,'TR'] = max(
abs(dataset_train.loc[j+1,'High']-dataset_train.loc[j+1,'Low']),
abs(dataset_train.loc[j,'Close']-dataset_train.loc[j+1,'Low']),
abs(dataset_train.loc[j+1,'High']-dataset_train.loc[j,'Close']),
)
dataset_train.loc[j+13, 'ATR'] = dataset_train.loc[j:j+13,'TR'].mean()

方法1产生0.0002142857142857224,方法2产生0.003000000001137。然而,当我通过print(dataset_train.loc[0:13, 'TR'].sum()/14)print(dataset_train.loc[0:13,'TR'].mean()查看数据集的前14个值时,我得到了两者相同的答案:0.0022857142857143514。

这三段代码的工作方式是否不一致?看起来,如果指数为0,它们都应该得到相同的答案。

编辑:

以下是我正在使用的数据:

print(dataset_train.loc[0:13,'TR'+i])
0     0.000
1     0.003
2     0.002
3     0.002
4     0.004
5     0.002
6     0.002
7     0.002
8     0.003
9     0.002
10    0.002
11    0.003
12    0.002
13    0.003

假设不匹配是最后一行结果:

CCD_ 3实际上计算切片中有多少元素。

.sum()/14没有。无论[j:j+13,'TR']实际切片多少个元素,它都将除以14

看看这个:

>>> l1 = [1, 2, 3, 4]
>>> l1[0:3]
[1, 2, 3]
>>> l1[1:4]
[2, 3, 4]
>>> l1[2:5]
[3, 4]
>>> l1[3:6]
[4]
>>> l1[4:7]
[]

我认为,您只需要将for j in range (0,len(dataset_train)):修改为for j in range (0,len(dataset_train-13)):,因为两种方法之间的结果差异应该位于数据的末尾,在那里休息点的数量将小于14。

最新更新