INNER CODE UNIT · Python
calculate_atr
jptsantossilva/BEC · bec/main.py:261
def calculate_atr(df: pd.DataFrame, period: int) -> float:
if period <= 0 or df.empty:
return 0.0
if not {"High", "Low", "Close"}.issubset(df.columns):
return 0.0
prev_close = df["Close"].shift(1)
tr = pd.concat(
[
(df["High"] - df["Low"]).abs(),
(df["High"] - prev_close).abs(),
(df["Low"] - prev_close).abs(),
],
axis=1,
).max(axis=1)
atr_series = tr.rolling(period, min_periods=period).mean()
if atr_series.empty or pd.isna(atr_series.iloc[-1]):