python计算ema_python – 添加一个列(EMA),它是pandas中先前新列值的结果

我的Orignal数据框如下:

Date C

0 a

1 b

2 c

3 d

这是股票数据.

0,1,2,3是次,C:关闭是浮点数.

我需要能够将EMA(指数移动平均线)的列添加到通过从当前C列计算得到的orignal数据帧

和之前的新专栏(‘EMA’).

所以结果应该是这样的

C EMA

0 a start value as ema0

1 b (ema0*alpha) + (b * (1-alpha)) as ema1

2 c (ema1*alpha) + (c * (1-alpha)) as ema2

3 d (ema2*alpha) + (d * (1-alpha)) as ema3

4 e (ema3*alpha) + (e * (1-alpha)) as ema4

... ... ....

起始值是一个简单的平均值,所以我尝试了以下方法.

这是创造起始价值的第一个条件

但在计算EMA值时,它不适用于第二个条件.

ema_period = 30

myalpha = 2/(ema_period+1)

data['EMA'] = np.where(data['index'] < ema_period,data['C'].rolling(window=ema_period, min_periods=ema_period).mean(), data['C']*myalpha +data['EMA'].shift(1)*(1-myalpha) )

最佳答案 附带图片中所需的EWMA:

码:

ema_period = 12 # change it to ema_period = 30 for your case

myalpha = 2/(ema_period+1)

# concise form : df.expanding(min_periods=12).mean()

df['Expand_Mean'] = df.rolling(window=len(df), min_periods=ema_period).mean()

# obtain the very first index after nulls

idx = df['Expand_Mean'].first_valid_index()

# Make all the subsequent values after this index equal to NaN

df.loc[idx:, 'Expand_Mean'].iloc[1:] = np.NaN

# Let these rows now take the corresponding values in the Close column

df.loc[idx:, 'Expand_Mean'] = df['Expand_Mean'].combine_first(df['Close'])

# Perform EMA by turning off adjustment

df['12 Day EMA'] = df['Expand_Mean'].ewm(alpha=myalpha, adjust=False).mean()

df

获得EWMA:

DF结构:

index = ['1/2/2013','1/3/2013','1/4/2013','1/7/2013','1/8/2013','1/9/2013', '1/10/2013','1/11/2013',

'1/14/2013','1/15/2013','1/16/2013','1/17/2013','1/18/2013','1/22/2013','1/23/2013',

'1/24/2013','1/25/2013','1/28/2013','1/29/2013','1/30/2013']

data = [42.42, 43.27, 43.66, 43.4, 43.4, 44.27, 45.01, 44.48, 44.34,

44.44, 44.08, 44.16, 44.04, 43.74, 44.27, 44.11, 43.93, 44.35,

45.21,44.92]

df = pd.DataFrame(dict(Close=data), index)

df.index = pd.to_datetime(df.index)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值