RangeOfDays - экстремумы предыдущих дней
Добавлено: 28 май 2016, 18:45
				
				Индикатор RangeOfDays отображает уровни минимальной, средней, максимальной цены предыдущих дней. 
2 варианта расчета экстремумов текущего дня:
MinScan - необходимая история в барах. Загружаемая история = MinScan * 2
CDType - Current Day Type - тип определения экстремумов текущего дня. 0 - продолжение экстремумов предыдущего дня, 1 - динамическое определение экстремумов текущего дня.
Примеры работы
Исходный текст индикатора:
Скачать исходный текст
			2 варианта расчета экстремумов текущего дня:
- В текущий день рисуются уровни предыдущего дня. В начале текущего дня, на первом баре, уровни предыдущего дня перерисовываются в соответствии с его экстремумами;
- Экстремумы определяются динамически.
MinScan - необходимая история в барах. Загружаемая история = MinScan * 2
CDType - Current Day Type - тип определения экстремумов текущего дня. 0 - продолжение экстремумов предыдущего дня, 1 - динамическое определение экстремумов текущего дня.
Примеры работы
Исходный текст индикатора:
Код: Выделить всё
function Initialize()
{
  IndicatorName = "RangeOfDays";   
  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 Day Type - тип текущего дня, 0 - продолжать отображение экстремумов предыдущего дня, 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); 
}
function Evaluate()
{
// evge 28.05.2016 http://alfadirect4.ru
//   RangeOfDays - Индикатор рисует экстремумы предыдущих дней и текущего дня, в зависимости от параметров, продолжая экстремумы предыдущего дня или расчитывая в текущем дне динамически.
//первая свечка ТФ
//сохранаем текущий индекс и последние найденные High, Low
if ( BarTime() <= AsTime(10, 0, 0) && BarTime() >= AsTime(0, 0, 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;      
   }
   } 
// т.к. таймфреймы H3 выдают начало сессии в 9:00, H4 - в 8:00 и т.д.
if (((BarDate() != DateTime.Today) || CDType != 0) && BarTime() <= AsTime(10, 0, 0) && BarTime() >= AsTime(0, 0, 0))
  {
    High = Input.High[0];
    Low = Input.Low[0];   
  }
  else if (((BarDate() != DateTime.Today) || CDType != 0) && 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();
}
}
Скачать исходный текст
