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

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

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

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

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

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

// 14.08.2020 добавлен пересчет часов под реальный таймфрейм. Для совпадения показаний индикатора с данными графика в указанном таймфрейме (в часах) H1, H2, H3, H4, H6, H8, H12

т.е. теперь должно быть соответствие значений High, Low от таймфрейма значениям Hi, Lo серий для аналогичного таймфрейму значения параметра Hours

RangeHours-03.png
RangeHours-03.png (34.54 КБ) 45168 просмотров

RangeHours-02.png
RangeHours-02.png (58.31 КБ) 45168 просмотров


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

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", 4); // кол-во часов
  AddGlobalVariable("High", Types.Double, 0);
  AddGlobalVariable("Low", Types.Double, 0);
  AddGlobalVariable("Open", Types.Double, 0);
  AddGlobalVariable("Close", 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, где можно задать количество часов для вычисления диапазона.
//   14.08.2020 добавлен пересчет часов под реальный таймфрейм. Для совпадения показаний индикатора с данными графика в указанном таймфрейме (в часах) H1, H2, H3, H4, H6, H8, H12

bool isH = false;

int[] HH = {0,0,0,1,2,0,4,0,2,0,0,0,10};

//первая свечка часа
//сохранаем текущий индекс и последние найденные High, Low
if ( BarTime().Hours != BarTime(1).Hours)
   {
   bool NewDay = BarTime(0).Hours < BarTime(1).Hours;
   HRS = BarTime(0).Hours > BarTime(1).Hours ? HRS + BarTime(0).Hours - BarTime(1).Hours : Hours > 0 && Hours <= 12 ? HH[(int)Hours] : BarTime(0).Hours;
   if (HRS >= Hours || NewDay)
      {
         isH = true;
      if (!NewDay) 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];
    Open = Input.Open[0];
    Close = Input.Close[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];
    Close = Input.Close[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();

}

}