【问题标题】:How to show time of data downloaded by mplfinance (index type datetime)如何显示 mplfinance 下载数据的时间(索引类型 datetime)
【发布时间】:2021-08-11 20:41:56
【问题描述】:

我的代码如下:

import pandas_datareader as web
import datetime as dt

data = web.DataReader('AMZN', 'yahoo', dt.datetime(2021, 5, 3), dt.datetime(2021, 5, 5))
# read stock price of AMZN from Yahoo finance from 5/3/2021 to 5/5/2021

print(data)
print(data.index)
print(data.index[0])

输出:

有趣的是索引列不显示时间(它的类型是日期时间),见第一个打印。但是,如果我尝试查看单独的行,它确实包括时间(00:00:00,请参阅第 3 个打印件)。如何将这段时间包含在索引中,同时仍保持类型为数据时间?我不明白为什么时间不包含在索引列中。

除了好奇之外,我尝试这样做的第二个原因是我想查看数据的下载时间。

【问题讨论】:

    标签: python datetime yahoo-finance pandas-datareader


    【解决方案1】:

    首先进行一些更正:

    1. 虽然您可能正在使用 mplfinance 可视化您的财务数据,但您正在使用 Pandas DataReader 下载它。
    2. 您的问题实际上是关于 Pandas DatetimeIndex 类的问题(mplfinance 需要它作为您要绘制的数据框的索引)。
    3. DatetimeIndex 中的类型不是datetime.datetime,而是numpy.datetime64。也就是说,如果您尝试将其提取为 data.index[0],那么 pandas 将返回类型 pandas.Timestamp。 (See also here)。

    回答你的问题:你看到的是 Pandas DatetimeIndex 的一个特性:如果它检测到 DatetimeIndex 中所有时间戳的时间部分都是 00:00:00,那么为了节省空间和避免混淆,它会自动打印时间部分。 (另请参阅this question and its answers,其中有人询问如何删除时间部分。)

    关于 Pandas DataReader,下载时间不会包含在数据框中,并且由于您请求的是每日数据(不是日内数据),因此每一行对应一个特定日期,指的是该日期的整个交易日(开盘价、最高价、最低价、收盘价),而不是指特定时间,因此数据不会包含各个日期的时间(或将包含 00:00:00)。

    HTH。

    附:我不确定您是否可以使用 pandas 数据阅读器从“雅虎”获取盘中数据。可能是;我不知道。但我相信您可以通过在调用中指定 "av-intraday" 来使用 Alpha Vantage 获取盘中数据。

    附言我不明白你为什么想知道你实际下载数据的时间。也就是说,您可以在下载时获取当前时间,并将其存储在某处,例如:

    import pandas_datareader as web
    import datetime as dt
    data = web.DataReader(...)
    download_time = dt.datetime.now().strftime("%D %H:%M:%S")
    print(download_time)
    

    05/23/21 11:05:02

    【讨论】:

    • 非常感谢您的回答!首先,我需要查看下载时间的原因是我想在一小段时间内绘制图表,比如每 10 秒。我正在考虑编写代码来控制下载时间并使用 datetime.datetime.now() 来显示下载时间。其次,我只是好奇如果我想强制它显示时间 00:00:00 怎么办?这里我仍然希望类型是 datetime64 而不是字符串,因为我需要稍后绘制。
    • 您可以将时间转换为您想要的任何日期时间类型。听起来您确实需要盘中数据(每 10 秒一次)。您不应该每 10 秒重复询问每日数据,并且只是将其标记到现在。
    • "您不应该每隔 10 秒重复询问每日数据,而只是将其标记到现在。" - 为了确认我正确理解您的观点,您的意思是我只是反复请求数据而没有手动插入 10 秒的“休息时间”?我正在使用 [yfinance](pypi.org/project/yfinance) 下载数据,最小的时间间隔是 1 分钟,因此我想自己编写 10 秒的下载间隔。有没有更简单的方法?谢谢!
    • 我的意思是,在您问题的示例中,您要求提供 3 天的 每日 数据(不是盘中),因此您总是会得到 3 行,无论你问一次,还是每 10 秒问一次,你总是会得到相同的数据,所以每 10 秒问一次是没有意义的。如果您将yfinanceinterval='1m' 一起使用,那么您每分钟只会获得一次新数据,因此再次每10 秒调用一次yf.download() 毫无意义。
    • 有很多方法可以获得更频繁的数据,但我猜你可能需要为此付费。此外,如果您根据数据比几分钟更频繁地做出交易决策,您可能还希望查看买入/卖出价格 大小。是的,您很可能只会获得交易价格和/或买入/卖出价格(和大小),因此您必须选择一个区间并构建自己的 OHLC 集(例如,请参阅“Single time-series valuye to OHLC data”)
    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    相关资源
    最近更新 更多