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

Yesterday - экстремумы предыдущего дня

Добавлено: 18 фев 2016, 15:16
evge
Индикатор Yesterday отображает уровни минимальной и максимальной цены последнего рабочего дня за исключением текущей даты.
Т.е. на текущий день можно видеть экстремумы предыдущего дня. Если последний бар графика это бар предыдущего дня или ранее, будут отображаться экстремумы этой даты.

Примеры работы:

Yesterday-02.png
Yesterday-02.png (33.69 КБ) 27990 просмотров

Yesterday-01.png
Yesterday-01.png (34.64 КБ) 27990 просмотров


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

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

function Initialize()
{
  IndicatorName = "Yesterday";   
  AddInput("Input", Inputs.Candle);   
  PriceStudy = true;
  AddSeries("Hi", DrawAs.Custom, Color.Green);     
  AddSeries("Lo", DrawAs.Custom, Color.Red);     
  AddLevel(0, Color.Green, LineStyles.DashBig, 1, "Yesterday");
  AddLevel(0, Color.Red, LineStyles.DashBig, 1, "Yesterday");
  AddParameter("MinScan", 163, 2); //количество 5-минутных баров
  AddGlobalVariable("High", Types.Double, 0);
  AddGlobalVariable("Low", Types.Double, 0);
}

function Evaluate()
{
// evge 18.02.2016, http://alfadirect4.ru

// т.к. таймфреймы H3 выдают начало сессии в 9:00, H4 - в 8:00 и т.д.
  if (BarDate() != DateTime.Today && BarTime() <= AsTime(10, 0, 0) && BarTime() >= AsTime(0, 0, 0))
  {
    High = Input.High[0];
    Low = Input.Low[0];   
  }
  else if (BarDate() != DateTime.Today && BarTime() > AsTime(10, 0, 0))
  {
    if ( Input.High[0] > High) High = Input.High[0];
    if ( Input.Low[0] < Low) Low = Input.Low[0];
  }
  if (CurrentIndex == MaxIndex)
  {

   if (High > 0)
   {
    Levels[0].Level = High;
   Hi = High;
   }
   if (Low > 0)
   {
    Levels[1].Level = Low;
   Lo = Low;
   }
  }   

}


Скачать исходный текст:

Yesterday.zip
(1.06 КБ) 1313 скачиваний

Re: Yesterday - экстремумы предыдущего дня

Добавлено: 18 фев 2016, 16:10
evge
Немного дополнил код, заполняются серии Hi и Lo без отображения. Сделано для того, что бы работало отображение на поле цены последних значений по галочке в настройках индикатора, т.к. сами уровни не отображают эти значения.

Re: Yesterday - экстремумы предыдущего дня

Добавлено: 18 фев 2016, 17:54
evge
Добавлен параметр минимального количество баров истории * 2, т.е. до 5 минуток должно работать, а вот на ТФ ниже - не обязательно.

Ещё обнаружилось, что при ТФ выше H2 время первого бара смещается назад от 10 часов. Поэтому установка первоначальных параметров Low и High выставляется не по 10:00, а в период с 00:00 по 10:00, что позволило работать индикатору на ТФ до H12.

TF-h3.png
TF-h3.png (7.04 КБ) 27959 просмотров

Re: Yesterday - экстремумы предыдущего дня

Добавлено: 28 май 2016, 11:35
Pavelkor
Здравствуйте!
Можно, и насколько сложно (я в этом не силен), сделать так, чтобы отображалось еще и среднее значение цены?
Чтобы экстремумы и среднее значение отображались только на всех предыдущих днях и не отображались на текущем дне, а на текущем дне отображались те же значения текущего дня, как в индикаторе RangeOfDay, но тоже со средним значением.

Выглядит так https://monosnap.com/file/rwVt4W5excwrt ... ICedu11j4#

Re: Yesterday - экстремумы предыдущего дня

Добавлено: 28 май 2016, 14:38
evge
Pavelkor писал(а):Можно, и насколько сложно (я в этом не силен), сделать так, чтобы отображалось еще и среднее значение цены?


Можно, это не сложно. Вот модификация индикатора с отображением средней цены (Mid).

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

function Initialize()
{
  IndicatorName = "Yesterday";   
  AddInput("Input", Inputs.Candle);   
  PriceStudy = true;
  AddSeries("Hi", DrawAs.Custom, Color.Green); // максимум предыдущего дня     
  AddSeries("Lo", DrawAs.Custom, Color.Red);   // минимум предыдущего дня
  AddSeries("Mid", DrawAs.Custom, Color.Silver);  // средняя цена
  AddLevel(0, Color.Green, LineStyles.DashBig, 1, "Yesterday");
  AddLevel(0, Color.Red, LineStyles.DashBig, 1, "Yesterday");
  AddLevel(0, Color.Silver, LineStyles.DashBig, 1, "Yesterday");
  AddParameter("MinScan", 163, 2); // количество 5-минутных баров
  AddGlobalVariable("High", Types.Double, 0);
  AddGlobalVariable("Low", Types.Double, 0);
}

function Evaluate()
{
// evge 18.02.2016, http://alfadirect4.ru
// 28.05.2016:
//   Добавлено отображение средней цены

// т.к. таймфреймы H3 выдают начало сессии в 9:00, H4 - в 8:00 и т.д.
  if (BarDate() != DateTime.Today && BarTime() <= AsTime(10, 0, 0) && BarTime() >= AsTime(0, 0, 0))
  {
    High = Input.High[0];
    Low = Input.Low[0];   
  }
  else if (BarDate() != DateTime.Today && BarTime() > AsTime(10, 0, 0))
  {
    if ( Input.High[0] > High) High = Input.High[0];
    if ( Input.Low[0] < Low) Low = Input.Low[0];
  }
  if (CurrentIndex == MaxIndex)
  {

   if (High > 0)
   {
    Levels[0].Level = High;
   Hi = High;
   }
   if (Low > 0)
   {
    Levels[1].Level = Low;
   Lo = Low;
   }
  }   

   if (High > 0 && Low > 0) {
   Levels[2].Level = (High + Low) * 0.5;
   Mid = (High + Low) * 0.5;
   }

}

Re: Yesterday - экстремумы предыдущего дня

Добавлено: 28 май 2016, 14:39
evge
Pavelkor писал(а):Чтобы экстремумы и среднее значение отображались только на всех предыдущих днях и не отображались на текущем дне, а на текущем дне отображались те же значения текущего дня, как в индикаторе RangeOfDay, но тоже со средним значением.


Это немного сложнее будет.
Займусь как появится время.

Re: Yesterday - экстремумы предыдущего дня

Добавлено: 28 май 2016, 15:07
Pavelkor
Большое спасибо!

evge писал(а):Это немного сложнее будет.
Займусь как появится время.

Буду ждать. В моем понимании, в результате получится 2 индикатора: Yesterday и RangeOfDay "в одном флаконе"

Re: Yesterday - экстремумы предыдущего дня

Добавлено: 28 май 2016, 18:47
evge
Pavelkor писал(а):Буду ждать. В моем понимании, в результате получится 2 индикатора: Yesterday и RangeOfDay "в одном флаконе"


Написал

RangeOfDays (не путать с RangeOfDay :) )

Re: Yesterday - экстремумы предыдущего дня

Добавлено: 29 май 2016, 12:00
Pavelkor
Класс!!
Спасибо большое!
Возможно я не совсем правильно сформулировал.
Сейчас индикатор (на примере последних дней) 27-го числа продолжает рисовать уровни от 26-го числа, а нужно, чтобы уровни 26-го заканчивались 26-го, а 27-го были уже новые уровни, как в индикаторе RangeOfDay (не путать с RangeOfDays :) )

Re: Yesterday - экстремумы предыдущего дня

Добавлено: 29 май 2016, 13:12
evge
Pavelkor писал(а):чтобы уровни 26-го заканчивались 26-го, а 27-го были уже новые уровни, как в индикаторе RangeOfDay (не путать с RangeOfDays )


27 мы не можем рисовать уровни, они ещё не определены если день ещё не закончился.

Сейчас

Уровни 26 рисуется на 27 пока не появится следующий торговый день, т.е. 30-ое.
Как только появится 30-го первая свечка, 27 нарисует свои уровни (перерисуется) и будет продолжать их на 30-ое.
31-го перерисуется 30-ое, и так далее...

Есть только вариант рисовать уровни ещё не сформированные за текущий день, т.е. сдвигать их при появлении новых min и max.
Могу сделать универсально, тот вариант что есть сейчас и как опция в параметрах вариант динамического рисования уровней текущего дня.