如何将现实世界 5 天的每日股票数据转换为每周模式以获得每周移动平均线

Posted

技术标签:

【中文标题】如何将现实世界 5 天的每日股票数据转换为每周模式以获得每周移动平均线【英文标题】:How to convert real world 5-day daily stock data to weekly pattern to get weekly moving average 【发布时间】:2021-09-27 08:25:54 【问题描述】:

我有印度证券交易所数据和一个使用.rolling_mean 给出简单移动平均线的代码,但我想对每周数据做同样的事情。我尝试了许多通过互联网和博客提供的方法,但似乎没有任何方法适用于我的用例。

我正在使用Python 3.7Pandas 1.3.0

这是我尝试过的代码:

df1 = df.copy()
df1.set_index('DATE',drop=True,inplace=True)
logic = 'OPEN'  : 'first',
         'HIGH'  : 'max',
         'LOW'   : 'min',
         'CLOSE' : 'last',

offset = pd.offsets.timedelta(days=-6)
f = pd.read_clipboard(parse_dates=['DATE'], index_col=['DATE'])
f.resample('W', loffset=offset).apply(logic)

还有这个:

f = df.copy()

f['DATE'] = pd.to_datetime(f['DATE'])
f.set_index('DATE', inplace=True)
f.sort_index(inplace=True)

def take_first(array_like):
    return array_like[0]

def take_last(array_like):
    return array_like[-1]

output = f.resample('W',                                 # Weekly resample
                    how='OPEN': take_first, 
                         'HIGH': 'max',
                         'LOW': 'min',
                         'CLOSE': take_last,, 
                    loffset=pd.offsets.timedelta(days=-6))  # to put the labels to Monday

output = output[['OPEN', 'HIGH', 'LOW', 'CLOSE']]

两者都给出相同的错误:

AttributeError: module 'pandas.tseries.offsets' has no attribute 'timedelta'

【问题讨论】:

你的意思是pd.Timedelta(days=-6) 上面写着PythonQtError: No Qt bindings could be found 这似乎是环境问题而不是pandas 问题。 【参考方案1】:

可以使用Anchored offsets 重新采样每周锚定到星期一然后可以Resample.aggregate 执行操作:

logic = 'Open': 'first',
         'High': 'max',
         'Low': 'min',
         'Close': 'last'
output = df.resample('W-MON').agg(logic)

一些示例数据:

import yfinance as yf

msft = yf.Ticker("MSFT")
df = msft.history(start='2021-06-20', end="2021-07-20")
                  Open        High  ...  Dividends  Stock Splits
Date                                ...                         
2021-06-21  259.820007  263.519989  ...          0             0
2021-06-22  262.720001  265.790009  ...          0             0
2021-06-23  265.989990  266.829987  ...          0             0
2021-06-24  266.160004  267.850006  ...          0             0
2021-06-25  266.230011  267.250000  ...          0             0
2021-06-28  266.190002  268.899994  ...          0             0
2021-06-29  268.869995  271.649994  ...          0             0
2021-06-30  270.690002  271.359985  ...          0             0
2021-07-01  269.609985  271.839996  ...          0             0

样本输出:

                  Open        High         Low       Close
Date                                                      
2021-06-21  259.820007  263.519989  257.920013  262.630005
2021-06-28  262.720001  268.899994  262.399994  268.720001
2021-07-05  268.869995  278.000000  267.980011  277.649994
2021-07-12  278.029999  280.690002  274.299988  277.320007
2021-07-19  277.519989  284.100006  275.000000  276.140015

【讨论】:

以上是关于如何将现实世界 5 天的每日股票数据转换为每周模式以获得每周移动平均线的主要内容,如果未能解决你的问题,请参考以下文章

通过 Python 中的 pandas 将每日库存数据转换为每周

将每周时间序列转换为每日(使用比例标准)

如何设置以米为单位的世界坐标的转换矩阵(用于增强现实)

股票价格的最大利润

每日一题-——LeetCode(121)买卖股票的最佳时机

如何在 R 中使用我的模型来查看真实世界的测试数据如何拟合?