Кривую индикатора для D1 сделать прямой на участке H1, H4 и т.д.

 

Пишу индикатор. Он берет данные с периода D1. И это вычисляемое одно значение принадлежит всему дню, но так как на этом периоде просмотреть детали графика трудно, лучше переключиться на меньшие периоды -H4, H1

Но на них показывает неправильный график. Хорошо было бы, если это одно значение дня рисовалось горизонтальной линией для всего дня на периодах H4, H1. Как это сделать?

//+------------------------------------------------------------------+
int init()
  {
   SetIndexBuffer(0,Buffer1);    //  эта функция связывает массив Buffer1[] с нулевым буфером индикатора
   SetIndexStyle(0,DRAW_LINE); 
   return(0);
  }

int start()
  {
   int counted_bars=IndicatorCounted(); // все индикаторы
   for(int i=0;i<Bars-5;i++) 
   { 
      Buffer1[i]=  OpenAndMax(i);
   } 
   return(0);
  }
//+------------------------------------------------------------------+

double OpenAndMax(int b)
  {   
      double avDay= 0;
      double h, o;
      
      for(int i=b+1;i<b+4;i++) 
      {
         h = iHigh(Symbol(),PERIOD_D1,i);
         o = iOpen(Symbol(),PERIOD_D1,i);
         if(h<o){ avDay+= ( o-h ); }
          else  { avDay+= ( h-o ); }
      }
      avDay = iOpen(Symbol(),PERIOD_D1,b)+avDay/4;   
      return(avDay);
  }

 Кстати, для вычитания из большего числа меньшее  я использую if , я не нашел как вычисляется абсолютное значение - это правильно?

 
worldmen Кстати, для вычитания из большего числа меньшее  я использую if , я не нашел как вычисляется абсолютное значение - это правильно?

 


  Математические функции
 

Вы хотите сделать зигзаг по суточным барам?

Если нет то обьясните подробней. 

 

Вот ваш индикатор 

В вашей функции ошибка в условии, так как ХАЙ всегда больше ОПЕН , может надо ОПЕН и КЛОСЕ Но исправите сами.  Можно просто без условия    avDay+= ( h-o ) 

А функция для вычисления абсолютного значения называется   MathAbs(ваше число) 

 

int start()
{
int C_time;
int Bar_Shift;
   
int counted_bars=IndicatorCounted(); // все индикаторы
for(int i=0;i<Bars-5;i++)
{
C_time=Time[i];
Bar_Shift=iBarShift(NULL,PERIOD_D1,C_time,false);
ExtMapBuffer1[i]= OpenAndMax(Bar_Shift);

   
}
//----

//----
return(0);
}
//+------------------------------------------------------------------+

double OpenAndMax(int b)
{
double avDay= 0;
double h, o;

for(int i=b+1;i<b+4;i++)
{
h = iHigh(Symbol(),PERIOD_D1,i);
o = iOpen(Symbol(),PERIOD_D1,i);
if(h<o){ avDay+= ( o-h ); }
else { avDay+= ( h-o ); }
}
avDay = iOpen(Symbol(),PERIOD_D1,b)+avDay/4;
return(avDay);
}


 
Gek34:

Вы хотите сделать зигзаг по суточным барам?

Если нет то обьясните подробней. 

Не совсем. Зигзаг получается только по периоду D1, а по меньшим периодам нет. Потому что точка кривой для D1 должна быть горизонтальной линией для H4, H1 и т.д. 

Т.е. все точки кривой расчитываются только из данных D1. Думаю может нужно делать несколько буферов для вывода на различных периодах? 

 

я дал вам код, работает на всех периодах

Заинтриговали  может раскажете что пытаетесь сотворить вместе оформим

 

Я сразу не заметил изменения. Индикатор работает. Я еще его посмотрю подробней.

Причина обращения: