问题描述
sar = talib.SAR(df.high.as_matrix(),df.low.as_matrix(), acceleration=2, maximum=10)
结果和东方财富网不一致。请问是调用错误吗?后面两个参数换了几个,结果好像都是一致的。
解决方案
您好!出现计算结果与东方财富网不一致,主要是因为参数设置错误。
在 talib.SAR 函数中,acceleration(加速因子)和 maximum(最大加速因子)的参数值应该是小数,而不是整数。
1. 参数设置错误解析
东方财富等国内主流炒股软件中,SAR 的默认参数通常显示为 (4, 2, 20),这代表:
- 天数:4
- 步长(加速因子):2%
- 最大值(最大加速因子):20%
在 TA-Lib 中,这两个参数需要传入实际的小数值,即 0.02 和 0.2。您传入了 2 和 10,这远超了 SAR 算法的正常逻辑范围(通常加速因子在 0 到 0.2 之间)。因为数值过大,SAR 在计算的第一步就直接达到了最大值,导致无论你怎么微调这两个整数,结果看起来都一样,且完全失去了 SAR 指标应有的平滑追踪特性。
2. 正确的调用代码
请将代码修改为如下形式(同时建议将已弃用的 as_matrix() 替换为 .values):
import talib
# 正确的参数:acceleration=0.02, maximum=0.2
sar = talib.SAR(df.high.values, df.low.values, acceleration=0.02, maximum=0.2)
3. 关于与行情软件的微小差异
即使使用了正确的参数 0.02 和 0.2,您可能偶尔还是会发现与东方财富网的数值有极微小的差异。这是正常的,原因如下:
- 起始点差异:SAR 指标的计算依赖于历史数据的累积。TA-Lib 的计算起点和东方财富软件截取历史数据的起点可能不同。数据越长,这种初始误差会被逐渐平滑掉,但在数据段的前期可能会有差异。
- 极值判断逻辑:不同软件在处理第一根 K 线的初始 SAR 值(是取最高价还是最低价)时,底层 C/C++ 代码的默认逻辑可能存在细微差别。
总结:请将参数改为 acceleration=0.02, maximum=0.2,结果就会与东方财富网的 SAR 指标基本吻合了。