我有个问题。我正在努力计算烛台清单上的移动平均值。为了做到这一点,我有这样的想法:
def calculate(ma, candlesticks):
maData = []
i = 0
while i < len(candlesticks) - ma + 1:
# Calculate the average of current window
movingAverage = round(np.sum(candlesticks[i:i+ma]) / ma, 2)
# Store the moving average
maData.append(movingAverage)
# Shift window to right by one position
i += 1
return maData我遇到的问题是烛台列表包含有属性的对象。我需要计算关口上的移动平均值,所以我想我使用:
movingAverage = round(np.sum(candlesticks[i:i+ma].close) / ma, 2)但是蟒蛇说:
AttributeError: 'list' object has no attribute 'close'当我打印candlesticks[i:i+ma]时,这个循环的第一轮给出了以下结果
[{'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1577836800000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 41.29, 'high': 42.08, 'low': 41.16, 'close': 41.16, 'volume': 110044.87445}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1577923200000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 41.58, 'high': 41.74, 'low': 39.17, 'close': 39.17, 'volume': 194486.2157}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578009600000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 39.44, 'high': 42.39, 'low': 38.77, 'close': 38.77, 'volume': 426771.00676}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578096000000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 42.23, 'high': 42.9, 'low': 41.77, 'close': 41.77, 'volume': 248814.62818}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578182400000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 42.79, 'high': 44.61, 'low': 42.6, 'close': 42.6, 'volume': 291964.84958}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578268800000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 43.29, 'high': 46.08, 'low': 43.16, 'close': 43.16, 'volume': 384930.9909}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578355200000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 45.8, 'high': 47.03, 'low': 44.48, 'close': 44.48, 'volume': 493847.10532}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578441600000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 46.3, 'high': 48.54, 'low': 44, 'close': 44, 'volume': 628050.68438}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578528000000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 45.35, 'high': 45.79, 'low': 43.9, 'close': 43.9, 'volume': 296221.65692}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578614400000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 44.75, 'high': 49.72, 'low': 43.71, 'close': 43.71, 'volume': 729803.12291}]如何使用烛台列表的属性结束来计算移动的avearge?
发布于 2022-04-08 12:29:34
您不能只访问列表中的.close,您需要对各个元素进行访问。而不是
candlesticks[i:i+ma].close做
[candle.close for candle in candlesticks[i:i+ma]]发布于 2022-04-08 12:31:53
问题是candlesticks[i:i+ma]是ma元素的数组,这就是为什么不能访问close属性的原因。相反,你能做的是
s = sum(candlesticks[i + j].close for j in range(ma))
movingAverage = round(s / ma, 2)这样做的好处是,将迭代器传递给sum函数,这样就不会创建额外的列表来执行添加操作。
https://stackoverflow.com/questions/71796968
复制相似问题