如何将现实世界 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.7
和Pandas 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 天的每日股票数据转换为每周模式以获得每周移动平均线的主要内容,如果未能解决你的问题,请参考以下文章