如何从字典列表中计算简单移动平均线?
How to calculate simple moving average from list of dicts?
我在这里使用 robin_stocks 模块来计算股票历史数据,然后按日期排序。
import robin_stocks as r
stock_price = r.stocks.get_stock_historicals('F', interval='day', span='week', bounds='regular')
stock_price = sorted(stock_price, key=lambda item: item['begins_at'])
for stock in stock_price:
print('Stock: {}, Date: {}, Open: {}, Close: {}'.format(stock['symbol'],stock['begins_at'],stock['open_price'],stock['close_price']))
输出:
Stock: F, Date: 2020-06-24T00:00:00Z, Open: 6.060000, Close: 5.950000
Stock: F, Date: 2020-06-25T00:00:00Z, Open: 5.860000, Close: 6.030000
Stock: F, Date: 2020-06-26T00:00:00Z, Open: 6.040000, Close: 5.910000
Stock: F, Date: 2020-06-29T00:00:00Z, Open: 5.910000, Close: 6.010000
Stock: F, Date: 2020-06-30T00:00:00Z, Open: 5.980000, Close: 6.080000
我想知道如何计算'close'的平均值。
close_prices = [float(stock['close_price']) for stock in stock_price]
avg = sum(close_prices) / len(close_prices)
如果您希望对自定义 window 尺寸应用滚动均值并使用 pandas
,您可以使用 pandas.DataFrame.rolling
。
您可以简单地计算 for
循环中的总和:
close_sum = 0
for stock in stock_price:
print('Stock: {}, Date: {}, Open: {}, Close: {}'.format(stock['symbol'],stock['begins_at'],stock['open_price'],stock['close_price']))
close_sum += float(stock['close_price'])
然后将总和除以存货数量:
close_average = close_sum / len(stock_price)
如果您有标题所说的字典(而不是代码中显示的“打印”),您可以将其转换为数据框:
import pandas as pd
your_df = pd.DataFrame(your_dict)
一旦你有了数据框,你就可以用移动平均线创建一个新列:
your_df['SMA'] = your_df['Close'].rolling(window=10,center=False).mean()
此外,您可以将 window 天数从 10 更改为您喜欢的任何数字。
我在这里使用 robin_stocks 模块来计算股票历史数据,然后按日期排序。
import robin_stocks as r
stock_price = r.stocks.get_stock_historicals('F', interval='day', span='week', bounds='regular')
stock_price = sorted(stock_price, key=lambda item: item['begins_at'])
for stock in stock_price:
print('Stock: {}, Date: {}, Open: {}, Close: {}'.format(stock['symbol'],stock['begins_at'],stock['open_price'],stock['close_price']))
输出:
Stock: F, Date: 2020-06-24T00:00:00Z, Open: 6.060000, Close: 5.950000
Stock: F, Date: 2020-06-25T00:00:00Z, Open: 5.860000, Close: 6.030000
Stock: F, Date: 2020-06-26T00:00:00Z, Open: 6.040000, Close: 5.910000
Stock: F, Date: 2020-06-29T00:00:00Z, Open: 5.910000, Close: 6.010000
Stock: F, Date: 2020-06-30T00:00:00Z, Open: 5.980000, Close: 6.080000
我想知道如何计算'close'的平均值。
close_prices = [float(stock['close_price']) for stock in stock_price]
avg = sum(close_prices) / len(close_prices)
如果您希望对自定义 window 尺寸应用滚动均值并使用 pandas
,您可以使用 pandas.DataFrame.rolling
。
您可以简单地计算 for
循环中的总和:
close_sum = 0
for stock in stock_price:
print('Stock: {}, Date: {}, Open: {}, Close: {}'.format(stock['symbol'],stock['begins_at'],stock['open_price'],stock['close_price']))
close_sum += float(stock['close_price'])
然后将总和除以存货数量:
close_average = close_sum / len(stock_price)
如果您有标题所说的字典(而不是代码中显示的“打印”),您可以将其转换为数据框:
import pandas as pd
your_df = pd.DataFrame(your_dict)
一旦你有了数据框,你就可以用移动平均线创建一个新列:
your_df['SMA'] = your_df['Close'].rolling(window=10,center=False).mean()
此外,您可以将 window 天数从 10 更改为您喜欢的任何数字。