这是计算移动平均线的有效方法吗?

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

我有一些{open|high|low|close}市场数据。我想从每行的close值计算一个简单移动平均线。

我已经环顾四周,找不到一个简单的方法来做到这一点。我通过以下方法计算了它。我想知道是否有更好的方法:

data = get_data_period_symbol('1h', 'EURUSD')

empty_list = np.zeros(len(data))

data['SMA10'] = empty_list
ma = 10

for i in range(ma-1, len(data)):
    vals = data['<CLOSE>'][i-(ma-1):i+1].tolist()
    mean = np.average(vals)
    index = data.index[i]
    data.set_value(index, 'SMA10', mean)
python pandas dataframe moving-average
3个回答
4
投票

熊猫提供了这类物品所需的所有工具。假设您的数据按时间索引:

data['SMA10'] = data['<close>'].rolling(window=10).mean()

瞧。

编辑:我想只是注意新的api用法。引自Pandas docs

警告在版本0.18.0之前,pd.rolling_,pd.expanding_和pd.ewm *是模块级功能,现在已弃用。这些被使用Rolling,Expanding和EWM取代。对象和相应的方法调用。


1
投票
data['SMA10'] = pd.rolling_mean(data['<CLOSE>'][:], 10)

是我原来找到的解决方案,但是你得到一个警告说它已被弃用了

因此:

data['SMA10'] = data['<CLOSE>'][:].rolling(window=10, center=False).mean()

0
投票

你可以按照np.convolve的建议使用answer。所以像这样的东西应该工作:

data.loc[ma-1:, "SMA10"] = np.convolve(data["<CLOSE>"], np.ones((ma,))/ma, mode="valid")

PS:我刚看到你自己的答案,这实际上是一个更好的解决方案!

© www.soinside.com 2019 - 2024. All rights reserved.