Страница 1 из 2

ATR (Average True Range) – средний истинный диапазон

Добавлено: 08 фев 2016, 09:26
evge
Истинный диапазон (TR – TRUE RANGE) – это истинный размах движения за выбранный период, величина которого определяется как максимальное значение из трех расстояний (см. рис.).

ATR-01.png
ATR-01.png (7.24 КБ) 37763 просмотра


Для вычисления TR используется следующее выражение:

TRt = max{(D1), (D2), (D3)} = max{(Ht - Lt), (Ht – Ct-1), (Ct-1 – Lt)},

где Ht – максимальная цена за последний период (бар), Lt – минимальная цена за последний период (бар), Ct-1 – цена закрытия предыдущего периода (бара).

Средний истинный диапазон – показывает средний размер бара за выбранный тайм-фрейм, вычисляется как усредненное значение от истинного диапазона (TR)

ATRt = ATRt-1*(N-1)/N + TRt/N,

где ATRt и ATRt-1 – значение индикатора на последнем и предыдущем периоде (баре) соответственно, N – период усреднения. Часто при расчете индикатора, в отличии от авторского варианта, применяется простое или экспоненциальное сглаживание.

Индикатор в такой интерпретации более пригоден только для дневного тайм-фрейма, т.к. при его использовании внутри дня и при наличии гэпа, индикатор будет неинформативен приблизительно 3*N первых баров.

Типовые параметры

Значение периода усреднения выбирается N = 14 или Т = 7 для дневного тайм-фрейма.

Индикатор ATR в основном используется как вспомогательный для оценки текущей волатильности или среднего движения на рынке за выбранный тайм-фрейм. Применяется в некоторых случаях при вычислении уровня стопа.

Сигналы

  • Если цена отклоняется от экстремума на M значений индикатора ATR в противоположную сторону от направления предыдущего движения, то позиция закрывается по стопу.

Автор: Уэллс Уайлдер (Welles Wilder).
Первоисточник: Welles Wilder. New Concepts in Technical Trading Systems. 1978.

Пример:

ATR-00.png
ATR-00.png (41.72 КБ) 37763 просмотра


Исходный текст:

Код: Выделить всё

function Initialize()
{
 IndicatorName = "ATR";                               
 AddInput("Input", Inputs.Candle);
 PriceStudy = false;                                       
 AddParameter("Period", 10);                        
 AddSeries("ATR", DrawAs.Line, Color.LightBlue);   
}

function Evaluate()
{
// AlfaDirect. 2014. OX 
// Средний истинный диапазон (ATR - Average True Range).
// Автор - Уэллс Уайлдер (Welles Wilder).
  var TR = 0.0;
  if (CurrentIndex < 1)
     ATR = Input.High[0]-Input.Low[0];
  else
  { 
     TR = ( Math.Max(Input.High[0] , Input.Close[-1]) - Math.Min(Input.Low[0], Input.Close[-1]));
      ATR = ((Period-1.0)*ATR[-1] + TR)/Period;
  }
}


Индикатор является встроенным индикатором, поэтому создавать пользовательский индикатор не имеет смысла.

Re: ATR (Average True Range) – средний истинный диапазон

Добавлено: 20 окт 2019, 20:18
Tshibo
Приветствую!
А как получить его же MA на том же графике?Типа такого.
Спасибо!

Уже сделал, осталось закрасить.

Re: ATR (Average True Range) – средний истинный диапазон

Добавлено: 21 окт 2019, 07:41
evge
Здравствуйте!

Это можно сделать без кода, указав в параметрах серию входящую для MA не Close, а ATR (добавленный до этого).

ATR-MA-01.png
ATR-MA-01.png (32.08 КБ) 35697 просмотров

ATR-MA-02.png
ATR-MA-02.png (38.71 КБ) 35697 просмотров

Re: ATR (Average True Range) – средний истинный диапазон

Добавлено: 21 окт 2019, 11:24
Tshibo
Спасибо!
А для наглядности как закрасить область между линиями?

Re: ATR (Average True Range) – средний истинный диапазон

Добавлено: 21 окт 2019, 11:45
evge
Здесь уже понадобится написать код нового индикатора:

Код: Выделить всё

function Initialize()
{
IndicatorName = "ATRMA";
PriceStudy = false;
AddInput("Input", Inputs.Candle);
AddSeries("A", DrawAs.Custom, Color.Red);
AddSeries("M", DrawAs.Custom, Color.Green);
AddParameter("PeriodATR", 14);
AddParameter("PeriodMA", 10);
}
function Evaluate()
{

// evge 21.10.2019 https://alfadirect4.ru

var xA = ATR(Input, PeriodATR);
var xM = SMA(xA, PeriodMA);

A[0] = xA[0];
M[0] = xM[0];

if (A[0] > M[0])
A.DrawChannel(M);
else
M.DrawChannel(A);
}


ATR-MA-03.png
ATR-MA-03.png (36.71 КБ) 35658 просмотров

Re: ATR (Average True Range) – средний истинный диапазон

Добавлено: 21 окт 2019, 13:08
Tshibo
Спасибо!

Re: ATR (Average True Range) – средний истинный диапазон

Добавлено: 26 ноя 2019, 12:37
STiTcH
Как можно исключить из его расчета аномальные бары?
Например когда TR текущего бары более чем в 3 раза больше TR предыдущего, то такой бар при расчете индикатора ATR подставляется равным TR[1].

Re: ATR (Average True Range) – средний истинный диапазон

Добавлено: 26 ноя 2019, 13:00
evge
А разве тут такое есть чтоб в 3 раза?
По графику там диапазон ATR от 0.9 до 1.1 (грубо)

Re: ATR (Average True Range) – средний истинный диапазон

Добавлено: 26 ноя 2019, 13:09
STiTcH
Я имею в виду сделать новый модифицированный ATR индикатор, который при расчете текущего значения ATR не учитывает аномальные бары.

Re: ATR (Average True Range) – средний истинный диапазон

Добавлено: 26 ноя 2019, 13:45
evge
доп. параметр Smooth - во сколько раз текущий TR больше предыдущего TR, тогда игнорируем.

Код: Выделить всё

function Initialize()
{
 IndicatorName = "ATRs";                               
 AddInput("Input", Inputs.Candle);
 PriceStudy = false;                                       
 AddParameter("Period", 10);                       
 AddParameter("Smooth", 3);                       
 AddSeries("ATR", DrawAs.Line, Color.Red);   
}

function Evaluate()
{
// AlfaDirect. 2014. OX
// Средний истинный диапазон (ATR - Average True Range).
// Автор - Уэллс Уайлдер (Welles Wilder).

// evge 26.11.2019 https://alfadirect4.ru
// add smooth
  var TR = 0.0;
  if (CurrentIndex < 1)
     ATR = Input.High[0]-Input.Low[0];
  else
  {
     TR = ( Math.Max(Input.High[0] , Input.Close[-1]) - Math.Min(Input.Low[0], Input.Close[-1]));
     var TR1 = ( Math.Max(Input.High[1] , Input.Close[-2]) - Math.Min(Input.Low[1], Input.Close[-2]));
     if (TR > TR1 * Smooth) TR = TR1;
     ATR = ((Period-1.0)*ATR[-1] + TR)/Period;
  }
}


ATRs-01.png
ATRs-01.png (36.13 КБ) 35013 просмотров