Вычислить суточный объем и максимумы, начиная от текущего момента...

 
Вроде простая задача -
Мне нужно знать объемы и ценовые максимумы ровно за сутки назад начиная с текущего момента. Текущим моментом можно считать 1-ый минутный бар.
Сделал в лоб, простым подсчетом минутных баров - не понравилось, долго и некрасиво. Может есть какие-то штатные средства? Скажу честно, глубоко не копал, просто времени в обрез, вот решил сэкономить =)
Спасибо за понимание...
 
А предыдущий дневной бар Вас не устроит?
 
Gorillych писал (а):
А предыдущий дневной бар Вас не устроит?
Если бы... :(  с кратными барами проблем нет
 
http://www.musiclib.ru/music.php?res_id=82792643215

Вдруг на ум пришло, безо всяких намеков на кого-либо :)
 
Rosh:
http://www.musiclib.ru/music.php?res_id=82792643215

Вдруг на ум пришло, безо всяких намеков на кого-либо :)

А по существу ссылочек нет?
 
'Price Channel' Это относительно  экстремумов.
 
Вот это можно оптимизировать?
int      VolSum=0;
   double   MaxPrice=0; 
   double   MinPrice=32000;
   int      KvoMinut=24*60;
   
   for (int i=1;i<=KvoMinut;i++)
   {
      VolSum=VolSum+iVolume(Symbol(),PERIOD_M1,i);
      MaxPrice=MathMax(MaxPrice,iHigh(Symbol(),PERIOD_M1,i));
      MinPrice=MathMin(MinPrice,iLow(Symbol(),PERIOD_M1,i));      
   }

Просто мне кажется, что так не должно быть, должны быть штатные средства делающие это быстрей, чем перебор минуток в цикле.
Ссылками, "безо всяких намеков на кого-либо", прошу не беспокоить ;)
 
Вот это:
      MaxPrice=High[Highest(NULL, 0, MODE_HIGH,KvoMinut,1)];
      MinPrice=Low[Lowest(NULL, 0, MODE_LOW,KvoMinut,1)];

Но мне кажется опрометчиво предполоогать, что в сутках 24*60 минут ;)
 
Для Max и Min есть штатные средства: High[Highest(...)] и Low[Lowest(...)], для объема нет. Следует учесть, что в сутках не 1440 минут, а меньше - из-за пропусков, поэтому Highest и Lowest, тоже не лучший вариант. Вобщем задача не из простых.

Поиск минимума и максимума можно сделать таким образом - рассчитать время бара который был сутки назад используя функцию iBarShift() и рассчитать количество баров на протяжении которых ищитя максимум и минимум при помощи функций Highest и Lowest. Еще следует учесть особенности понедельника. Нда... задача непростая....


Вобщем если делать этот индикатор корректно работающим, то следует создать массивы длиной равной количеству баров входящих в сутки - один для времени, один для объема и еще два для макимума и мимнимума. Расчет индикатора делать с конца (с самого старого бара). На каждом баре отрисовывать значение объема ,масимума и минимума, обнулять соответствующие этому бару элементы массива и тд. и тп.
 
Написал, а потом попробовал. Кашмар - такое работать не будет. Вот лучшее что получилось:

//+------------------------------------------------------------------+
//|                                                   iDayVolume.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int       ExtParam1;
//---- buffers
double ExtMapBuffer1[];
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   double mx,mn; 
   int limit;
   int counted_bars=IndicatorCounted(); 
    limit=Bars-counted_bars; 
      for(int i=limit-1;i>=0;i--){
         datetime TimeDayAgo=Time[i]-1440*60;
         if(TimeDayOfWeek(Time[i])==1)TimeDayAgo=Time[i]-1440*60*3;
         int bs=iBarShift(NULL,0,TimeDayAgo,false); 
         int v=0; 
         for(int j=bs;j>=i;j--)v+=Volume[j];
         mx=High[Highest(NULL,0,MODE_HIGH,i-bs+1,i)];
         mn=Low[Lowest(NULL,0,MODE_LOW,i-bs+1,i)];  
         
         //... присвоить буферу нужное значение
              
      }
   return(0);
}
 
MAEstro:
Rosh:
http://www.musiclib.ru/music.php?res_id=82792643215

Вдруг на ум пришло, безо всяких намеков на кого-либо :)

А по существу ссылочек нет?
По существу - непонятно зачем это нужно, почему не нравится почти лобовой способ реализации .
Причина обращения: