过去几周我一直在使用 yfinance 来提取一些股票的历史数据。我通常在每周结束时运行该程序以存储该周的数据,但是这个问题错误只是在上周随机开始发生。下面是调用 MMM 历史价格数据的简单示例。但是,期权合约方法也会发生同样的错误。
import yfinance as yf
mmm = yf.Ticker('MMM')
mmm.history()
Run Code Online (Sandbox Code Playgroud)
错误堆栈:
JSONDecodeError Traceback (most recent call last)
<ipython-input-6-68e978705cca> in <module>
1 mmm = yf.Ticker('MMM')
----> 2 mmm.history()
~/opt/anaconda3/lib/python3.8/site-packages/yfinance/base.py in history(self, period, interval, start, end, prepost, actions, auto_adjust, back_adjust, proxy, rounding, tz, **kwargs)
155 "Our engineers are working quickly to resolve "
156 "the issue. Thank you for your patience.")
--> 157 data = data.json()
158
159 # Work with errors
~/opt/anaconda3/lib/python3.8/site-packages/requests/models.py in json(self, **kwargs)
896 # used. …
Run Code Online (Sandbox Code Playgroud) import yfinance as yf
stock = yf.Ticker("ABEV3.SA")
data1= stock.info
print(data1)
Run Code Online (Sandbox Code Playgroud)
有“买入”和“卖出”,但没有实际股价。
在今天之前它一直在工作。我不知道为什么它今天不起作用。
import yfinance as yf
df = yf.Ticker('MMM').history(start='2021-01-01',end='2021-07-10')
Run Code Online (Sandbox Code Playgroud)
File "D:\anaconda3\envs\tensorflow\lib\site-packages\yfinance\base.py", line 157, in history
data = data.json()
File "D:\anaconda3\envs\tensorflow\lib\site-packages\requests\models.py", line 900, in json
return complexjson.loads(self.text, **kwargs)
File "D:\anaconda3\envs\tensorflow\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "D:\anaconda3\envs\tensorflow\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\anaconda3\envs\tensorflow\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Run Code Online (Sandbox Code Playgroud) 尝试在 Python 311 上安装 lxml。遇到此错误。
\nPS C:\\Users\\chharlie\\Desktop\\code> pip install lxml\nCollecting lxml\n Using cached lxml-4.9.1.tar.gz (3.4 MB)\n Preparing metadata (setup.py) ... done\nBuilding wheels for collected packages: lxml\n Building wheel for lxml (setup.py) ... error\n error: subprocess-exited-with-error\n\n \xc3\x97 python setup.py bdist_wheel did not run successfully.\n \xe2\x94\x82 exit code: 1\n \xe2\x95\xb0\xe2\x94\x80> [74 lines of output]\n Building lxml version 4.9.1.\n Building without Cython.\n Building against pre-built libxml2 andl libxslt libraries\n running bdist_wheel\n running build\n running build_py\n creating build\n creating build\\lib.win-amd64-cpython-311\n creating build\\lib.win-amd64-cpython-311\\lxml\n copying …
Run Code Online (Sandbox Code Playgroud) 我发现库可以让我非常有效地从雅虎财经获取数据。这是一个很棒的图书馆。
问题是,我无法将数据保存到 csv 文件中。
我尝试将数据转换为 Panda Dataframe,但我认为我做得不正确,而且我得到了一堆'NaN's
.
我尝试使用 Numpy 直接保存到 csv 文件中,但这也不起作用。
import yfinance as yf
import csv
import numpy as np
urls=[
'voo',
'msft'
]
for url in urls:
tickerTag = yf.Ticker(url)
print(tickerTag.actions)
np.savetxt('DivGrabberTest.csv', tickerTag.actions, delimiter = '|')
Run Code Online (Sandbox Code Playgroud)
我可以在控制台上打印数据,这很好。请帮我将其保存为 csv。谢谢你!
我有 ISIN、股票代码(没有后缀,例如三星005930
而不是005930.KS
)和国家/地区名称。当我访问雅虎财经网站时,我可以使用 ISIN 进行搜索并获得我正在寻找的股票。
当我尝试通过调用 API 端点以编程方式执行此操作时,https://query2.finance.yahoo.com/v10/finance/quoteSummary/{ TickerSymbol }?modules=financialData
它并不总是有效,因为在某些情况下缺少后缀。而且我还没有找到用 ISIN 查询的方法。
那么如何使用 Yahoo Finance API 分别使用 ISIN、股票代码(无后缀)和国家名称查找股票?
谢谢
我使用的是 Mac 操作系统,在执行以下操作时收到错误:
import pandas as pd
import yfinance as yf
from yahoofinancials import YahooFinancials
Run Code Online (Sandbox Code Playgroud)
ModuleNotFoundError:没有名为“yfinance”的模块
我已经检查了 pip 是否安装到了最新版本,并且我已经完成了 pip list 并且 yfinance 就在那里。
我还检查过:
pip show yfinance
Name: yfinance
Version: 0.1.70
Summary: Download market data from Yahoo! Finance API
Home-page: https://github.com/ranaroussi/yfinance
Author: Ran Aroussi
Author-email: ran@aroussi.com
License: Apache
Location: /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages
Requires: lxml, multitasking, numpy, pandas, requests
Required-by:
MacBook-Air:~ User$
Run Code Online (Sandbox Code Playgroud)
这样就安装好了,它的路径是Python3最新的python的路径。
我真的很感激任何建议!
谢谢
[编辑]
我从默认的 Spyder 环境运行 Spyder。
Yahoo网站可以通过浏览器中的2081端口打开(在Firefox中为HTTP和HTTPS设置代理端口2081)。端口 2081 提供 HTTP(S) 代理。
2080端口提供SOCKS5代理服务:
url="https://query1.finance.yahoo.com/v7/finance/download/MSFT"
curl --socks5-hostname 127.0.0.1:2080 $url -o msft.txt
Run Code Online (Sandbox Code Playgroud)
我现在可以下载 Yahoo 数据,并希望通过此代理使用yfinance库。
尝试方法1:
import yfinance as yf
msft = yf.Ticker("MSFT")
msft.history(proxy="http://127.0.0.1:2081")
msft.history(proxy="https://127.0.0.1:2081")
msft.history(proxy="socks5://127.0.0.1:2080")
Run Code Online (Sandbox Code Playgroud)
它们都不起作用!它们具有相同的输出:
MSFT: No price data found, symbol may be delisted (period=1mo)
Empty DataFrame
Columns: [Open, High, Low, Close, Adj Close, Volume]
Index: []
Run Code Online (Sandbox Code Playgroud)
尝试方法2:
MSFT: No price data found, symbol may be delisted (period=1mo)
Empty DataFrame
Columns: [Open, High, Low, Close, Adj Close, Volume]
Index: []
Run Code Online (Sandbox Code Playgroud)
输出:
cd ~
export …
Run Code Online (Sandbox Code Playgroud) 我使用雅虎财经(Python 中的 yfinance 库)来获取加密货币对的每日开盘价、收盘价、交易量、最小值、最大值。
我发现数据在 00:00 UTC(关闭/开放时间)重置,但新行仅在 02:00 UTC 添加。我需要最新一天 00:00 立即可用的数据。
有办法解决这个问题吗?我想我可以获取到目前为止的每分钟或每小时数据并总结数量。
pricedata = pdr.get_data_yahoo("BTC-ETH", start="2020-12-20", end="2020-12-22", interval = "1m")
Run Code Online (Sandbox Code Playgroud)
我是否缺少在 yfinance 中执行此操作的更简单方法?或者更快的 API?我会使用 alpha vantage,但他们不提供加密货币对的历史数据。
更新
我可以自己创建最后一天(19/12)的条目:
pricedata = pdr.get_data_yahoo(stock, start="2020-12-19", end="2020-12-20", interval = "1m")
Run Code Online (Sandbox Code Playgroud)
关闭:
print(pricedata['Close'][-1])
Run Code Online (Sandbox Code Playgroud)
打开:
print(pricedata['Close'][0])
Run Code Online (Sandbox Code Playgroud)
(稍微偏离但足够接近)
高的:
print(pricedata['High'].max())
Run Code Online (Sandbox Code Playgroud)
低的:
print(pricedata['Low'].min())
Run Code Online (Sandbox Code Playgroud)
但音量似乎不起作用。
print(pricedata['Volume'].sum())
Run Code Online (Sandbox Code Playgroud)
给我 50981730304,而每日报告值是 12830893778。如果我得到每小时值的总和而不是分钟值,我得到 2111141888。仍然很远......
我想一个“黑客”就是获取当前 24 小时的音量。但如果我在 01:00 UTC 得到这个信息,它就已经被“欺骗”了。老实说,我宁愿使用一个与每日历史记录同步的正确 API :)
到目前为止,我已经实施了这个修正,假设它可以改进一点(音量,只有在 00:00 UTC 检索时才有效,因为我还没有弄清楚如何在没有 2 小时延迟的情况下“返回”它):
yesterday = datetime.strptime(_end, '%Y-%m-%d').date() - timedelta(days=1)
yesterdayf = yesterday.strftime('%Y-%m-%d')
# TODO check if between …
Run Code Online (Sandbox Code Playgroud) 当尝试使用 yfinance 包从 yahoo Finance 下载股票价格数据时,我收到以下错误:OperationalError('无法打开数据库文件')
看来价格只是不下载。我该如何解决此错误?我还没有在互联网上找到解决方案。
预先非常感谢您!
我用谷歌搜索,升级了 pip 安装,重新安装了 anaconda,重置了 Windows,调整了文件夹权限,以管理员身份运行...没有任何效果。
yfinance ×10
python ×8
python-3.x ×2
finance ×1
json ×1
lxml ×1
macos ×1
numpy ×1
pandas ×1
pip ×1
proxy ×1
python-wheel ×1
stockquotes ×1