Here is the data:
high = np.array([10697.12, 10706.16, 10744.75, 10747.88, 10745.42])
low = np.array([10683.51, 10694.72, 10705.16, 10728.22, 10727.29])
close = np.array([10696.47, 10705.16, 10728.23, 10742.46, 10730.27])
Method 1: Input the data into Average True Range method directly
talib.ATR(high, low, close, timeperiod=3)
output: array([nan, nan, nan, 23.56333333, 21.75222222])
Method 2: Calculate True Range first, and then take average
talib.TRANGE(high, low, close)
output: array([nan, 11.44, 39.59, 19.66, 18.13])
taking 3 day average:
(11.44+39.59+19.66)/3=23.56
(39.59+19.66+18.13)/3=25.79
So the Average True Range array should be: array([nan, nan, nan, 23.56, 25.79])
The last value in the Average True Range array from the first method is different from the second method. (21.75 vs 25.79)
What is wrong here?
The calculation of talib.ATR()
is correct.
From the Average true range page on Wikipedia:
The ATR at the moment of time t is calculated using the following formula: (This is one form of an exponential moving average)
Using your values:
>>> (23.56333333 * 2 + 18.13) / 3
21.752222219999997
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With