【问题标题】:Alpha Vantage: Iterate through list of stocks to get technical indicatorsAlpha Vantage:遍历股票列表以获取技术指标
【发布时间】:2021-04-08 01:01:18
【问题描述】:

我想使用 Alpha Vantage 的技术指标获取 5 只股票的列表。以下是我导入和定义的内容:

from alpha_vantage.timeseries import TimeSeries
from alpha_vantage.foreignexchange import ForeignExchange
from alpha_vantage.cryptocurrencies import CryptoCurrencies
from alpha_vantage.techindicators import TechIndicators
from alpha_vantage.sectorperformance import SectorPerformances
import datetime
import numpy as np
import pandas as pd

top5 = ['CELH', 'MAXR', 'CD', 'WDC', 'IMAB']

查询技术指标会返回一个数据框(data)和一个字典(meta_data)

data, meta_data = ti.get_sma(symbol=ticker, interval='weekly')

如何为我的 top5 列表运行查询?我首先认为它应该是这样的:

for ticker in top5:
    ticker_sma[ticker], ticker_meta_sma[ticker] = 
    ti.get_sma(symbol=ticker, interval='weekly')

或像这样:

sma = {}
for ticker in top5gainers:
    gainers_sma[ticker], gainers_sma_data[ticker] = 
    ti.get_sma(symbol=ticker, interval='weekly')
gainers_sma.keys()
gainers_sma.values()

但我对这种方法的运气为零。我收到名称错误...

NameError: name 'ticker_sma' is not defined

...这对我来说很奇怪,因为我成功获取了单个股票的数据,例如 Microsoft,如下所示:

msft_sma, msft_meta_sma = ti.get_sma(symbol='msft', interval='weekly')

如果我删除 [ticker],然后运行此获取请求...

for ticker in top5:
    data_sma, meta_sma = ti.get_sma(symbol=ticker, interval='weekly')

...那么根据 meta_sma 中的元数据,我只获得了 5 个股票中第 4 个股票的数据:

{'1: 符号': 'IMAB', '2: 指标': '简单移动平均线 (SMA)', '3:上次刷新':'2020-12-31', '4:间隔':'每周', '5:时间段':20, '6:系列类型':'关闭', '7:时区':'美国/东部'}

感谢您阅读此问题并提供答案!

【问题讨论】:

  • 您能否详细说明您的评论“运气为零”?究竟是什么不工作?
  • @Martin,感谢您了解这一点。我用更多细节更新了问题。

标签: python pandas dataframe for-loop alpha-vantage


【解决方案1】:

您正在尝试动态创建变量,这并不简单。下面向您展示了如何做到这一点,但您可能还想考虑将每个符号读入其自己的数据框中,然后将它们连接在一起或单独保存。这实际上取决于您对数据的处理方式(使用实时数据或保存以备后用)。

这将在循环中创建每个变量并为其分配文本,以便您了解正在发生的事情。

top5 = ['CELH', 'MAXR', 'CD', 'WDC', 'IMAB']

for ticker in top5:
    globals()['{}_sma'.format(ticker)] = ticker + 'sma_value'
    globals()['{}_meta_sma'.format(ticker)] = ticker + 'sma_meta_value'

然后打印一些作为证明:

In [6]: print(CELH_sma)
   ...: print(WDC_sma)
   ...: print(IMAB_meta_sma)
CELHsma_value
WDCsma_value
IMABsma_meta_value

我无法测试,但我认为对你有用的是:

for ticker in top5:
    globals()['{}_sma'.format(ticker)], globals()['{}_meta_sma'.format(ticker)] =
    ti.get_sma(symbol=ticker, interval='weekly')

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 2019-03-07
  • 2020-07-03
  • 1970-01-01
  • 2020-05-06
  • 2021-04-01
  • 2020-09-02
相关资源
最近更新 更多