У меня есть следующий pandas объект. Это кадр данных временного ряда OHL C.
Я хотел бы рассчитать EMA30 столбца close
. Для этого я использовал 2 разных подхода, просто в качестве теста.
# Approach A, as explained by sentdex in this video:
# https://youtu.be/t_JXXT7VgeQ?list=PLbLcS9xv6IuGi8uyxMP3-BN-lTRQNpqEG&t=245
def ExpMovingAverage(values, window):
weights = np.exp(np.linspace(-1., 0., window))
weights /= weights.sum()
a = np.convolve(values, weights, mode='full')[:len(values)]
a[:window] = a[window]
return a
# Approach B
pd.Series.ewm(local_df['close'].copy(), span=30).mean()
После вычисления я добавляю их в соответствующие новые столбцы.
# EMA30 (Using approach A)
local_df['ema30_a'] = pd.Series.ewm(local_df['close'].copy(), span=30).mean()
# EMA30 (Using approach B)
x = local_df['close'].values
calculate_ema30_b = ExpMovingAverage(x, 30)
local_df['ema30_b'] = calculate_ema30_b
Полученный кадр данных ниже :
Тем не менее, после построения графика кажется, что pandas (синий) отличается от других подходов, основанных на numpy (красный). В таком случае, какой из методов расчета является правильным?