Пользовательские индикаторы > Yesterday - экстремумы предыдущего дня

Дополнительные индикаторы от пользователей Альфа-Директ 4. Готовые решения от пользователей.
Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 18 фев 2016, 15:16

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

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

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

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


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

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

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 КБ) 1299 скачиваний
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 18 фев 2016, 16:10

Немного дополнил код, заполняются серии Hi и Lo без отображения. Сделано для того, что бы работало отображение на поле цены последних значений по галочке в настройках индикатора, т.к. сами уровни не отображают эти значения.
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 18 фев 2016, 17:54

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

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

TF-h3.png
TF-h3.png (7.04 КБ) 27758 просмотров
никогда такого не было и вот опять

Аватара пользователя
Pavelkor
Сообщения: 21
Зарегистрирован: 05 фев 2016, 10:57
Откуда: Москва
Благодарил (а): 3 раза

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

Непрочитанное сообщение Pavelkor » 28 май 2016, 11:35

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

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

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 28 май 2016, 14:38

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;
   }

}
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 28 май 2016, 14:39

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


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

Аватара пользователя
Pavelkor
Сообщения: 21
Зарегистрирован: 05 фев 2016, 10:57
Откуда: Москва
Благодарил (а): 3 раза

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

Непрочитанное сообщение Pavelkor » 28 май 2016, 15:07

Большое спасибо!

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

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

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 28 май 2016, 18:47

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


Написал

RangeOfDays (не путать с RangeOfDay :) )
никогда такого не было и вот опять

Аватара пользователя
Pavelkor
Сообщения: 21
Зарегистрирован: 05 фев 2016, 10:57
Откуда: Москва
Благодарил (а): 3 раза

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

Непрочитанное сообщение Pavelkor » 29 май 2016, 12:00

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

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 29 май 2016, 13:12

Pavelkor писал(а):чтобы уровни 26-го заканчивались 26-го, а 27-го были уже новые уровни, как в индикаторе RangeOfDay (не путать с RangeOfDays )


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

Сейчас

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

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


Вернуться в «Пользовательские индикаторы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей