Python 技术指标EMA算法

Python 技术指标EMA算法

算法由python-技术指标-ema算法改进而来

原算法

def get_EMA(df,a):
    for i in range(len(df)):
        if i==0:
            df.ix[i,'ema']=df.ix[i,'close']
        if i>0:
            df.ix[i,'ema']=(1-a)*df.ix[i-1,'close']+a*df.ix[i,'close']
    return df

由于pandas库更新后,.ix已经不适用了,所以官方提供了更好的写法

df.ix[ I ,’ ema ‘] = df.loc[df.index[ I ] , ’ ema ‘]

所以修改后:

def get_EMA(df,a):
    for i in range(len(cps)):
        if i == 0:
            cps.loc[cps.index[i], 'ema'] = cps.loc[cps.index[i], 'close']
        if i > 0:
            cps.loc[cps.index[i], 'ema'] = ((days - 1) * cps.loc[cps.index[i] - 1, 'ema'] + 2 * cps.loc[
                cps.index[i], 'close']) / (days + 1)
    ema = list(cps['ema'])
    return ema

用过之后发现pandas库似乎效率太低了,每次运行的时候都会卡1-2秒,不知道是不是我自己电脑的原因,所以我自己改了一下实现,把卡顿问题解决了,更新后代码如下:

# 获取EMA数据 , cps:close_prices 收盘价集合 days:日期 days=5 5日线
def get_EMA(cps, days):
    emas = cps.copy()  # 创造一个和cps一样大小的集合
    for i in range(len(cps)):
        if i == 0:
            emas[i] = cps[i]
        if i > 0:
            emas[i] = ((days - 1) * emas[i - 1] + 2 * cps[i]) / (days + 1)
    return emas

你可能感兴趣的:(Python 技术指标EMA算法)