簡體   English   中英

如何通過 pandas 和 yahoo finance 獲取“USDJPY”(貨幣匯率)?

[英]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

雅虎財經不提供匯率的歷史數據

是的,但不是交叉匯率。 全部 vs 雅虎美元匯率的美元列表

a = web.DataReader("JPY=X", 'yahoo')

從 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM