Как пересчитать данные внутри бара?

 

Форумчане, скажите как реализовать следующую идею.

Есть нулевой часовой бар. Внутри этого бара расположены несколько минутных баров. Исходя из данных только этих минутных баров нужно построить индюк из 2-ух линий по схеме:

1. Считая от начала часа на новых Low минуток производится суммирование всех цен Close минуток от начала часа и до текущего момента, но не дальше конца часа.

2. Также считая от начала часа на новых High минуток производится суммирование всех цен Open минуток от начала часа и до текущего момента, но не дальше конца часа.

Заранее спасибо!

 

ну а просто на минутках чего это мешает сделать?

Time[0] - время текущего нулевого бара есть

--

int TimeHour( datetime time)

Возвращает час для указанного времени.

---

условно - сделай цикл от текущего бара на -61 бар назад

поверь - равен ли час у этого бара - часу у нулевого (тогда в обработку его) {

__и тут обрабатывай их по своему желанию...

}

 
У меня навязчивая идея, что этот вопрос 3 дня назад я уже читал.
Как и 3 дня назад, я не понимаю, каков смысл суммирования нескольких выборочных цен.
Neelan, просвятите, пожалуйста.
 
Aleksander:

ну а просто на минутках чего это мешает сделать?

Попытался. Первый цикл сделал сразу, а вот со вторым, отвечающим за суммирование цен пока не пойму что не так. Вот код:

int start() {
 double lw,cls;
   int i, j;
   int th=TimeHour(Time[0]);
   for (i = 61; i>=0; i--){
   if(TimeHour(Time[i])!=th) continue;
   if (lw<NormalizeDouble(Low[i], Digits) || lw<=0) 
  {
   lw=NormalizeDouble(Low[i], Digits);
   for (j = i; j<=61; j++){
   if(TimeHour(Time[j])!=th) continue;
   cls=NormalizeDouble(Close[j], Digits)+cls;
   }  
  }
 }
 return(0); 
}
MikeM:
У меня навязчивая идея, что этот вопрос 3 дня назад я уже читал.
Как и 3 дня назад, я не понимаю, каков смысл суммирования нескольких выборочных цен.
Neelan, просвятите, пожалуйста.
Экспериментирую. Хочу одну идею проверить.
 
а второй то цикл зачем? если Уже бар попал в текущий час то делай им свои проверки и суммирования...
 
Aleksander:
а второй то цикл зачем? если Уже бар попал в текущий час то делай им свои проверки и суммирования...
Там нужно чтобы не просто попал в час, нужно чтобы суммирование запускалось только в случае если
 if (lw<NormalizeDouble(Low[i], Digits) || lw<=0) 
  {
   lw=NormalizeDouble(Low[i], Digits);
  }
Т.е только на новом Low. И если первый цикл считает от 61 до 0, то второй наоборот от i до начала часа.
 

да там вроде верно - с суммированием... ты только тогда уж предварительные подсчёты сохраняй в буферах для отрисовки

или тебе нужен только самый последний Лоу в течении текущего часа?


int start() {
   double lw,cls;
   int i, j;
   int th = TimeHour(Time[0]);
   //
   for (i = 61; i>=0; i--){
       if (TimeHour(Time[i]) = th) {
          if (NormalizeDouble(Low[i], Digits) < lw) {
             lw=NormalizeDouble(Low[i], Digits);
             cls = 0;
             for (j = i; j<=61; j++) {
                 if(TimeHour(Time[j]) = th) {
                   cls = NormalizeDouble(Close[j], Digits) + cls;
                 }  
             }
          }
       }
   }
   return(0); 
}
 
Aleksander:

да там вроде верно - с суммированием... ты только тогда уж предварительные подсчёты сохраняй в буферах для отрисовки

или тебе нужен только самый последний Лоу в течении текущего часа?

Cамый низкий Low, в течении текущего часа.

В распринтовке Print (" j =", j); пишет ерунду. Должен писать от i == индексу самого низкого Low и до начала часа. Т.е. например j=7; j=8; j=9; j=10; j=11; j=12;

 

ну выведи j через DoubleToStr(j, 0)

int start() {
   double lw,cls;
   int i, j, k;
   int th = TimeHour(Time[0]);
   //
   for (i = 61; i>=0; i--){
       if (TimeHour(Time[i]) = th) {
          if (NormalizeDouble(Low[i], Digits) < lw) {
             lw=NormalizeDouble(Low[i], Digits);
             cls = 0;
             print сюда вставь
             for (j = i; j<=61; j++) {
                 if(TimeHour(Time[j]) = th) {
                   cls = NormalizeDouble(Close[j], Digits) + cls;
                 }  
             }
          }
       }
   }
   return(0); 
}
 
Aleksander:

ну выведи j через DoubleToStr(j, 0)


Так даже цикл не запустился. Пишет cls=0; lw=0;
 
косяг в тексте возможно - чегогадать - показывай весь текст... хотя... мой запас кончился...
Причина обращения: