首页 > 解决方案 > 这个 TA-Lib 函数调用有什么问题?

问题描述

我正在尝试调用 TA-lib 的 ADX 函数,根据其文档,该函数具有以下参数:

ADX(high, low, close[, timeperiod=?])

    Average Directional Movement Index (Momentum Indicators)

    Inputs:
        prices: ['high', 'low', 'close']
    Parameters:
        timeperiod: 14
    Outputs:
        real

我这样称呼它:

from talib import abstract


params = {'timeperiod': 14}

indicator_fn = abstract.Function('ADX')

val = indicator_fn(0.5, 0.2, 0.3, **params)

print(val)

但它失败了:

Traceback (most recent call last):
  File "/home/stark/Work/test/test.py", line 11, in <module>
    val = indicator_fn(0.5, 0.2, 0.3, **params)
  File "talib/_abstract.pxi", line 398, in talib._ta_lib.Function.__call__
  File "talib/_abstract.pxi", line 277, in talib._ta_lib.Function.set_function_args
  File "talib/_abstract.pxi", line 462, in talib._ta_lib.Function.__check_opt_input_value
TypeError: Invalid parameter value for timeperiod (expected int, got float)

这对我来说似乎没有意义。timeperiod显然是一个int,不是吗?

如果我尝试这样称呼它:

val = indicator_fn([0.5, 0.2, 0.3], timeperiod=14)

它失败了TypeError: Invalid parameter value for timeperiod (expected int, got list)

如果我尝试

val = indicator_fn(prices=[0.5, 0.2, 0.3], timeperiod=14)

它失败了KeyError: 0.5

如果我尝试:

val = indicator_fn(prices={'high': 0.5, 'low': 0.2, 'close': 0.3}, timeperiod=14)

它失败了TypeError: unhashable type: 'dict'

非常感谢这里的任何见解!

标签: pythonpython-3.xta-lib

解决方案


前 3 个参数必须是数组,例如:

val = indicator_fn(np.asarray([0.5]), np.asarray([0.2]), np.asarray([0.3]), timeperiod=14)

根据测试indicator_fn = abstract.Function('ADX', timeperiod=14)也可以解决问题。

您收到的错误消息确实非常具有误导性,您可能希望将其报告给开发人员。


推荐阅读