【问题标题】:Historical price per minute between two timestamps for a cryptocurrency [closed]加密货币两个时间戳之间每分钟的历史价格[关闭]
【发布时间】:2018-05-26 22:49:40
【问题描述】:

我成功地使用以下代码输出了几个小时前的历史价格数据的每分钟价格:

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) 输出两个时间戳之间的每分钟价格,例如2018 年 3 月 12 日下午 3 点(15 点)和 18 年 3 月 12 日下午 3 点(15 点 30 分)

2) 我想将这些数据保存为 3 列“令牌”(在上述情况下为 BTC)、“时间戳”、“价格”,最好是 csv 或 json 格式

任何人对如何使用给定的代码或替代方法有一两个想法?

【问题讨论】:

  • 这是 Java 还是 Python?在我看来,它肯定不像 Java 代码
  • 我将 Java 添加为主题标签,因为我不确定是否有 Java 解决方案已经准备好去某个地方。无论哪种方式,我都会很高兴,但更愿意从扩展给定的代码中学习。如果您是因为不喜欢主题标签而对问题投反对票的人,请删除它。这简直是​​愚蠢的
  • 明智的做法是让您的问题只针对一种语言,否则可能会因过于宽泛而被关闭。
  • k,这是有道理的。感谢您指出这一点,我将删除标签。
  • 什么是“硬币”和“价格”?当我运行您的脚本时,它们不在 df 中。顺便说一句,您的函数中存在缩进错误

标签: python python-3.x pandas cryptocurrency


【解决方案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 以找到可能的内容

【讨论】:

  • 谢谢!!!我对 Python 还很陌生,所以请多多包涵。当我添加代码的第一部分时,我收到了错误提示。请参阅添加到我的问题底部的代码
  • @FatTwin 如果你希望你的函数只返回两个时间戳之间的数据,那么它是return df[mask],然后df = minute_price_historical('BTC', 'USD', 9999, time_delta) 将只包含两个时间戳之间的数据。请注意,在 python 中,如果您在不返回的函数中定义了一个变量(此处为 mask,例如),它在外部是未知的,因此当您执行 df[mask] = ... 时,此时代码不知道 mask :)
  • @FatTwin 否则,我在我的 anwser 中编写的所有代码,我会在你的第一个代码中将它放在 df = minute_price_historical('BTC', 'USD', 9999, time_delta) 之后,而不更改函数。有意义吗?
  • 是的,这很有意义。谢谢,非常感谢您的帮助。学到了很多:)
  • 嗨,我还有一个问题:最大长度似乎设置为大约 24 小时。我玩弄了限制值,完全删除了这个限制,添加了“all_data = True”,但都没有成功。你知道我如何能够获得 10 或 20 个月前的 timestamp.min() 甚至设置一个简单的开始日期?这是我更改的部分:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多