python - 尝试使用 python 计算 EMA,但我无法弄清楚为什么我的代码总是产生相同的结果
问题描述
我试图在 python2.7 中计算比特币的指数移动平均值,但我的结果总是相同的值,我不知道为什么。
def calcSMA(data,counter,timeframe):
closesum = 0
for i in range(timeframe):
closesum = float(closesum) + float(data[counter-i])
return float(closesum / timeframe)
def calcEMA(price,timeframe,prevema):
multiplier = float(2/(timeframe+1))
ema = ((float(price) - float(prevema))*multiplier) + float(prevema)
return float(ema)
counter = 0
closeprice = [7242.4,7240,7242.8,7253.8,7250.6,7255.7,7254.9,7251.4,7234.3,7237.4
,7240.7,7232,7230.2,7232.2,7236.1,7230.5,7230.5,7230.4,7236.4]
while counter < len(closeprice):
if counter == 3:
movingaverage = calcSMA(closeprice,counter,3)
print movingaverage
if counter > 3:
movingaverage = calcEMA(closeprice[counter],3,movingaverage)
print movingaverage
counter +=1
这是计算 EMA 的方法:{收盘价 - EMA(前一天)} x 乘数 + EMA(前一天)您使用简单的移动平均线为公式播种。
在 Excel 中这样做是可行的,所以这可能是我使用变量的原因吗?
如果有人能告诉我我做错了什么,我会非常高兴,因为我在这个简单的问题上失败了几个小时并且无法弄清楚我已经尝试将我以前的 ema 存储在一个单独的变量中,我什至存储了所有它们在列表中,但我总是在每个时间步得到相同的值。
解决方案
表达式2/(timeframe+1)
始终为零,因为分量都是整数,因此 Python 2 使用整数除法。包装结果float()
没有好处;你只是得到0.0
而不是0
.
试试2.0/(timeframe+1)
吧。
推荐阅读
- graphql - 如何根据在 python 中动态给出的多个不同标签获取 shopify 产品?
- css - 即使滚动也无法看到页面的全部内容
- php - 是否有格式为“yyy-mm-dd hh-mm-ss”的 HTML 日期时间输入?
- python - 熊猫数据透视表
- node.js - 将标准输出用于 node.js / express 时出现 ERR_HTTP_HEADERS_SENT 错误
- python - Python .join 交互未按预期工作
- r - 检查多个 NA 列并在 R 中返回另一列
- r - 将函数应用于多个文件并处理生成的数据帧
- python - 从表中获取所有关系的列表 Flask SQLalchemy
- c# - 使用取消令牌为用户定义的函数设置超时