python - 这个 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'
非常感谢这里的任何见解!
解决方案
前 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)
也可以解决问题。
您收到的错误消息确实非常具有误导性,您可能希望将其报告给开发人员。
推荐阅读
- html - 将容器移到页脚上方
- r - 使用 hc_add_series_map() 而不是 hcmap() 在地图上可视化气泡
- spring - 如何使用本机查询映射嵌套投影
- mysql - 我无法弄清楚 MySQL 有什么问题不断收到错误 1064
- python - 当代码在python中运行x次时,如何在代码中运行函数的特定部分?
- python - 如何压缩文件夹中的图像,使其总大小低于一定数量?
- java - JavaFX:显示时动态更新菜单
- html - 大于其属性
- regex - 通过gsub在ruby中查找双引号之间的文本
- c++ - glReadPixels depth_buffer_component 总是返回 1