问题描述
我使用 yahoo Finance(Python 中的 yfinance 库)来获取加密货币对的每日开盘价、收盘价、成交量、最小值、最大值。
我发现数据在 00:00 UTC(关闭/打开时间)重置,但新行仅在 02:00 UTC 添加。我需要最近一天 00:00 立即可用的数据。
有什么办法可以解决这个问题?我想我可以获取到目前为止的分钟或小时数据并总结数量。
pricedata = pdr.get_data_yahoo("BTC-ETH",start="2020-12-20",end="2020-12-22",interval = "1m")
我是否缺少在 yfinance 中更简单的方法?或者更快的 API?我会使用 alpha vantage,但他们不提供加密货币对的历史数据。
更新
我可以自己创建最后一天 (19/12) 的条目:
pricedata = pdr.get_data_yahoo(stock,start="2020-12-19",end="2020-12-20",interval = "1m")
关闭:
print(pricedata['Close'][-1])
打开:
print(pricedata['Close'][0])
(稍微偏离但足够接近)
高:
print(pricedata['High'].max())
低:
print(pricedata['Low'].min())
但音量似乎不起作用。
print(pricedata['Volume'].sum())
给我 50981730304 而每日报告的值为 12830893778。 如果我得到每小时值的总和而不是分钟值,我得到 2111141888。仍然很远......
我想一个“黑客”是获取当前的 24 小时音量。但是,如果我在 UTC 时间 01:00 得到它,它就已经被 'scewed' 了。老实说,我宁愿使用与每日历史记录及时的适当 API :)
到目前为止我已经实现了这个更正,当然它可以改进一点(音量,只有在 00:00 UTC 检索时才有效,因为我还没有想出如何在没有 2h 的情况下“回溯”它延迟):
yesterday = datetime.strptime(_end,'%Y-%m-%d').date() - timedelta(days=1)
yesterdayf = yesterday.strftime('%Y-%m-%d')
# Todo check if between 8-10:15am UTC
# Todo what if it exists but is not complete
if yesterdayf not in hist.index:
print("not in index")
finedata = pdr.get_data_yahoo(symbol,start=yesterdayf,end=_end,interval="1m")
c = finedata['Close'][-1]
o = finedata['Close'][0]
h = finedata['High'].max()
l = finedata['Low'].min()
yticker = yf.Ticker(symbol)
v = yticker.info['volume24Hr']
print (c)
print (o)
#create dataframe
add = pd.DataFrame({'Open':o,'High':h,'Low':l,'Close':c,'Adj Close':c,'Volume':v},index=[yesterday])
#concatenate
hist = pd.concat([hist,add])
print(hist.tail())
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)