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

ATR дневного таймфрейма на нижестоящих

Добавлено: 25 ноя 2016, 13:56
Gemin
Добрый день, Evge!
Если возможно, подскажите как данные с дневного таймфрейма получать на таймфреймах меньше часа на примере индикатора ATR.
Спасибо!

Re: ATR дневного таймфрейма на нижестоящих

Добавлено: 03 июн 2018, 18:55
Sergio
Мне тоже интересно, как получить ATR. Поделитесь советом пожалуйста

Re: ATR дневного таймфрейма на нижестоящих

Добавлено: 03 июн 2018, 21:23
evge
Что-то я пропустил это сообщение 1.5 года назад.

Например так:

Но тут учтите, чть есть запаздывание в 1 день на часовом ТФ (или другом ТФ).
Мы будем видеть АТР не текущего, а предыдущего дня. Чтобы отрисовать на текущем ТФ АТР текущего дня придётся перерисовывать весь текущий день, т.е. менять значения на всех барах текущего дня. Поэтому привожу пример как отрисовать за предыдущий день АТР дня на текущем дне, так перерисовывать не надо.

Наверное, непонятно разъяснил :)

ATRDay-01.png


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

function Initialize()
{
IndicatorName = "ATRDay";
PriceStudy = false;
AddInput("Input", Inputs.Candle);
AddSeries("ATRDay", DrawAs.Line, Color.Red);

AddParameter("Period", 14, 350);
 
// для сохранения списков значений OHLC
AddGlobalVariable("O", Types.DoubleList);
AddGlobalVariable("H", Types.DoubleList);
AddGlobalVariable("L", Types.DoubleList);
AddGlobalVariable("C", Types.DoubleList);
AddGlobalVariable("A", Types.DoubleList); //ATR
}

function Evaluate()
{

// evge 03.06.2018 http://alfadirect4.ru

ATRDay[0] = ATRDay[1];

// новый день
if (BarDate(0) != BarDate(1))
{
   // новый бар дня
   O.Insert(0, Input.Open[0]); H.Insert(0, Input.High[0]); L.Insert(0, Input.Low[0]); C.Insert(0, Input.Close[0]);   
   if (O.Count > 1)
   {
    A.Insert(0, H[1] - L[1]);
   }   
   // лишнее удаляем
   var CN = O.Count;
   if (CN > Period * 2) { O.RemoveAt(CN - 1); H.RemoveAt(CN - 1); L.RemoveAt(CN - 1); C.RemoveAt(CN - 1); }
}
if (O.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) ATRDay[0] = A[0];

}


Скачать код индикатора:

ATRDay.zip
(44.63 КБ) 1166 скачиваний