我成功使用以下代码输出历史价格数据的每分钟价格,范围为几个小时:
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.00pm(15.00)和3/12/18 3.30pm(15.30)
2)我想将这些数据保存到3列“令牌”(在BTC以上的情况下),“时间戳”,“价格”作为csv或json理想
对于如何使用给定代码或替代方法进行操作的人有一两个想法?
答案 0 :(得分:1)
所以要回答第一部分,您可以为所需的时间间隔创建两个时间戳最小值和最大值:
time_min = pd.Timestamp('2018-05-26 15:00')
time_max = pd.Timestamp('2018-05-26 15:30')
然后创建mask
,在这两次之间仅选择df
的行:
mask = (df.timestamp >= time_min) & (df.timestamp <= time_max)
现在,如果您执行df[mask]
,您将只获得时间戳在此30分钟窗口内的行。
关于第二个问题:
# 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以找到可能的内容