这个 TA-Lib 函数调用有什么问题?
What's wrong with this TA-Lib function call?
我正在尝试调用 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'
非常感谢这里的任何见解!
天哪,最后的调用方式是:
val = indicator_fn({'high': np.asarray([0.5]), 'low': np.asarray([0.2]), 'close': np.asarray([0.3])}, timeperiod=14)
现在可以使用了。 /脸掌
前3个参数必须是数组,例如:
val = indicator_fn(np.asarray([0.5]), np.asarray([0.2]), np.asarray([0.3]), timeperiod=14)
根据 tests,indicator_fn = abstract.Function('ADX', timeperiod=14)
也可能解决问题。
您收到的错误消息确实非常具有误导性,您可能需要向开发人员报告。
我正在尝试调用 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'
非常感谢这里的任何见解!
天哪,最后的调用方式是:
val = indicator_fn({'high': np.asarray([0.5]), 'low': np.asarray([0.2]), 'close': np.asarray([0.3])}, timeperiod=14)
现在可以使用了。 /脸掌
前3个参数必须是数组,例如:
val = indicator_fn(np.asarray([0.5]), np.asarray([0.2]), np.asarray([0.3]), timeperiod=14)
根据 tests,indicator_fn = abstract.Function('ADX', timeperiod=14)
也可能解决问题。
您收到的错误消息确实非常具有误导性,您可能需要向开发人员报告。