Вроде все просто, но не работает

 

Привет ребят. Код простой (в моем восприятии), но почему то не работает.

Идея такая, если есть UP свеча, ставится стрелка вверх, Down свеча стрелка вниз. Создаю цикл, но не понимаю почему он работает не правильно.

   string name;
   
   for (int i = 0; i<=100; i++)
   {
      if (Open[i]<Close[i])
      {
         name=Open[i];
         
         ObjectCreate(name,OBJ_ARROW,0,Time[i],Low[i]);
         ObjectSet(name,OBJPROP_ARROWCODE,SYMBOL_ARROWUP);
      }
      else if (Close[i]<Open[i])
      {
         name=Close[i];
         
         ObjectCreate(name,OBJ_ARROW,0,Time[i],High[i]);
         ObjectSet(name,OBJPROP_ARROWCODE,SYMBOL_ARROWDOWN);
      }
   }

http://clip2net.com/s/6FuSPl

все ошибки отмечать не буду, смысл понятен.

что я не учитываю, где ошибка?

 
kilnart:

Привет ребят. Код простой (в моем восприятии), но почему то не работает.

Идея такая, если есть UP свеча, ставится стрелка вверх, Down свеча стрелка вниз. Создаю цикл, но не понимаю почему он работает не правильно.

http://clip2net.com/s/6FuSPl

все ошибки отмечать не буду, смысл понятен.

что я не учитываю, где ошибка?

Потому что лень подумать. Клоз на нулевом баре непостоянен пока он не закрыт а значит и определить не получится, вверх или вниз (может изначально рвануть вниз, а закрыться вверх). Надо цикл на один бар назад сдвинуть.
 

дело не в лени, учусь пока что, не все понимаю.

   for (int i = 0-1; i<=100; i++)

имеется ввиду вот так надо сделать?

 
kilnart:

дело не в лени, учусь пока что, не все понимаю.

имеется ввиду вот так надо сделать?


for (int i = 1; i<=100; i++)
 
   string name;
   
   for (int i = 1; i<=100; i++)
   {
      if (Open[i]<Close[i])
      {
         name=Open[i];
         
         ObjectCreate(name,OBJ_ARROW,0,Time[i],Low[i]);
         ObjectSet(name,OBJPROP_ARROWCODE,SYMBOL_ARROWUP);
      }
      else if (Close[i]<Open[i])
      {
         name=Close[i];
         
         ObjectCreate(name,OBJ_ARROW,0,Time[i],High[i]);
         ObjectSet(name,OBJPROP_ARROWCODE,SYMBOL_ARROWDOWN);
      }
   }

http://clip2net.com/s/6Fv4yS

ничего не изменилось

 
это индикатор?
 
скрипт
 
А не проще индикатор сделать?
 
может и проще, но почему мой код не работает? что в нем не так?
 
надо делать name = Time[i]
 

оформить индикатор в форме скрипта может и можно, но разумнее всё же в виде работающего индикатора, чем терять время и нервы разбираясь чего это скрипт не работает:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Red

double val1[];
double val2[];

int init()
  {
   IndicatorBuffers(2);
   
   SetIndexStyle(0,DRAW_ARROW,EMPTY,1);
   SetIndexArrow(0,241);
   
   SetIndexStyle(1,DRAW_ARROW,EMPTY,1);
   SetIndexArrow(1,242);
   
   SetIndexBuffer(0,val1);
   SetIndexLabel(0,"UP!");
   SetIndexBuffer(1,val2);
   SetIndexLabel(1,"DOWN!");
//---
   return(0);
  }

int deinit()
  {
   return(0);
  }

int start()
{
   int limit, counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars-1;

   for (int i = limit; i>=0; i--)
   {
      val1[i]=0;val2[i]=0;
      if (Open[i]<Close[i])
      {
         val1[i]=Low[i];
      }
      if (Open[i]>Close[i])
      {
         val2[i]=High[i];
      }
   } 
   return(0);
}

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