Files
Miha Kralj 35a6702b06 fix(docs): correct .md documentation across errors, dynamics, filters, forecasts, momentum, numerics, oscillators, reversals, statistics, trends, volatility, volume
Deep review of all indicator categories verified .md headers against .cs WarmupPeriod, parameters, inputs, and outputs. Fixes include warmup corrections, parameter documentation, output type accuracy, and Pine Script alignment.
2026-03-10 18:38:23 -07:00

39 lines
1.1 KiB
Plaintext

// Licensed under the Apache License, Version 2.0
// © mihakralj
//@version=6
indicator("Average True Range (ATR)", "ATR", overlay=false)
//@function Calculates the Average True Range (ATR)
//@param length The period length for the ATR calculation.
//@returns The ATR value.
//@optimized Beta precomputation for RMA warmup compensation
atr(simple int length) =>
var float prevClose = close
float tr1 = high - low
float tr2 = math.abs(high - prevClose)
float tr3 = math.abs(low - prevClose)
float trueRange = math.max(tr1, tr2, tr3)
prevClose := close
float alpha = 1.0 / float(length)
float beta = 1.0 - alpha
var float EPSILON = 1e-10
var float raw_rma = 0.0
var float e = 1.0
if not na(trueRange)
raw_rma := (raw_rma * (length - 1) + trueRange) / length
e *= beta
e > EPSILON ? raw_rma / (1.0 - e) : raw_rma
else
na
// ---------- Main loop ----------
// Inputs
i_length = input.int(14, "Length", minval=1, tooltip="Number of bars used for the ATR calculation")
// Calculation
atrValue = atr(i_length)
// Plot
plot(atrValue, "ATR", color=color.yellow, linewidth=2)