首页 > 解决方案 > 如何在 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 DataFramecannot convert the series to <class 'float'>“)。

我通常想使用 TA-Lib 来完成这个,但我不知道这是否可能。

任何帮助将不胜感激。

标签: pythonpandasfinancealgorithmic-tradingrolling-computation

解决方案


对于 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)

推荐阅读