Прошу подсказать нубу.

 

В общем. Есть индикатор. Считать начинает с первого бара дня по принципу:

Sum=Sum + (Close[i]-Close[i+1])

Сумма приращений разности закрытия 0 и 1 баров.

Не знаю как быть с первым баром дня. Первым значение индикатора должна быть разность OPEN и CLOSE.

У меня же получается разность CLOSE последнего бара предыдущего дня и первого сегодняшнего.

Прошу подсказать.

Спасибо.

//--------------------------------------------------------------------
// separatewindow.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
#property indicator_separate_window // Отображение в отдельном окне
#property indicator_buffers 1      // Количество буферов
#property indicator_color1 Blue     // Цвет первой линии

string strTime = "00:00";
 
double Buf_0[];                   
double Sum=0;                    
//--------------------------------------------------------------------
int init()                          // Специальная функция init()
  {
   IndicatorDigits(Digits);
   SetIndexBuffer(0,Buf_0);         // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1);// Стиль линии
   return(0);                          // Выход из спец. ф-ии init()
  }
//--------------------------------------------------------------------
int start()                         // Специальная функция start()
  {
   int i,                           // Индекс бара                       
   Counted_bars;                    // Количество просчитанных баров 
//--------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров
   datetime time=StringToTime(strTime);
   int bar_index=iBarShift(Symbol(),PERIOD_CURRENT,time,false); 
   i=Bars-Counted_bars;             // Индекс первого непосчитанного
   if (i>bar_index) i=bar_index-1;  
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      Sum=Sum + (Close[i]-Close[i+1]);
      Buf_0[i]=Sum;                 // Знач. 0 буфера на i-ом баре
      i--;                          // Расчёт индекса следующего бара
     }
//--------------------------------------------------------------------
   return(0);                          // Выход из спец. ф-ии start()
  }
//--------------------------------------------------------------------
 

что-то мне говорит что сумма приращений разности это всё равно что от первого вычесть последний, зато без циклов

(С[i]-C[i+1]) +(C[i+1]-C[i+2])  +(C[i+2]-C[i+3])+....

 
Maxim Kuznetsov #:

что-то мне говорит что сумма приращений разности это всё равно что от первого вычесть последний, зато без циклов

(С[i]-C[i+1]) +(C[i+1]-C[i+2])  +(C[i+2]-C[i+3])+....

Неа… Вы скобки не учли.

 
Maxim Kuznetsov #:

что-то мне говорит что сумма приращений разности это всё равно что от первого вычесть последний, зато без циклов

(С[i]-C[i+1]) +(C[i+1]-C[i+2])  +(C[i+2]-C[i+3])+....

Почему скобки не учли :)))?
 
ifitstrue:

В общем. Есть индикатор. Считать начинает с первого бара дня по принципу:

Сумма приращений разности закрытия 0 и 1 баров.

Не знаю как быть с первым баром дня. Первым значение индикатора должна быть разность OPEN и CLOSE.

У меня же получается разность CLOSE последнего бара предыдущего дня и первого сегодняшнего.

Прошу подсказать.

Спасибо.

Наверное вы зря изобретаете. Ведь чаще всего закрытие первого бара == открытию нулевого, за исключением гепов. А Close это текущая цена.

 
ifitstrue:

В общем. Есть индикатор. Считать начинает с первого бара дня по принципу:

Сумма приращений разности закрытия 0 и 1 баров.

Не знаю как быть с первым баром дня. Первым значение индикатора должна быть разность OPEN и CLOSE.

У меня же получается разность CLOSE последнего бара предыдущего дня и первого сегодняшнего.

Прошу подсказать.

Спасибо.

if(Time[i]/86400!=Time[i+1]/86400){ // первый бар дня
   ///
}
else{
   ///
}
 
Aliaksandr Hryshyn #:
Почему скобки не учли :)))?

ну раскрой скобки...каждое элемент будет дважды : один со знаком плюс, второй минус..кроме первого и последнего 

Цитата из топика :

Sum=Sum + (Close[i]-Close[i+1])

сумма разницы отсчётов = расстояние от первого до последнего.

метр на линейке это сумма 100 сантиметров или расстояние от первого до последнего

и эти люди пишут софтвер :-)

 
Спасибо всем ответившим. Нужно подумать, попробовать.
Причина обращения: