gpt4 book ai didi

python - 在 Pandas 的每日股市数据中找到 52 周的滚动高点

转载 作者:行者123 更新时间:2023-11-28 21:46:12 24 4
gpt4 key购买 nike

这似乎是一个简单的问题(和答案),但我遇到了麻烦。

问题:

我有一个充满 OHLC 数据的 Pandas 数据框。我想在整个数据框中找到滚动的 52 周高点。

我的数据集来自雅虎。您可以使用以下代码将相同的数据下拉以获取每日数据:

import pandas.io.data as web
df = web.DataReader('SPX', 'yahoo', start, end)

数据尾部给出以下输出:

                 Open        High         Low       Close     Volume  
Date
2016-07-15 216.779999 217.009995 215.309998 215.830002 107155400
2016-07-18 215.970001 216.600006 215.669998 216.410004 58725900
2016-07-19 215.919998 216.229996 215.630005 216.190002 54345700
2016-07-20 216.190002 217.369995 216.190002 217.089996 58159500
2016-07-21 216.960007 217.220001 215.750000 216.270004 66070000

要获得 52 周高点(滚动),我可以运行以下命令:

df["52weekhigh"] = pd.rolling_max(df.High, window=200, min_periods=1)

我得到以下信息(一些列:

                 High  52weekhigh
Date
2016-07-15 217.009995 217.009995
2016-07-18 216.600006 217.009995
2016-07-19 216.229996 217.009995
2016-07-20 217.369995 217.369995
2016-07-21 217.220001 217.369995

随着新高的出现,这为我提供了 52 周高点的值,但我不喜欢在这里使用 200。应该是 200 还是 201 还是 220(一年“大约”有 200 个交易日)?

我可以每周对数据进行重新采样以获取值,但是我无法轻松恢复到原始的每日数据(或者我可以吗?)。

那么……问题来了:

有没有办法在 pandas 数据帧上运行 rolling_max 并将窗口设置为“52 周”或类似的东西?如果没有,有人能想到比上述方法更好的方法吗?

最佳答案

如果您的数据以工作日为频率,那么每周大约应该有 5 行。所以 52 周大致对应于 window=52*5

当然,也有可能因为节假日少了几天。要更多准确,您可以使用 asfreq('D') 更改工作日的频率到实际天数。然后你可以使用大小为 52*7 的滚动窗口:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.random.seed(2016)

N = 1000
index = pd.date_range('2000-1-1', periods=N, freq='B')
data = (np.random.random((N, 1))-0.5).cumsum(axis=0)
df = pd.DataFrame(data, index=index, columns=['price'])
# result = pd.rolling_max(df.asfreq('D'), window=52*7, min_periods=1) # for older versions of Pandas
result = df.asfreq('D').rolling(window=52*7, min_periods=1).max()
result = result.rename(columns={'price':'rolling max'})

ax = df.plot()
result.plot(ax=ax)
plt.show()

enter image description here

关于python - 在 Pandas 的每日股市数据中找到 52 周的滚动高点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38536453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com