TA-lib 异常:输入都是 NaN 错误?

TA-lib Exception: inputs are all NaN error?

我正在尝试 运行 使用 zipline 进行回测,我使用 TA-lib 进行一些技术分析。我的数据集很大(大小为千兆位)。因为我希望我的数据在 zipline 中工作,所以 我有很多数据都包含零作为多年的所有值一次 就这样可以将公司数据读入 zipline(因为 zipline 要求您拥有策略交易的整个持续时间的交易日历)。

错误信息:

_func.pxi in talib._ta_lib.MACD()

_func.pxi in talib._ta_lib.check_begidx1()

Exception: inputs are all NaN

我听说其他人也遇到了 TA-lib 的这个错误,而且没有好的方法来修复它。我该如何解决这个问题?是否需要我为 MACD 创建自己的函数?

令我惊讶的是,像 TA-lib 这样大的库无法处理超过一定大小的数据集。

如果我没理解错的话。指标计算的时候,需要一定的周期,比如布林线,至少需要20个周期,所以小于20就是NaN。因此,您需要检查您的列表中的这些值。

import math
x = float('nan')
math.isnan(x)

return True or False
import numpy as np
values = [float('nan'), np.nan, 55, "string", lambda x : x]
for value in values:
   print(f"{repr(value):<8} : {is_nan(value)}")

这里是高亮显示的 magdi 设置,需要计算周期。任何小于此的值都将是 NaN,当您尝试计算您没有任何输入的内容时,这就是您收到此错误的原因。 Here's an example from the exchange.

def MACD(data, fastperiod, slowperiod, signalperiod):
    macd, macdsignal, macdhist = [], [], []

    fast_ema = EMA(data, fastperiod)
    slow_ema = EMA(data, slowperiod)

    diff = []

    for k, fast in enumerate(fast_ema):
        if math.isnan(fast) or math.isnan(slow_ema[k]):
           macd.append(math.nan)
           macdsignal.append(math.nan)
        else:
          macd.append(fast-slow_ema[k])
          diff.append(macd[k])

    diff_ema = EMA(diff, signalperiod)
    macdsignal = macdsignal + diff_ema

    for k, ms in enumerate(macdsignal):
        if math.isnan(ms) or math.isnan(macd[k]):
           macdhist.append(math.nan)
        else:
           macdhist.append(macd[k] - macdsignal[k])

    return macd, macdsignal, macdhist
macd, macdsignal, macdhist = MACD(closes, 12, 26, 9)

这个函数计算macd。 如果传递 100 个值的列表,则 macd - 12 个值将为 nan,macdsignal - 26 将为 nan,macdhist - 9 将为 nan。