Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1233

Добавлено: evge » 14 авг 2020, 14:46

Тема: Re: RangeOfHours - экстремумы предыдущих часов

Текст сообщения:

Сделал универсально, теперь можно задать нужное кол-во часов в параметрах

добавил параметр Hours

George69 писал(а):Скажите, пожалуйста, а есть ли такой же индикатор, только не для одного последнего часа, а для двух последних часов?


в этом случае задаем Hours = 2

RangeHours-01.png
RangeHours, параметр Hours = 2
RangeHours-01.png (37.47 КБ) 35198 просмотров


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

function Initialize()
{
  IndicatorName = "RangeHours";
  AddInput("Input", Inputs.Candle);   
  PriceStudy = true;
  AddSeries("Hi", DrawAs.Custom, Color.Green); // максимум предыдущего часа
  AddSeries("Lo", DrawAs.Custom, Color.Red);   // минимум предыдущего часа
  AddSeries("Mid", DrawAs.Custom, Color.Silver);  // средняя цена
  AddParameter("MinScan", 163, 2); // подзагрузка истории количество 5-минутных баров
  AddParameter("CDType", 1);  // Current Data Type - тип текущего часа, 0 - продолжать отображение экстремумов предыдущего часа, 1 - экстремумы текущего часа (будут меняться динамически в течение часа)
  AddParameter("Hours", 1); // кол-во часов
  AddGlobalVariable("High", Types.Double, 0);
  AddGlobalVariable("Low", Types.Double, 0);
  AddGlobalVariable("LastHigh", Types.Double, 0);
  AddGlobalVariable("LastLow", Types.Double, 0);
  AddGlobalVariable("SI", Types.Int, 0);
  AddGlobalVariable("SIO", Types.Int, 0);
  AddGlobalVariable("HRS", Types.Double, 0);
}

function Evaluate()
{
// evge 27.04.2020 https://alfadirect4.ru
//   RangeHours - Индикатор рисует экстремумы предыдущих часов и текущего часа, в зависимости от параметров, продолжая экстремумы предыдущего часа (кол-ва часов Hours) или расчитывая в текущем часе динамически.
//   14.08.2020 - добавлен параметр Hours, где можно задать количество часов для вычисления диапазона.

var isH = false;

//первая свечка часа
//сохранаем текущий индекс и последние найденные High, Low
if ( BarTime().Hours != BarTime(1).Hours)
   {
   HRS += BarTime(0).Hours > BarTime(1).Hours ? BarTime(0).Hours - BarTime(1).Hours : BarTime(0).Hours;
   if (HRS >= Hours)
      {
         isH = true;
      HRS = 0;
      SIO = SI;
      SI = CurrentIndex;
      LastHigh = High;
      LastLow = Low;
   
      //перерисовываем
      if (SIO != 0)
      for (var x=0; x <= CurrentIndex - SIO; x++)
      {
      Hi[x] = High;
      Lo[x] = Low;
      Mid[x] = (Low + High) * 0.5;     
      }
      }
   }

if ((BarTime().Hours != DateTime.Today.Hour) || CDType != 0)
if (isH)
  {
    High = Input.High[0];
    Low = Input.Low[0];   
  }
  else if (BarTime() > AsTime(0, 0, 0))
  {
    if ( Input.High[0] > High) High = Input.High[0];
    if ( Input.Low[0] < Low) Low = Input.Low[0];
  }

if (CDType == 0)
{
   if (LastHigh !=0 && LastLow !=0)
   {
   Hi[0] = LastHigh;
   Lo[0] = LastLow;
   Mid[0] = (LastLow + LastHigh) * 0.5;
   
   Hi.DrawDash();
   Lo.DrawDash();
   Mid.DrawDash();
   }
} else
{

if (SI != 0)
for (var x=0; x <= CurrentIndex - SI; x++)
{
Hi[x] = High;
Lo[x] = Low;
Mid[x] = (Low + High) * 0.5;     
}

Hi.DrawDash();
Lo.DrawDash();
Mid.DrawDash();
}

}