雅虎财经,补上两小时的延迟

问题描述

我使用 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 (将#修改为@)