Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 978

 
r772ra:
Немного по другому, как понял я.    Как то так.

Ну так именно это и советовали до меня.
Но iHighest(NULL, MODE_HIGH, bar+1, 1) возвращает индекс бара High которого выше всех остальных на этом промежутке, а ты спрашивал про High текущего дня.

 
AlexeyVik:

Ну так именно это и советовали до меня.
Но iHighest(NULL, MODE_HIGH, bar+1, 1) возвращает индекс бара High которого выше всех остальных на этом промежутке, а ты спрашивал про High текущего дня.

Согласен, "iHighest(NULL, MODE_HIGH, bar+1, 1) возвращает индекс бара High которого выше всех остальных на этом промежутке" . А я имею ввиду High оставшегося текущего дня.

 Попробую пояснить точнее...

#property indicator_separate_window
#property indicator_buffers 1

#property indicator_label1  "longBars"

#property indicator_color1 clrBlue

#property indicator_width1 2

//---углубление в историю на...
extern int barsToProcess = 100;
//---indicators Buffers
double   longBarsBuffer[];        
                

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,longBarsBuffer);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   
   IndicatorDigits(Digits);
  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int counted_bars=IndicatorCounted(), 
       limit;

   if (counted_bars<0) return(-1);
   if (counted_bars>0)       
       counted_bars--;       
      
   limit=Bars-counted_bars;
   if(limit>barsToProcess)                                  
      limit=barsToProcess;
  
   double  longValue;
      
                            
   for(int i=0;i<limit;i++)
      {
       longValue = Close[i+1]-Open[i+3];
       
//--- само условие
         
       if(longValue>0) 

//---собственно что необходимо получить: если на i-том баре выполнилось условие(i>0), то находим High от этого бара и 
//---до конца этого дня,я имею ввиду максимум всего этого промежутка. Примерно: Если условие выполнилось 
//---на i=12h,то High от 12 до 00:00,
//--- если i=01:00, то High от 01:00 до 00:00, если i=22:00, то High от 22:00 до 00:00. Как то так.  Возможно ли это реализовать?  
//---Может я не правильно сделал цикл? Как его правильно организовать?
                  
       longBarsBuffer[i]=High[от i - и до конца дня] - то что необходимо получить. 
       else 
          longBarsBuffer[i]=0.0; 
       

 Если можно сильно не ругайте:) ...объясните пожалуйста, как это сделать? 

 
Vadim_2015:

Согласен, "iHighest(NULL, MODE_HIGH, bar+1, 1) возвращает индекс бара High которого выше всех остальных на этом промежутке" . А я имею ввиду High оставшегося текущего дня.

 Попробую пояснить точнее...

 Если можно сильно не ругайте:) ...объясните пожалуйста, как это сделать? 

Сначала я подумал что это простая очепятка, но теперь уже нет сомнений, ты хочешь заглянуть в будущее??? Тогда тебе поможет только Док из фильма "Назад в будущее".
 
AlexeyVik:
Сначала я подумал что это простая очепятка, но теперь уже нет сомнений, ты хочешь заглянуть в будущее??? Тогда тебе поможет только Док из фильма "Назад в будущее".

Боюсь, Док мне не поможет...не тем занимается:)

Да этот вопрос, " High оставшегося текущего дня.",  ставит немного в тупик. До самого только дошло,  действительно можно подумать, что это попытка  заглянуть в будущее в этот день . Это немного не так.  Я хотел считать _High оставшегося текущего дня с начала ценового  массива и до предпоследнего дня(вчерашнего),  т.к. все данные есть. А последний(сегодняшний) день пересчитывать как только он завершиться. Иначе все будет выглядеть как Вы и сказали _ попытка заглянуть в будущее!  Если начинать с начала ценового массива, и продвигаясь до конца(вчерашнего дня), то, High на каждом последующем проверяемом баре будет меняться.  Поэтому и спрашивал как вычесть High оставшейся части дня. Недоговорил только что текущий день не берется, т.к. еще не завершен. Простите, сразу и не сообразил:) . Подскажите, как организовать такой расчет? Вообще он возможен?     

 
Vadim_2015:

Боюсь, Док мне не поможет...не тем занимается:)

Да этот вопрос, " High оставшегося текущего дня.",  ставит немного в тупик. До самого только дошло,  действительно можно подумать, что это попытка  заглянуть в будущее в этот день . Это немного не так.  Я хотел считать _High оставшегося текущего дня с начала ценового  массива и до предпоследнего дня(вчерашнего),  т.к. все данные есть. А последний(сегодняшний) день пересчитывать как только он завершиться. Иначе все будет выглядеть как Вы и сказали _ попытка заглянуть в будущее!  Если начинать с начала ценового массива, и продвигаясь до конца(вчерашнего дня), то, High на каждом последующем проверяемом баре будет меняться.  Поэтому и спрашивал как вычесть High оставшейся части дня. Недоговорил только что текущий день не берется, т.к. еще не завершен. Простите, сразу и не сообразил:) . Подскажите, как организовать такой расчет? Вообще он возможен?

Попробую понять ваш вопрос. Вам надо найти High среди баров 1) предыдущий день и то что есть на сегодня, или 2) только то что есть на сегодня? Может iHighest() поможет?
 
paladin80:
Попробую понять ваш вопрос. Вам надо найти High среди баров 1) предыдущий день и то что есть на сегодня, или 2) только то что есть на сегодня? Может iHighest() поможет?

Уважаемые, попробую объяснить по-максимуму чего хочу добиться...    ..или получится у меня ..или совсем всех запутаю!

 Вот смотрите,   есть массив цен, допустим с _1.02.2015. по 15.12.2015(сегодняшний день) ,берем PERIOD_H1.

1_беру простую формулу   _val=Close[i]-Open[i] 

2_задаю простое условие if (val>0)   - проверку нужно начинать с _1.02.2015.

   -если условие выполнилось, допустим на каком то баре, то от этого бара и до конца этого дня находим _High.  Например:  Close[4]-Open[4]>0, т.е. допустим бар с  индексом[i=4]  принадлежит _1.02.2015  10:00,                   значит    от 10:00 -этого дня   и до 00:00 - конца этого дня, -  находим _High. Соответственно, если  условие сработало в другой день , то действуем по аналогичному принципу.   И так через весь массив цен.                       Расчет должен начинаться с _1.02.2015. до 14.12.2015 (предпоследнего дня), почему до предпоследнего дня, - т.к. последний день еще не завершен и High всего дня  не известен . Как только завершится                           последний день, - проверяем  и   его на условие.  Так как данные с _1.02.2015. до 14.12.2015 (предпоследнего дня)       известны, то это не будет выглядеть как -попытка заглянуть в будущее:)

   - если условие не выполнилось, - ничего не делаем, в массив записывается пустое значение. 

  Вот собственно вся "задумка". Как ее сделать, как определить через цикл, - ума не приложу!  

 
Vadim_2015:

Боюсь, Док мне не поможет...не тем занимается:)

Да этот вопрос, " High оставшегося текущего дня.",  ставит немного в тупик. До самого только дошло,  действительно можно подумать, что это попытка  заглянуть в будущее в этот день . Это немного не так.  Я хотел считать _High оставшегося текущего дня с начала ценового  массива и до предпоследнего дня(вчерашнего),  т.к. все данные есть. А последний(сегодняшний) день пересчитывать как только он завершиться. Иначе все будет выглядеть как Вы и сказали _ попытка заглянуть в будущее!  Если начинать с начала ценового массива, и продвигаясь до конца(вчерашнего дня), то, High на каждом последующем проверяемом баре будет меняться.  Поэтому и спрашивал как вычесть High оставшейся части дня. Недоговорил только что текущий день не берется, т.к. еще не завершен. Простите, сразу и не сообразил:) . Подскажите, как организовать такой расчет? Вообще он возможен?     

Ну если так, то опять возвращаемся к iHighest() но сколько баров считать и от которого начинать надо рассчитать с помощью iBarShift()
 
AlexeyVik:
Ну если так, то опять возвращаемся к iHighest() но сколько баров считать и от которого начинать надо рассчитать с помощью iBarShift()  

   Вы не могли бы показать, как это  сделать в цикле? Не могу сообразить как правильно его оформить. 

 
Vadim_2015:

Уважаемые, попробую объяснить по-максимуму чего хочу добиться...    ..или получится у меня ..или совсем всех запутаю!

...

Продолжаем разговор... Как я понял задание можно свести к следующему. Для упрощения будем исследовать только вчерашний день, период Н1.

Сначала ищется самая ранняя свеча (просматривая с левой стороны на графике вчерашнего дня), у которой Close выше Open, т.е. ищем самую первую бычью свечу. Если такая найдена, то начиная от неё (включая и её) аж до самой поздней данного дня, надо найти такую свечу, у которой самый высокий High. Напр., если время открытия первой бычьей свечи 10:00, то от неё и до свечи 23:00 ищем свечу с наивысшим High. Так?

 
paladin80:

Продолжаем разговор... Как я понял задание можно свести к следующему. Для упрощения будем исследовать только вчерашний день, период Н1.

Сначала ищется самая ранняя свеча (просматривая с левой стороны на графике вчерашнего дня), у которой Close выше Open, т.е. ищем самую первую бычью свечу. Если такая найдена, то начиная от неё (включая и её) аж до самой поздней данного дня, надо найти такую свечу, у которой самый высокий High. Напр., если время открытия первой бычьей свечи 10:00, то от неё и до свечи 23:00 ищем свечу с наивысшим High. Так?

ООО, хвала всевышнему... меня поняли!    ДА! ДА! ДА! Именно этого я и пытаюсь добиться. Если знаете, подскажите как это сделать?