用Python编码指数移动平均线

编程入门 行业动态 更新时间:2024-10-26 22:22:14
本文介绍了用Python编码指数移动平均线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想对数据框df的三列进行计算.为此,我想在三列表中运行资产价格(加密货币)列表,以便在拥有足够的数据后计算它们的指数移动平均值.

I want to do calculations on three columns of a dataframe df. In order to do that I want run a price of assets (cryptocurrencies) list in a three column table in order to calculate the exponential moving average of them after having enough data.

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?).因此,我无法循环.如何解决此错误以获得资产的指数移动平均值?

Yet, when I print what's in len(column)-24 I get -21 (-24 + 3 ?). I can't therefore go through the loop. How can I cope with this error to get exponential moving average of the assets ?

我试图将此链接来自iexplain 应用于伪指数移动平均线的代码.

I tried to apply this link from iexplain for the pseudo code of the exponential moving average.

如果您有更简单的想法,我很乐意听到.

If you have any easier idea, I'm open to hear it.

这里是我用来计算错误的数据:

Here is the data that I use to calculate it when it bugs :

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

从原始答案中删除

推荐答案

pandas.stats.moments.ewma.

相反,您可以按照这里.

下面是一个包含随机数据的完整代码段,该数据段使用指定列中的已计算出的ewmas构建了一个数据框.

Below is a complete snippet with random data that builds a dataframe with calculated ewmas from specified columns.

代码:

# imports import pandas as pd import numpy as np np.random.seed(123) rows = 50 df = pd.DataFrame(np.random.randint(90,110,size=(rows, 3)), columns=['BTC', 'ETH', 'DASH']) datelist = pd.date_range(pd.datetime(2017, 1, 1).strftime('%Y-%m-%d'), periods=rows).tolist() df['dates'] = datelist df = df.set_index(['dates']) df.index = pd.to_datetime(df.index) def ewmas(df, win, keepSource): """Add exponentially weighted moving averages for all columns in a dataframe. Arguments: df -- pandas dataframe win -- length of ewma estimation window keepSource -- True or False for keep or drop source data in output dataframe """ df_temp = df.copy() # Manage existing column names colNames = list(df_temp.columns.values).copy() removeNames = colNames.copy() i = 0 for col in colNames: # Make new names for ewmas ewmaName = colNames[i] + '_ewma_' + str(win) # Add ewmas #df_temp[ewmaName] = pd.stats.moments.ewma(df[colNames[i]], span = win) df_temp[ewmaName] = df[colNames[i]].ewm(span = win, adjust=True).mean() i = i + 1 # Remove estimates with insufficient window length df_temp = df_temp.iloc[win:] # Remove or keep source data if keepSource == False: df_temp = df_temp.drop(removeNames,1) return df_temp # Test run df_new = ewmas(df = df, win = 22, keepSource = True) print(df_new.tail())

输出:

BTC ETH DASH BTC_ewma_22 ETH_ewma_22 DASH_ewma_22 dates 2017-02-15 91 96 98 98.752431 100.081052 97.926787 2017-02-16 100 102 102 98.862445 100.250270 98.285973 2017-02-17 100 107 97 98.962634 100.844749 98.172712 2017-02-18 103 102 91 99.317826 100.946384 97.541684 2017-02-19 99 104 91 99.289894 101.214755 96.966758

绘制,使用df_new[['BTC', 'BTC_ewma_22']].plot():

更多推荐

用Python编码指数移动平均线

本文发布于:2023-10-15 02:27:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1492981.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:平均   指数   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!