【问题标题】:How to set up Rolling MACD in pandas如何在 pandas 中设置滚动 MACD
【发布时间】: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 DataFramecannot convert the series to <class 'float'>")。

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

任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas finance algorithmic-trading rolling-computation


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 2014-09-09
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 2017-10-08
      相关资源
      最近更新 更多