Историческая спотовая цена Coinbase на дату и время

API coinbase позволяет указать дату при отправке запроса на https://api.coinbase.com/v2/prices/BTC-USD/spot. В API указано, что дата должна быть отформатирована как ГГГГ-ММ-ДД. Возможно ли получить историческую цену до определенного часа (например: цена за 1 час назад)? Я вижу, что это сделано в их приложении для iOS, но похоже, что они не могут предоставлять эти данные через API.

Спасибо за помощь!


person akes406    schedule 04.01.2017    source источник
comment
Вы можете использовать параметр? Peiod, чтобы получить больше информации. Пример: api.coinbase.com/v2/prices/BTC- Долл. США / исторический? Период = месяц   -  person Xlsx    schedule 17.11.2017


Ответы (3)


Сомнительно, спотовая цена обычно означает цену «прямо сейчас». В нем говорится, что вы можете использовать ГГГГ-ММ-ДД (UTC), но не указывается время.

Просмотрите аналогичную ветку: Получите исторические данные о биткойнах

person Gavin Stevens    schedule 04.01.2017

Недавно я провел некоторое исследование по этому поводу, и я думаю, что ответ @gavinstevens правильный, и эксперименты, описанные ниже, подтверждают это.

Придумал несколько дат для тестирования:

import dt as dt
import requests
today=dt.date.today()
today_dt=dt.datetime.now()
earlier_dt=today_dt-dt.timedelta(hours=6)

print(today)
'2017-03-31'
print(today_dt.strftime("%Y-%m-%d %H:%M:%S"))
'2017-03-31 11:57:58'
print(earlier_dt.strftime("%Y-%m-%d %H:%M:%S"))
'2017-03-31 05:57:58'

#build dicts to pass in the api requests
dict_today={'date':today.strftime("%Y-%m-%d")}
dict_dt_now={'date':today_dt.strftime("%Y-%m-%d %H:%M:%S")}
dict_dt_earler={'date': earlier_dt.strftime("%Y-%m-%d %H:%M:%S")}

Теперь для случая спотовой цены:

r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_today)
print(r.text)

{"data":{"amount":"1082.42","currency":"USD"},...}

r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_dt_now)
print(r.text)

{"data":{"amount":"1078.45","currency":"USD"},...}

r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_dt_earler)    
print(r.text)

{"data":{"amount":"1078.03","currency":"USD"},...}

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

way_earlier_dt=today_dt-dt.timedelta(days=365)
dict_way_earlier={'date': way_earlier_dt.strftime("%Y-%m-%d %H:%M:%S")}

r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_way_earlier)
print(r.text)

{"data":{"amount":"415.23","currency":"USD"},...}    

Действительно, это возвращает разумную цену для этого datetime. Вычитая шесть часов в качестве последней проверки ...

way_earlier_dt=way_earlier_dt-dt.timedelta(hours=6)
dict_way_earlier={'date': way_earlier_dt.strftime("%Y-%m-%d %H:%M:%S")}

r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_way_earlier)
print(r.text)

{"data":{"amount":"415.23","currency":"USD"},...}

Ой-ой! Цена такая же, как и в предыдущем запросе. Похоже, у нас поломка.

Давайте проведем тест «прогулка по полуночи», чтобы убедиться, что запрос истории даты и времени действителен только для текущего дня. Мы можем начать с нашего значения "today_dt" и вычесть 12, затем 16 часов ...

yesterday_dt_12=today_dt-dt.timedelta(hours=12)
yesterday_dt_16=today_dt-dt.timedelta(hours=16)

print(yesterday_dt_12.strftime("%Y-%m-%d %H:%M:%S"))
'2017-03-30 23:57:58'
print(yesterday_dt_16.strftime("%Y-%m-%d %H:%M:%S"))
'2017-03-30 19:57:58'

dict_yest_12={'date':yesterday_dt_12.strftime("%Y-%m-%d %H:%M:%S")}
dict_yest_16={'date':yesterday_dt_16.strftime("%Y-%m-%d %H:%M:%S")}

r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_yest_12)
print(r.text)

{"data":{"amount":"1039.37","currency":"USD"},..}

r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_yest_16)
print(r.text)

{"data":{"amount":"1039.37","currency":"USD"},...}

Увы, у нас есть ответ. Мы не можем получить исторические спотовые цены BTC с помощью спотового запроса coinbase api. Я немного повозился и подтвердил, что разница в цене в первоначальном эксперименте - это колебания текущей спотовой цены BTC сегодня, которую возвращает api.

Грустный!

person fireitup    schedule 31.03.2017
comment
Для чего тогда был параметр даты? - person LeanMan; 22.08.2020

Да, это возможно. Чтобы получить последние спотовые цены, используйте следующее.

Час: https://api.coinbase.com/v2/prices/BTC-USD/historic?period=hour

День: https://api.coinbase.com/v2/prices/BTC-USD/historic?period=day

Месяц: https://api.coinbase.com/v2/prices/BTC-USD/historic?period=month

person John T    schedule 16.04.2021