Истинный диапазон (TR – TRUE RANGE) – это истинный размах движения за выбранный период, величина которого определяется как максимальное значение из трех расстояний.
Параметры
Period - Период расчета индикатора для таймфрейма H1.
Особенности
- Имеется запаздывание до 1 часа для таймфрейма ниже H1, т.к. индикатор не перерисовывается на текущем баре. Рисует значения EMA для последнего, полностью рассчитанного, часа - EMA предыдущего часа.
- Работает на всех таймфреймах ниже D (не включая)
Пример работы
Код: Выделить всё
function Initialize()
{
IndicatorName = "ATRH";
PriceStudy = false;
AddInput("Input", Inputs.Candle);
AddSeries("ATRH", DrawAs.Line, Color.Red);
AddParameter("Period", 14, 60);
// для сохранения списков значений OHLC
AddGlobalVariable("H", Types.DoubleList);
AddGlobalVariable("L", Types.DoubleList);
AddGlobalVariable("C", Types.DoubleList);
AddGlobalVariable("A", Types.DoubleList); //ATR
}
function Evaluate()
{
// evge 22.04.2020 http://alfadirect4.ru
ATRH[0] = ATRH[1];
// новый час
if (BarTime(0).Hours != BarTime(1).Hours)
{
// новый бар дня
H.Insert(0, Input.High[0]); L.Insert(0, Input.Low[0]); C.Insert(0, Input.Close[0]);
var CN = C.Count;
if (CN > 1)
{
A.Insert(0, H[1] - L[1]);
}
// лишнее удаляем
if (CN > Period * 2) { H.RemoveAt(CN - 1); L.RemoveAt(CN - 1); C.RemoveAt(CN - 1); }
}
if (C.Count > 0)
{
if (Input.Low[0] < L[0]) L[0] = Input.Low[0];
if (Input.High[0] > H[0]) H[0] = Input.High[0];
C[0] = Input.Close[0];
}
if (A.Count > 1)
{
if (C.Count > 2)
{
var TR = Math.Max(H[1] , C[2]) - Math.Min(L[1], C[2]);
A[0] = ((Period - 1.0) * A[1] + TR) / Period;
}
}
if (A.Count > 0) ATRH[0] = A[0];
}
Скачать индикатор