簡體   English   中英

如何將現實世界的 5 天每日股票數據轉換為每周模式以獲得每周移動平均線

[英]How to convert real world 5-day daily stock data to weekly pattern to get weekly moving average

我有印度證券交易所數據和一個使用.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'

可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM