pandas 中指数移动平均线(ewm)的反演公式

问题描述 投票:0回答:1

我创建了这个 pandas 数据框

import pandas as pd

ds = {'col1' : [1,2,3,4,3,3,2,2,2,4,5,6,7,5,4,3,2,2,4,5,12]}
df = pd.DataFrame(data=ds)

数据集如下所示:

display(df)

    col1
0     1
1     2
2     3
3     4
4     3
5     3
6     2
7     2
8     2
9     4
10    5
11    6
12    7
13    5
14    4
15    3
16    2
17    2
18    4
19    5
20   12

我现在计算 3 周期指数移动平均线如下:

time_window = 3
df['ema3'] = df['col1'].ewm(com=time_window - 1,
                        min_periods=time_window).mean()

生成的数据框如下所示:

    col1    ema3
0   1        NaN
1   2        NaN
2   3   2.263158
3   4   2.984615
4   3   2.990521
5   3   2.993985
6   2   2.642059
7   2   2.419350
8   2   2.275833
9   4   2.860698
10  5   3.582139
11  6   4.394353
12  7   5.267388
13  5   5.177952
14  4   4.784403
15  3   4.188695
16  2   3.458389
17  2   2.971930
18  4   3.314775
19  5   3.876685
20  12  6.585000

问题:

col1
的什么值会返回记录
21
的 EMA 8.12?

    col1    ema3
0   1        NaN
1   2        NaN
2   3   2.263158
3   4   2.984615
4   3   2.990521
5   3   2.993985
6   2   2.642059
7   2   2.419350
8   2   2.275833
9   4   2.860698
10  5   3.582139
11  6   4.394353
12  7   5.267388
13  5   5.177952
14  4   4.784403
15  3   4.188695
16  2   3.458389
17  2   2.971930
18  4   3.314775
19  5   3.876685
20  12  6.585000
21  ??  8.120000

是否有一个公式可以反转

ewm
并给出
col1
的值,使得记录 21 处的 EMA 为 8.12000? 我不想重复很多值。我问是否有人知道一个公式(我可以用 python 编写)。

谢谢!

pandas dataframe formula moving-average
1个回答
0
投票

指数加权移动平均线定义如下:

EWMA(t) = a * value(t) + (1-a) * EWMA(t-1)

就您而言,您想要

value(t)
并且您知道
EWMA(t) = 8.12
EWMA(t-1) = 6.585
以及
a = 1/(1+com)
。您可以这样解决:

com = time_window - 1
a = 1/(1+com) # 0.333
x = (8.12 - (1-a)*6.585) / a

输出:

11.189999999999996

验证(不精确):

     col1      ema3
0    1.00       NaN
1    2.00       NaN
2    3.00  2.263158
3    4.00  2.984615
4    3.00  2.990521
5    3.00  2.993985
6    2.00  2.642059
7    2.00  2.419350
8    2.00  2.275833
9    4.00  2.860698
10   5.00  3.582139
11   6.00  4.394353
12   7.00  5.267388
13   5.00  5.177952
14   4.00  4.784403
15   3.00  4.188695
16   2.00  3.458389
17   2.00  2.971930
18   4.00  3.314775
19   5.00  3.876685
20  12.00  6.585000
21  11.19  8.120205
© www.soinside.com 2019 - 2024. All rights reserved.