Как получить исторические данные по обменным курсам через Yahoo Finance?

Мне нужно получить ответ в формате JSON или XML с хронологией курсов обмена валют, например, с 07.01.2015 по 07.03.2015.

С помощью этого ответа мы можем получить только самую последнюю информацию о курсах обмена для выбранных валют.

Здесь мы можем получить курсы обмена валют на определенную дату с использованием URL-адреса: http://finance.yahoo.com/connection/currency-converter-cache?date=20150307 и парсинг полученного JSON на определенную валюту.

Но мне нужно получить курсы обмена валют для диапазона дат, так как это здесь, но в формате JSON или XML.

Есть ли способ сделать это?


person Sergey V.    schedule 07.03.2015    source источник
comment
@Nico: см. Ответ ниже, если вам интересно   -  person Frank    schedule 15.05.2015
comment
@Mortimer ответа нет   -  person Alex    schedule 29.07.2015


Ответы (5)


Используйте YQL (https://developer.yahoo.com/yql/)

Затем вы можете получить нужные данные с помощью такого запроса:

SELECT * 
FROM 
    yahoo.finance.historicaldata 
WHERE 
    symbol = "EUR=X" 
AND 
    startDate = "2009-09-11" 
AND 
    endDate = "2010-03-10"

Отметьте здесь

person dym    schedule 30.07.2015
comment
похоже, это работает только для котировок акций, а не для валют - person Asain Kujovic; 02.09.2015
comment
Это также работает с валютой, как вы можете видеть, нажав на ссылку, которую я разместил в ответе - person dym; 03.09.2015
comment
моя ошибка, вчера я получил только нулевые массивы. РЕШИТЕЛЬНЫЙ ОТВЕТ и лучший способ получить исторические данные. - person Asain Kujovic; 03.09.2015
comment
как насчет того, чтобы запросить EURCHF = X, просто поместив это как символ, вы получите нулевой вывод ... я упускаю что-нибудь базовое? - person Rho Phi; 13.08.2016
comment
@RobertoFranceschini, насколько я знаю, api должен возвращать только сравнение между одной валютой в отношении доллара США. Поэтому, если вы хотите сравнить евро с швейцарским франком, вам нужно сделать это самостоятельно. Используйте EUR = X, чтобы получить EUR / USD и CHF = X, чтобы получить CHF / USD, затем разделите их. - person dym; 13.08.2016
comment
спасибо за это предложение. Это то, что я делал, и я иногда проверял, совпадает ли она с официальной цитатой дня от Yahoo до 4 цифр. Тем не менее, я никогда не был уверен, что именно так все должно происходить. Я имею в виду, что это, вероятно, нормально для цен закрытия, но я подозреваю, что на мгновенных данных (Forex?) Это может быть неточно (я ничего не знаю о том, как работает валютный рынок!) - person Rho Phi; 14.08.2016
comment
@RobertoFranceschini есть множество профессиональных API для цитат в реальном времени. Yahoo api - не лучший выбор, если вам нужны мгновенные данные, потому что данные обновляются каждые x раз (я точно не помню, сколько). Кстати, запрос, который я опубликовал, предназначен для исторических данных, если вам просто нужна последняя цитата, вы должны использовать другую таблицу (yahoo.finance.quote). - person dym; 17.08.2016
comment
это больше не работает. Таблица YQL недоступна! - person sscarduzio; 29.09.2016
comment
@sscarduzio работает, просто активируйте Показать таблицы сообщества в левом верхнем углу или просто перейдите по ссылке Отметьте здесь в ответе - person dym; 29.09.2016
comment
@dym, на какое значение вы разделите, чтобы получить EUR / CHF? Мне нужно создать график на основе исторической цены (чтобы дать общее представление о производительности валютных пар за определенный период времени). Я не уверен, какое значение мне следует использовать для этого - бид, закрытие, открытие, минимум или максимум? - person Jamie White; 16.02.2017
comment
@JamieWhite - бид - это текущая котировка, закрыть / открыть котировку, когда рынок закрылся / открылся (это не имеет смысла для валюты, поскольку нет рынка, который бы закрылся / открылся), максимум / минимум лучшая / худшая котировка день. Все термины взяты из фондового рынка, поэтому многие из них бесполезны для валютного рынка. - person dym; 08.03.2017
comment
@dym Непонятно, что вы предлагаете, следует ли использовать «Скорректированную цену закрытия» (бид недоступен для исторических данных)? - person Jamie White; 08.03.2017
comment
Думаю, этот API закрыт. И данные ссылки не работают. Можете предложить альтернативу YQL? - person Usman Liaqat; 08.10.2020

Вот решение для переноса ваших данных в DataFrame pandas. Затем вы можете экспортировать из DataFrame в JSON, XML и т. Д., Используя такие функции, как pandas.DataFrame.to_json.

Символы также могут отличаться от используемых вами.

import pandas as pd
import pandas_datareader.data as web
from datetime import datetime

start = datetime(2016, 1, 1)
end = datetime(2017, 3, 31)
aud = web.DataReader('AUD=X', 'yahoo', start, end)

In [29]: aud.head(5)
Out[29]: 
              Open    High     Low   Close  Volume  Adj Close
Date                                                         
2016-01-01  1.3752  1.3752  1.3752  1.3752       0     1.3752
2016-01-04  1.3725  1.3950  1.3712  1.3723       0     1.3723
2016-01-05  1.3921  1.4017  1.3857  1.3916       0     1.3916
2016-01-06  1.3963  1.4168  1.3941  1.3961       0     1.3961
2016-01-07  1.4124  1.4322  1.4109  1.4124       0     1.4124

Вам нужно будет установить pandas-datareader. (Я предполагаю, что у вас уже есть панды).

sudo -H pip install pandas-datareader (ubuntu)
pip install pandas-datareader (windows)
person dmdip    schedule 11.04.2017
comment
Ошибка соединения с chart.finance.yahoo.com. Возможно, этот api больше не доступен и заменен на YQL. - person user39086; 22.06.2017

В качестве самого простого решения вы должны использовать CurrencyFreaks API. Он предоставляет исторические обменные курсы в форматах JSON и XML для 179 валют по всему миру, совместимых с различными языками программирования, такими как Shell, Node.js, Java, JS, Python, PHP, Ruby, C, C #, Go, Swift.

Чтобы получить исторические ставки между двумя датами, он предоставляет конечную точку временного ряда.

$ curl 'https://api.currencyfreaks.com/timeseries?apikey=YOUR_APIKEY&start_date=2016-01-07&end_date=2016-03-07&base=EUR&symbols=EUR,USD'

Ответ JSON будет:

{
    "start_date": "2016-01-07",
    "end_date": "2016-01-10",
    "base": "EUR",
    "rates": {
        "2016-01-07 00:00:00+00": {
            "EUR": "1.0",
            "USD": "1.0776"
        },
        "2016-01-08 00:00:00+00": {
            "EUR": "1.0",
            "USD": "1.0921"
        },
        "2016-01-09 00:00:00+00": {
            "EUR": "1.0",
            "USD": "1.0932"
        },
        "2016-01-10 00:00:00+00": {
            "EUR": "1.0",
            "USD": "1.0932"
        }
    }
}

Чтобы получить исторические ставки за определенную дату, используйте конечную точку исторических ставок.

Надеюсь, это будет вам полезно.

person Rameez    schedule 06.10.2020

Yahoo API больше не работает, однако есть другие API, которые предоставляют данные о валюте в формате JSON. FXMarketAPI - единственный API, который предлагает API, совместимый с Pandas, который предоставляет исторические данные в формате JSON. Существует конечная точка pandas, которая помогает извлекать данные. Хотя для бесплатных пользователей существует ограничение в 1000 запросов. вы можете увидеть пример ниже.

URL = "https://fxmarketapi.com/apipandas"
params = {'currency' : 'EURUSD',
'start_date' : '2018-07-02',
'end_date':'2018-12-06',
'api_key':'**************'}

response = requests.get("https://fxmarketapi.com/apipandas", params=params)
df= pd.read_json(response.text)

не забудьте получить доступ к api_key и добавить к вышеуказанному запросу.

person jimmy rickard    schedule 15.12.2018

API валюты Yahoo больше не поддерживается.

Есть несколько альтернативных API, предлагающих данные о конвертации валют. Один из вариантов, который я предлагаю, - это SWOP валютный API-интерфейс, быстрый, простой в использовании, надежный и прозрачный API-интерфейс обменного курса. сделано от разработчиков для разработчиков.

Полный отказ от ответственности: я один из разработчиков, создавших SWOP :)

  • SWOP API предлагает текущие и исторические курсы для 180+ валют. Они собираются непосредственно из надежных источников (различных центральных банков и других важных банков).
  • SWOP API имеет две конечные точки: GraphQL и REST / JSON для удобства разработчика.
  • Есть бесплатный план, разрешающий 1000 запросов в месяц, платные планы для большего количества запросов и функций.
person Luzian    schedule 05.10.2020