加密货币的两个时间戳之间的每分钟历史价格
Historical price per minute between two timestamps for a cryptocurrency
我成功地使用以下代码输出了几个小时前的历史价格数据的每分钟价格:
import requests
import datetime
import pandas as pd
import matplotlib.pyplot as plt
def minute_price_historical(symbol, comparison_symbol, limit, aggregate, exchange=''):
url = 'https://min-api.cryptocompare.com/data/histominute?fsym={}&tsym={}&limit={}&aggregate={}'\
.format(symbol.upper(), comparison_symbol.upper(), limit, aggregate)
if exchange:
url += '&e={}'.format(exchange)
page = requests.get(url)
data = page.json()['Data']
df = pd.DataFrame(data)
df['timestamp'] = [datetime.datetime.fromtimestamp(d) for d in df.time]
return df
time_delta = 1 # Bar width in minutes
df = minute_price_historical('BTC', 'USD', 9999, time_delta)
print('Max length = %s' % len(df))
print('Max time = %s' % (df.timestamp.max() - df.timestamp.min()))
plt.plot(df.timestamp, df.close)
plt.xticks(rotation=45)
plt.show()
对 Cryptocompare API 人竖起大拇指。
最终,我想实现以下目标:
1) 输出两个时间戳之间的每分钟价格,例如3/12/18 下午 3 点 (15.00) 和 3/12/18 下午 3.30 (15.30)
2) 我想将此数据保存到 3 列中 "Token"(在上述 BTC 的情况下)、"Timestamp"、"Price" 作为 csv 或 json理想情况下
有人对如何使用给定代码或替代方法有一两个想法吗?
所以要回答第一部分,您可以为您想要的时间间隔创建两个时间戳 min 和 max:
time_min = pd.Timestamp('2018-05-26 15:00')
time_max = pd.Timestamp('2018-05-26 15:30')
然后创建一个 mask
到 select 仅在这两次之间 df
的行:
mask = (df.timestamp >= time_min) & (df.timestamp <= time_max)
现在,如果您这样做 df[mask]
,您将只获得时间戳在这 30 分钟内的行 window。
第二个问题:
# you can first create the column for the token do:
df['token'] = 'BTC' # should fill all the rows of your df with this word
# rename the column close to price
df = df.rename(columns={'close':'price'})
# finally save as csv only the columns you want:
df[['token','timestamp','price']].to_csv('here_the_path_to_your/file.csv')
如果您想添加遮罩,请执行
df[['token','timestamp','price']][mask].to_csv('here_the_path_to_your/file.csv')
编辑 json,这取决于您想要的方式,所以我建议阅读 documentation about to_json 以找到可能的
我成功地使用以下代码输出了几个小时前的历史价格数据的每分钟价格:
import requests
import datetime
import pandas as pd
import matplotlib.pyplot as plt
def minute_price_historical(symbol, comparison_symbol, limit, aggregate, exchange=''):
url = 'https://min-api.cryptocompare.com/data/histominute?fsym={}&tsym={}&limit={}&aggregate={}'\
.format(symbol.upper(), comparison_symbol.upper(), limit, aggregate)
if exchange:
url += '&e={}'.format(exchange)
page = requests.get(url)
data = page.json()['Data']
df = pd.DataFrame(data)
df['timestamp'] = [datetime.datetime.fromtimestamp(d) for d in df.time]
return df
time_delta = 1 # Bar width in minutes
df = minute_price_historical('BTC', 'USD', 9999, time_delta)
print('Max length = %s' % len(df))
print('Max time = %s' % (df.timestamp.max() - df.timestamp.min()))
plt.plot(df.timestamp, df.close)
plt.xticks(rotation=45)
plt.show()
对 Cryptocompare API 人竖起大拇指。
最终,我想实现以下目标:
1) 输出两个时间戳之间的每分钟价格,例如3/12/18 下午 3 点 (15.00) 和 3/12/18 下午 3.30 (15.30)
2) 我想将此数据保存到 3 列中 "Token"(在上述 BTC 的情况下)、"Timestamp"、"Price" 作为 csv 或 json理想情况下
有人对如何使用给定代码或替代方法有一两个想法吗?
所以要回答第一部分,您可以为您想要的时间间隔创建两个时间戳 min 和 max:
time_min = pd.Timestamp('2018-05-26 15:00')
time_max = pd.Timestamp('2018-05-26 15:30')
然后创建一个 mask
到 select 仅在这两次之间 df
的行:
mask = (df.timestamp >= time_min) & (df.timestamp <= time_max)
现在,如果您这样做 df[mask]
,您将只获得时间戳在这 30 分钟内的行 window。
第二个问题:
# you can first create the column for the token do:
df['token'] = 'BTC' # should fill all the rows of your df with this word
# rename the column close to price
df = df.rename(columns={'close':'price'})
# finally save as csv only the columns you want:
df[['token','timestamp','price']].to_csv('here_the_path_to_your/file.csv')
如果您想添加遮罩,请执行
df[['token','timestamp','price']][mask].to_csv('here_the_path_to_your/file.csv')
编辑 json,这取决于您想要的方式,所以我建议阅读 documentation about to_json 以找到可能的