【问题标题】:How to calculate the average true range (ATR) by only using numpy?如何仅使用 numpy 计算平均真实范围(ATR)?
【发布时间】:2021-10-13 06:59:13
【问题描述】:

如何仅使用 numpy 计算平均真实范围(ATR)?我更喜欢最快的方式。

Atr 计算:

熊猫和 Numpy:

import numpy as np
import pandas as pd

high_low = data['High'] - data['Low']
high_close = np.abs(data['High'] - data['Close'].shift())
low_close = np.abs(data['Low'] - data['Close'].shift())

ranges = pd.concat([high_low, high_close, low_close], axis=1)
true_range = np.max(ranges, axis=1)

atr = true_range.rolling(14).sum()/14

【问题讨论】:

标签: python pandas numpy technical-indicator


【解决方案1】:

你可以试试这个,使用np.amax并定义my_shift而不是使用shift() from pandas

import numpy as np
from copy import deepcopy

def my_shift(my_list):
    for i in range(len(my_list)-1, -1, -1):
        if i == 0:
            my_list[i] = float('nan')
        else:
            my_list[i] = my_list[i-1]
    return my_list


high_low = data['High'] - data['Low']
high_close = np.abs(data['High'] - my_shift(deepcopy(data['Close'])))
low_close = np.abs(data['Low'] - my_shift(deepcopy(data['Close'])))


a = np.array([high_low,high_close,low_close])
TR = np.amax(a,0)
ATR = list()
rolling = 14
for i in range(len(TR)):
    ATR.append(np.sum(TR[((i+1)-rolling):(i+1)])/rolling)
ATR

【讨论】:

  • .shift() 方法是一个 pandas 函数,您正在使用 pandas 行。
  • @AlgoQ,我编辑代码并定义my_shift函数
猜你喜欢
  • 2017-03-08
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 2020-06-25
相关资源
最近更新 更多