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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值