Home > Blockchain >  how to calculate true range
how to calculate true range

Time:01-19

In technical analysis true range is the difference between the high and the low plus any gap that occurred between sessions. So if today's high is 10 and the low is 9 range is 1. If yesterdays close was 9.5 then true range is also one, but if yesterdays close was 11 then true range is 2.

I have a pandas data frame indexed by date so range is simply:

df['range'] = df['High'] - df['Low']

True range would be something like:

df['tr'] = max(df['High'], df['Close'].shift(1)) - min(df['Low'], df['Close'].shift(1))

But max() and min() aren't applicable to pandas data frames. How can I reference the 'Close' from the prior row to create the column 'tr'?

CodePudding user response:

Here is another approach, assuming your DataFrame contains exclusively OHLC data:

data = df.drop("Open", axis=1)
data.Close = data.Close.shift()
true_range = data.max(1) - data.min(1)

Some explanation: if you shift the Close column inplace, the true range becomes difference between the max and min values (row-wise).

CodePudding user response:

Use pd.concat to get the min and the max of each series:

df['tr'] = pd.concat([df['High'], df['Close'].shift()], axis=1).max(axis=1) \
           - pd.concat([df['Low'], df['Close'].shift()], axis=1).min(axis=1)

CodePudding user response:

def calculate_true_range(a,b,c):
    true_range = max(a, b.shift(1)) - min(c, b.shift(1))
    return true_range


df['tr'] = df.apply(lambda row : calculate_true_range(row['High'], row['Close'], row['Low'], axis = 1)

CodePudding user response:

All three answers above work to calculate true range. True range is usually used in average true range. An typical usage example would be Chandelier stops.

atrLength = 10

data['atr'] = data['tr'].rolling(window=atrLength).mean()

  •  Tags:  
  • Related