talib atr 函数 相同数据、相同周期。不同数据长度结果不一样原因

import numpy as np
import talib

# 示例数据
high = np.array([48.76, 48.81, 48.95, 48.88, 48.84, 49.09, 49.24, 49.36, 49.98, 50.38, 50.44, 50.12, 50.17, 50.80, 50.92, 50.11, 50.28, 50.42, 50.31, 50.33])
low = np.array([48.42, 48.63, 48.84, 48.78, 48.68, 48.89, 49.10, 49.30, 49.52, 49.75, 49.98, 49.55, 49.17, 49.82, 49.96, 50.11, 50.26, 49.42, 49.31, 49.74])
close = np.array([48.70, 48.72, 48.90, 48.87, 48.82, 49.05, 49.20, 49.35, 49.92, 50.19, 50.12, 49.66, 49.83, 50.26, 50.49, 50.36, 50.26, 49.68, 49.86, 50.17])

# TR : MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
# max(Hi, Ci - 1) - min(Li, Ci - 1)

# 49.24,49.05,49.10
# 49.24-49.05=0.19  第7

# 49.09,48.82,48.89
# 49.09-48.82=0.27  第6

# 48.84, 48.87, 48.68
# 48.87 - 48.68=0.19 第5


# 48.88 , 48.90, 48.78
# 48.90-48.78 = 0.12  第4

# 48.95,48.72,48.84
# 48.95- 48.72  =0.23 第3

# 48.81,48.70,48.63
# 48.81-48.63=0.18 第2

# 0.19+0.27+0.19=0.65   5~7
# 0.19+0.27+0.19 /3=0.2166666666666667
# 0.12+0.19+0.27=0.58   4~6
# 0.12+0.19+0.27 /3=0.1933333333333333
# 0.23+0.12+0.19=0.54   3~5
# 0.23+0.12+0.19 /3= 0.18
# 0.18+0.23+0.12=0.53   2~4
# (0.18+0.23+0.12)/3=0.17666666666666667
# 计算ATR

# EMA的计算公式为:
# 在ATR的计算公式中,采用了一种称为“指数平滑移动平均数”的计算方法,这种方法使用一个加权系数来决定每个数据点的权重,系数越大,对应数据点的权重越高。
# 具体来说,在计算第n个数据点的ATR时,需要用到前n-1个数据点的ATR值作为移动平均数的输入,因此使用n-1作为移动平均数的窗口大小。
# 这种计算方法比传统的简单移动平均数更加灵活,能够更好地反映市场波动性的变化。

# 第一个数据点的ATR值为0,因为无法计算前一个数据点的TR。

# 对于第二个数据点,ATR的计算公式是:
# ATR2 = (TR1 + TR2 + TR3) / 3
#     = (0.18 + 0.23 + 0.12) / 3
#     = 0.53  / 3
#     = 0.17666666666666667
# ATR3 = (ATR2 * (n-1) + TR4) / n
#     = (0.17666666666666667 * 2 + 0.19) / 3
#     = (0.35333334 + 0.19) / 3
#     = 0.54333334 / 3
#     = 0.1811111133333333
# 对于第四个数据点,ATR的计算公式是:
# ATR = (ATR3 * (n-1) + TR5) / n
#     = (0.181111113 * 2 + 0.27) / 3
#     = (0.3622222266666667 + 0.27) / 3
#     = 0.63222222 / 3
#     = 0.2107407422222222

atr = talib.ATR(high, low, close, timeperiod=3)
print("全量ATR:", atr)
# 全量ATR: [       nan        nan        nan 0.17666667 0.18111111 0.21074074
#  0.20382716 0.18921811 0.3361454  0.43409694 0.44273129 0.48515419
#  0.65676946 0.76451298 0.82967532 0.67978354 0.48652236 0.65768158
#  0.77178772 0.71119181]

for index in range(0, len(high)):
    if index > 3:
        res = talib.ATR(high[index - 4:index], low[index - 4:index], close[index - 4:index], timeperiod=3)
        print('循环',res)

# 循环 [       nan        nan        nan 0.17666667]
# 循环 [ nan  nan  nan 0.18]
# 循环 [       nan        nan        nan 0.19333333]
# 循环 [       nan        nan        nan 0.21666667]
# 循环 [       nan        nan        nan 0.20666667]
# 循环 [       nan        nan        nan 0.32666667]
# 循环 [       nan        nan        nan 0.47333333]
# 循环 [       nan        nan        nan 0.57333333]
# 循环 [       nan        nan        nan 0.55333333]
# 循环 [       nan        nan        nan 0.67666667]
# 循环 [ nan  nan  nan 0.85]
# 循环 [ nan  nan  nan 0.98]
# 循环 [       nan        nan        nan 0.77333333]
# 循环 [ nan  nan  nan 0.48]
# 循环 [       nan        nan        nan 0.49333333]
# 循环 [nan nan nan 0.7]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值