当前位置: 首页 > 科技观察

StockIndexMovingAverage

时间:2023-03-20 21:21:37 科技观察

MovingAverageIndicatorinPython用于各种交易策略,以查找价格数据的长期趋势。简单移动平均线策略的一个潜在缺点是它们对所有价格的权重相同,而您可能希望最近的价格具有更大的权重。指数移动平均线(EMA)是一种方法。下面我们通过代码示例详细介绍EMA的实现,并将其与SMA(简单移动平均线)进行比较。EMA通过加权乘数为最新价格赋予更多权重。该乘数应用于最后的价格,因此它比其他数据点占用移动平均线的更大部分。EMA的计算方法是采用最近的价格(我们称之为“时间t的价格”)并减去之前的时间段(EMA_{t-1})。此差异由您将EMA设置为(N)并加回EMA_{t-1}的时间段数加权。在数学上,我们可以这样写:你可能已经注意到上面的方程有点问题,它是怎么开始的?它指的是最后一期的EMA,所以如果你做第一个计算,它指的是什么?这通常可以通过替换简单移动平均线(SMA)来初始化计算来推迟,这样您就可以在第一个之后的所有时间段构建EMA。让我们通过在Python中导入我们的包来展示它是如何工作的。importnumpyasnpimportpandasasspdimportyfinanceeasyfimportmatplotlib.pyplotasplt从这里我们将构建两个函数来协同工作并计算我们的指标。第一个函数将是我们上面概述的公式的简单实现:def_calcEMA(P,last_ema,N):return(P-last_ema)*(2/(N+1))+last_ema第二个函数将计算我们所有的数据的EMA,首先用SMA对其进行初始化,然后迭代我们的数据以使用我们的SMA列中的值更新每个后续条目,或者调用我们上面定义的_calcEMA函数来处理大于N的值。defcalcEMA(data,N):#Initializeseriesdata['SMA_'+str(N)]=data['Close'].rolling(N).mean()ema=np.zeros(len(data))fori,_rowinenumerate(data.iterrows()):row=_row[1]ifi