加密货币的两个时间戳之间的每分钟历史价格

时间:2018-05-26 22:49:40

标签: python python-3.x pandas 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.00pm(15.00)和3/12/18 3.30pm(15.30)

2)我想将这些数据保存到3列“令牌”(在BTC以上的情况下),“时间戳”,“价格”作为csv或json理想

对于如何使用给定代码或替代方法进行操作的人有一两个想法?

1 个答案:

答案 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以找到可能的内容