[英]How can get ' USDJPY'(currency rates) with pandas and yahoo finance?
我正在學習和使用 pandas 和 python。
今天,我試圖制作一個匯率表,但我在獲取“USDJPY”的價格時遇到了麻煩。
當我得到“EUR/USD”的價格時,我會這樣編碼。
eur = web.DataReader('EURUSD=X','yahoo')['Adj Close']
有用。
但是當我寫
jpy = web.DataReader('USDJPY=X','yahoo')['Adj Close']
錯誤信息是這樣的:
---------------------------------------------- ---------------------- IOError Traceback(最近調用最后一次)在 () ----> 1 jpy = web.DataReader('USDJPY =X','雅虎')['調整關閉']
C:\Anaconda\lib\site-packages\pandas\io\data.pyc in DataReader(name, data_source, start, end, retry_count, pause) 70 return get_data_yahoo(symbols=name, start=start, end=end, 71 adjust_price=False, chunksize=25, ---> 72 retry_count=retry_count, pause=pause) 73 elif data_source == "google": 74 return get_data_google(symbols=name, start=start, end=end,
C:\Anaconda\lib\site-packages\pandas\io\data.pyc in get_data_yahoo(symbols, start, end, retry_count, pause, adjust_price, ret_index, chunksize, name) 388 """ 389 return _get_data_from(symbols, 開始, end, retry_count, pause, --> 390 adjust_price, ret_index, chunksize, 'yahoo', name) 391 392
C:\Anaconda\lib\site-packages\pandas\io\data.pyc in _get_data_from(symbols, start, end, retry_count, pause, adjust_price, ret_index, chunksize, source, name) 334 # 如果是單個符號,(例如, 'GOOG') 335 if isinstance(symbols, (basestring, int)): --> 336 hist_data = src_fn(symbols, start, end, retry_count, pause) 337 # 或者多個符號,(例如,['GOOG', 'AAPL', 'MSFT']) 338 elif isinstance(symbols, DataFrame):
C:\Anaconda\lib\site-packages\pandas\io\data.pyc in _get_hist_yahoo(sym, start, end, retry_count, pause) 188 '&g=d' + 189 '&ignore=.csv') --> 190 return _retry_read_url(url, retry_count, pause, 'Yahoo!') 191 192
C:\Anaconda\lib\site-packages\pandas\io\data.pyc in _retry_read_url(url, retry_count, pause, name) 167 168 raise IOError("after %d tries, %s did not " --> 169 "為 url %r" % (retry_count, name, url)) 170 171 返回 200
IOError:嘗試 3 次后,Yahoo! 沒有為 url 返回 200 ' http://ichart.yahoo.com/table.csv?s=USDJPY=X&a=0&b=1&c=2010&d=1&e=1&f=2014&g=d&ignore=.csv '
其他貨幣如“GBPUSD”也有同樣的問題。
你能解決這個問題嗎?
你有什么想法從雅虎或谷歌獲取“USDJPY”嗎???
雅虎財經不提供匯率的歷史數據(即頁面左上角沒有“歷史價格”鏈接,就像股票、指數等......)
您可以使用 FRED(聖路易斯聯邦儲備銀行數據)來獲得這些匯率...
import pandas.io.data as web
jpy = web.DataReader('DEXJPUS', 'fred')
更新:hase 移動了 pandas-datareader
from pandas_datareader import data
jpy = data.DataReader('DEXJPUS', 'fred')
或者更直接的方式...
jpy = web.get_data_fred('DEXJPUS')
可以在此處找到 FRED 每日數據的所有匯率列表: http : //research.stlouisfed.org/fred2/categories/94
從 OANDA 獲取歷史匯率http://pandas-datareader.readthedocs.io/en/latest/remote_data.html
In [1]: from pandas_datareader.oanda import get_oanda_currency_historical_rates
In [2]: start, end = "2016-01-01", "2016-06-01"
In [3]: quote_currency = "USD"
In [4]: base_currency = ["EUR", "GBP", "JPY"]
In [5]: df_rates = get_oanda_currency_historical_rates(
start, end,
quote_currency=quote_currency,
base_currency=base_currency
)
In [6]: print(df_rates)
更新:Oanda 最近開始為此收費https://www.oanda.com/fx-for-business/exchange-rates-api
免費和簡單的方法是雅虎:
# get fx rates
# https://finance.yahoo.com/currencies
# example EUR/USD = EURUSD%3DX?p=EURUSD%3DX
import pandas as pd
import pandas_datareader as dr
# change date range here
start_date = '2021-02-26'
end_date = '2021-03-01'
# retrieve market data of current ticker symbol
print('This is the table with HLOC, Volume, Adj Close prices')
eurusd = dr.data.DataReader('EURUSD%3DX', data_source='yahoo', start=start_date, end=end_date)
print(eurusd)
# just get latest adjusted close for further use
print('This is the Adj Close prices only')
print(eurusd['Adj Close'])
它也適用於其他十字架,與上述陳述相反:
# EURCHF%3DX
eurchf = dr.data.DataReader('EURCHF%3DX', data_source='yahoo', start=start_date, end=end_date)
print(eurchf)
#!pip install yfinance
#!pip install mplfinance
from datetime import datetime
import yfinance as yf
import mplfinance as mpf
#import pandas as pd
#import pandas_datareader as dr
# change date range here
start_date = '2021-02-26'
end_date = '2021-03-01'
#This Does NOT WORK#
# retrieve market data of current ticker symbol
print('This is the table with HLOC, Volume, Adj Close prices')
eurusd = dr.data.DataReader('EURUSD%3DX', data_source='yahoo',
start=start_date, end=end_date)
print(eurusd)
#This Does#
data = yf.download('USDCAD=X', start=start_date, end=end_date)
#If someone can figure out how to get the S5,S30, M1, M3 etc. Please share
我認為您可以通過將自定義間隔作為參數傳遞給yf.download()
function 來使用自定義間隔。例如:
data = yf.download('USDCAD=X', start=start_date, end=end_date, interval='1m')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.