Когда я хочу вычислить взвешенное скользящее среднее для 2771 строки и мой n = 3, я получаю 77783.446664 для 2771 строки (те же ответы).Что-то не так с моим кодом.Что мне нужно изменить?
Мои данные выглядят так:
Date, Open, High, Low, Close, Adj Close, Volume
11/16/2007,228.259995,229.570007,222.570007,225.25,196.770523,10083400
11/19/2007,223.520004,228.399994,216.619995,220.539993,192.656067,11007900
11/20/2007,220.399994,226.229996,213.5,217.479996,189.982925,13433000
11/21/2007,213.410004,215.270004,206.440002,209.5,183.011887,14874300
11/23/2007,212.520004,216.479996,211.800003,216.479996,189.109329,4737100
11/26/2007,214.649994,217.449997,205.419998,207.449997,181.221085,9815200
11/27/2007,210,213.979996,206.190002,213.330002,186.357651,11946400
11/28/2007,217.580002,227.860001,217.080002,227.520004,198.753555,15710600
11/29/2007,226.020004,228.309998,222.5,224.380005,196.010559,9774200
11/30/2007,232.649994,234.220001,224.770004,226.639999,197.984848,11878600
12/3/2007,226.089996,229.350006,223.600006,226.889999,198.203201,6800300
Мой код:
import pandas as pd
#WMA = ( Price n + Price(1) n-1 + ...+Price( n-1 ) 1) / ( n ( n + 1 ) / 2 ), (n = time period).
def wma(data, n):
for i in range(n, 0, -1):
data[abs(n-i)] = i * data[abs(n-i)]
print(data[i])
return sum(data) / ((n * (n + 1)) / 2)
data_pd = pd.read_csv('GS.csv')
format = '%m/%d/%Y'
data_pd['Date'] = pd.to_datetime(data_pd['Date'], format=format)
data_pd = data_pd.set_index(data_pd['Date'])
data_pd = data_pd.drop(columns=['Date'])
n1 = 3
data_pd['wma'] = wma(data_pd['Close'].values, n1)