индикатор рисуется не правильно - страница 2

 
Прикольно, конечно. Double и int - разве не одно и тоже? :)
Мне кажется, там еще не хватает else, чтобы разделять восходящий и нисходящий тренды, хотя в чем идея индикатора не знаю.
 
это так, кусок с ошибкой - тут логики нет ;)
а ошибка - явная очепятка =)
 
это так, кусок с ошибкой - тут логики нет ;)
а ошибка - явная очепятка =)


Я из-за такой опечатки 3 раза индикатор заново переписывал. Хотя это было осознанное использование для экономии памяти :)
Использовал индикаторный массив, который не использовался для рисования, чисто для внутреннего пользования. Присвоил ему тип int - 2 раза я дописывал индикатор и он не работал, я искал ошибку и не мог найти, начинал писать с нуля заново. А он все равно не работал. Пришлось обустраивать кучу проверок через Print(). Нашел.
Испытал глубокое чувство "благодарности" к разработчикам за недокументированные "невозможности" :)
 
не обижайся но ты не понял суть проблемы

я то суть проблемы очень даже понял, просто хотел чтобы ты сам научился находить свои ошибки, тогда тебе бы не пришлось каждый раз просить кого-то, и выглядеть смешно в своих заявлениях
Там нет ошибок, я сделал все возможное что бы выделить мимимум кода который дает ошибку

теперь твое мнение изменилось?
Важно было пошагово устранить все ошибки, во-первых овладел бы поиском и устранением ошибок, во-вторых в будущем при написании кода, количество таких ошибок значительно сократилось бы.
Например я бы "отсекал" следующим образом.
1. Посмотрел правильность цикла (вывод сообщения поместил после "while( i>=0 )...
2. Если цикл верен проверил бы правильность срабатывания условия (вывод сообщения "if( iSAR(NULL,0,MyPeriod, MyMax, i) > Close[i] ) , (здесь у тебя часть ошибок, если не понял из кода приведенного komposter'ом, то подсказка вместо MyPeriod, MyMax у тебя будут стоять 0, т.к. ты объявил эти переменные целыми и хоть и присвоил им значения вещественные они будут обрезаны до точки)
3. затем как я уже и говорил вывод ошибок после создания объекта
4. ну и вывод ошибок после изменения его свойств
это твой код после редактирования
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Aqua

#include <stdlib.mqh>
//---- input parameters

extern double MyPeriod = 0.02, MyMax = 0.2;


//---- buffers
double Buffer1[];
double Buffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
string short_name;

//---- indicator line
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);

SetIndexBuffer(0,Buffer1);
SetIndexBuffer(1,Buffer2);

//---- name for DataWindow and indicator subwindow label
short_name="i4_q_v1";
IndicatorShortName(short_name);

SetIndexLabel(0,short_name);
SetIndexLabel(1,short_name);

//----
SetIndexDrawBegin(0,0);

//----
return(0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
{
int i, counted_bars=IndicatorCounted(),err;

//----

i=Bars-counted_bars-1;

while( i>=0 )
{
   if( iSAR(NULL,0,MyPeriod,MyMax,i)>Close[i] )
   {
      if( ObjectFind("h"+TimeToStr(Time[i]))!=-1 ) //если объект найден
      {
         //просто изменим его координаты
         ObjectMove("h"+TimeToStr(Time[i]),0,Time[i],High[i]);
         err=GetLastError();
         if(err>0)
         {
            Alert("Ошибка изменения координат объекта. "+ErrorDescription(err) );
         }
      }
      else
      {
         //иначе создадим его
         ObjectCreate("h"+TimeToStr(Time[i]), OBJ_ARROW, 0, Time[i], High[i]);
         err=GetLastError();
         if(err>0)
         {
            Alert("Ошибка создания объекта. "+ErrorDescription(err) );
         }
         //поменяем код отображаемого как объект символа
         ObjectSet( "h"+TimeToStr(Time[i]), OBJPROP_ARROWCODE, 171);
         err=GetLastError();
         if(err>0)
         {
            Alert("Ошибка установки свойств объекта. "+ErrorDescription(err) );
         }
      }

      if( ObjectFind("l"+TimeToStr(Time[i]))!=-1 ) //если объект найден
      {
         //просто изменим его координаты
         ObjectMove("l"+TimeToStr(Time[i]),0,Time[i],Low[i]);
         err=GetLastError();
         if(err>0)
         {
            Alert( "Ошибка изменения координат объекта. "+ErrorDescription(err) );
         }
      }
      else
      {
         //иначе создадим его
         ObjectCreate("l"+TimeToStr(Time[i]), OBJ_ARROW, 0, Time[i], Low[i]);
         err=GetLastError();
         if(err>0)
         {
            Alert("Ошибка создания объекта. "+ErrorDescription(err) );
         }
         //поменяем код отображаемого как объект символа
         ObjectSet( "l"+TimeToStr(Time[i]), OBJPROP_ARROWCODE, 161);
         err=GetLastError();
         if(err>0)
         {
            Alert("Ошибка установки свойств объекта. "+ErrorDescription(err) );
         }
      }
   }

   Buffer1[i] = Low[i];

   i--;
}

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

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
//---- TODO: add your code here
int i;
for(i=0;i<Bars;i++) 
{
   if( ObjectFind("h"+TimeToStr(Time[i]))!=-1 ) //если объект найден
   {
      ObjectDelete("h"+TimeToStr(Time[i]));
   }
   if( ObjectFind("l"+TimeToStr(Time[i]))!=-1 ) //если объект найден
   {
      ObjectDelete("l"+TimeToStr(Time[i]));
   }
}
//----
   return(0);
  }
Причина обращения: