【发布时间】:2019-08-22 14:09:58
【问题描述】:
我不知道如何在 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来完成这个,但我不知道这是否可能。
任何帮助将不胜感激。
【问题讨论】:
标签: python pandas finance algorithmic-trading rolling-computation