如何在Python中计算指数移动平均值

如何在Python中计算指数移动平均值,python,moving-average,algorithmic-trading,trading,Python,Moving Average,Algorithmic Trading,Trading,我一直在尝试计算股票价格的指数移动平均值(EMA)。我有以下方法: def ema(自身、价格、期间): 如果len(价格)

我一直在尝试计算股票价格的指数移动平均值(EMA)。我有以下方法:

def ema(自身、价格、期间):
如果len(价格)<期限:
返回“数据不足,无法计算均线”
返回self.ema_helper(价格,期间,(2/(期间+1)),len(价格))
def ema_助手(自身、价格、N、k、长度):
如果len(价格)=长度-N:
退货价格[0]
返回价格[0]*k+self.ema\u helper(价格[1:],N,k,长度)*(1-k)
我要偏离这个公式:

EMA = Price(t) × k + EMA(y) × (1 − k)

where:
t = today
y = yesterday
N = number of days in EMA
k = 2 ÷ (N + 1)
为什么不计算均线

这是我正在使用的数据集:(从最新的价格
22.27
到最旧的价格
22.17


期间是EMA中的天数。我假设一个
10天均线

你的均线使用昨天的结果,所以这需要保留。可能更愿意使用这样的列表(这当然可以清理和改进,我刚刚更改了ema_助手):

这就产生了

[22.27, 22.19, 22.08, 22.17, 22.18, 22.13, 22.23, 22.43, 22.24, 22.29, 22.264545454545452, 22.287355371900823, 22.304199849737035, 22.359799877057576, 22.541654444865287, 22.815899091253414, 22.98573562011643, 23.139238234640715, 23.286649464706038, 23.349076834759483, 23.434699228439577, 23.513844823268744, 23.538600309947153, 23.475218435411307, 23.406996901700158, 23.3929974650274, 23.263361562295145, 23.233659460059663, 23.082085012776083, 22.916251374089523]
对于您的数据集。(我假设您是从中获取的),这些值对应

如果只需要最后一个值,也可以使用(此处无需列出):


它给出了
22.916251374089523
(或者只取最后一个列表项
res_ema[-1]
)。

我是如何得到数据的?我如何使它只返回当前的ema而不返回以前的ema?啊,有趣的是,他们使用了相同的数据集!我已经在我的答案中添加了这个选项。为什么你提供的均线对上面的链接给出了不同的答案?哦,链接(右边最后一个列表条目)中的10天均线读数为22.916,相同。我看错专栏了吗?好的,很酷,非常感谢你的帮助
def ema_helper(prices, N, k, length):
    if len(prices) == length-N:
        return prices[0]
    res_ema = [p for p in prices[:N]] # this keeps the ema
    for t in range(N, length):
        res_ema.append(prices[t] * k + res_ema[t-1] * (1 - k))
    return res_ema
[22.27, 22.19, 22.08, 22.17, 22.18, 22.13, 22.23, 22.43, 22.24, 22.29, 22.264545454545452, 22.287355371900823, 22.304199849737035, 22.359799877057576, 22.541654444865287, 22.815899091253414, 22.98573562011643, 23.139238234640715, 23.286649464706038, 23.349076834759483, 23.434699228439577, 23.513844823268744, 23.538600309947153, 23.475218435411307, 23.406996901700158, 23.3929974650274, 23.263361562295145, 23.233659460059663, 23.082085012776083, 22.916251374089523]
def ema_helper(prices, N, k, length):
    if len(prices) == length-N:
        return prices[0]
    res_ema = prices[N-1]
    for t in range(N, length):
        res_ema = (prices[t] * k + res_ema * (1 - k))
    return res_ema