python - 如何在 pandas 中设置滚动 MACD
问题描述
我不知道如何在 SPY ETF 的一组数据上获得 .rolling(30) MACD。
我想对过去 30 天的数据进行滚动 MACD,但我很难找到正确的语法。
import pandas as pd
from pandas_datareader import data
import datetime as dt
spy_df = data.get_data_yahoo("SPY", "2018-01-01", dt.date.today())[:-1]
def MACD(df, n_fast=12, n_slow=21):
macd_df = pd.DataFrame()
EMAfast = pd.Series(df.ewm(span=n_fast, min_periods=n_slow - 1).mean())
EMAslow = pd.Series(df.ewm(span=n_slow, min_periods=n_slow - 1).mean())
MACD = pd.Series(EMAfast - EMAslow, name='MACD')
MACDsign = pd.Series(MACD.ewm(span=9, min_periods=8).mean(), name='MACDsignal')
MACDdiff = pd.Series(MACD - MACDsign, name='MACDdiff')
macd_df = macd_df.join(MACD)
macd_df = macd_df.join(MACDsign)
macd_df = macd_df.join(MACDdiff)
return macd_df
macd_df = spy["Close"].rolling(30).apply(MACD, raw=False)
我不断收到类型错误(Must be real number not DataFrame
或cannot convert the series to <class 'float'>
“)。
我通常想使用 TA-Lib 来完成这个,但我不知道这是否可能。
任何帮助将不胜感激。
解决方案
对于 Ta-Lib python 包装器。请参阅
https://mrjbq7.github.io/ta-lib/func_groups/momentum_indicators.html
就这么简单:
macd, macdsignal, macdhist = MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)
推荐阅读
- python - 无法从列表中删除项目
- php - 从 laravel 中的 routeserviceprovider 创建路由时中间件不起作用
- python - 运行此代码时出现异常
- javascript - 如何使用 css 解决 chrome 中的高度问题?
- web-services - 我们如何在 OpenTest 中进行使用 formdata 而不是 json 的 POST 服务调用?
- geoserver - 在 QGIS 中发送 WMS GetMAP API 请求时获取主机需要身份验证
- python-3.x - 如何使用带有自定义身份验证的 docker 设置 pypiserver?
- couchbase - couchbase 索引未创建
- asp.net-mvc - 从客户端调用时,IdentityServer 令牌返回 UnAuthorized
- typescript - 在联合类型上使用属性