我想對數據框的三列進行計算df
。爲了做到這一點,我想在三列表中運行資產(cryptocurrencies)列表的價格,以便在獲得足夠數據後計算它們的指數移動平均值。用Python編碼指數移動平均值
def calculateAllEMA(self,values_array):
df = pd.DataFrame(values_array, columns=['BTC', 'ETH', 'DASH'])
column_by_search = ["BTC", "ETH", "DASH"]
print(df)
for i,column in enumerate(column_by_search):
ema=[]
# over and over for each day that follows day 23 to get the full range of EMA
for j in range(0, len(column)-24):
# Add the closing prices for the first 22 days together and divide them by 22.
EMA_yesterday = column.iloc[1+j:22+j].mean()
k = float(2)/(22+1)
# getting the first EMA day by taking the following day’s (day 23) closing price multiplied by k, then multiply the previous day’s moving average by (1-k) and add the two.
ema.append(column.iloc[23 + j]*k+EMA_yesterday*(1-k))
print("ema")
print(ema)
mean_exp[i] = ema[-1]
return mean_exp
然而,當我打印什麼在len(column)-24
我得到-21(-24 + 3?)。因此我不能通過循環。我該如何處理這個錯誤以獲得資產的指數移動平均值?
我試圖將this link from iexplain.com用於指數移動平均值的僞代碼。
如果您有任何更簡單的想法,我很樂意聽到它。
這裏是我用來計算它時,它的錯誤數據:
BTC ETH DASH
0 4044.59 294.40 196.97
1 4045.25 294.31 196.97
2 4044.59 294.40 196.97
3 4045.25 294.31 196.97
4 4044.59 294.40 196.97
5 4045.25 294.31 196.97
6 4044.59 294.40 196.97
7 4045.25 294.31 196.97
8 4045.25 294.31 196.97
9 4044.59 294.40 196.97
10 4045.25 294.31 196.97
11 4044.59 294.40 196.97
12 4045.25 294.31 196.97
13 4045.25 294.32 197.07
14 4045.25 294.31 196.97
15 4045.41 294.46 197.07
16 4045.25 294.41 197.07
17 4045.41 294.41 197.07
18 4045.41 294.47 197.07
19 4045.25 294.41 197.07
20 4045.25 294.32 197.07
21 4045.43 294.35 197.07
22 4045.41 294.46 197.07
23 4045.25 294.41 197.07
如果你不這樣做會這純粹是一個學習的過程,你應該知道,熊貓已經內置了指數加權移動平均計算: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.ewm.html –
大熊貓 文檔中有更多。 https://pandas.pydata.org/pandas-docs/stable/computation.html –