Как отобразить координаты точки с Н1 на графике другого ТФ?

 

Здравствуйте! Никак не могу разобраться с проблемой.

Создаю советник, который должен рисовать линии тренда на разных ТФ.

Например, на М15 нарисовать линии, которые определились по Н1.

Для того чтобы определять цены максимумов, минимумов, время и т.д. использую вот эти функции

double fu_hi(int bar,int period)

  {return(iHigh(Symbol(),period,bar));}


double fu_lo(int bar,int period)

  {return(iLow(Symbol(),period,bar));}


double fu_close(int bar,int period)

  {return(iClose(Symbol(),period,bar));}


double fu_open(int bar,int period)

  {return(iOpen(Symbol(),period,bar));}


datetime fu_time(int bar,int period)//ok

  {return(iTime(Symbol(),period,bar));}


 Но, к сожалению, советник все равно перерисовывает линии когда переходит на другой ТФ.

В программе есть несколько модулей. Один пробегает график и определяет важные экстремумы и записывает это все в массивы, и второй, который на основе этих массивов строит линии. Единственное что их объединяет это эти функции.

На графике это так выглядит

 

Вертикальную линию сам нарисовал, чтобы заметно было как он перерисовывается.

 

На М15 он правильно находит первую точку, а вторую пропускает. Есть предположение, Именно в тех функциях загвоздка.

Но как их переписать по другому я не пойму ;( 

 
нельзя ли просто в советнике указать явный тф  - по которому мы рисуем тренд, да и все. 
 

Почему-то, если в настройках указать PERIOD_CURRENT, то все рисует замечательно на всех ТФ. А как только указываю чтобы рисовал линии, которые может определить по точкам Н1, переключаю на М15 - и все ломается.  

 
mgmaxim:

Здравствуйте! Никак не могу разобраться с проблемой.

Создаю советник, который должен рисовать линии тренда на разных ТФ.

Например, на М15 нарисовать линии, которые определились по Н1.

Для того чтобы определять цены максимумов, минимумов, время и т.д. использую вот эти функции

 Но, к сожалению, советник все равно перерисовывает линии когда переходит на другой ТФ.

В программе есть несколько модулей. Один пробегает график и определяет важные экстремумы и записывает это все в массивы, и второй, который на основе этих массивов строит линии. Единственное что их объединяет это эти функции.

На графике это так выглядит

 

Вертикальную линию сам нарисовал, чтобы заметно было как он перерисовывается.

 

На М15 он правильно находит первую точку, а вторую пропускает. Есть предположение, Именно в тех функциях загвоздка.

Но как их переписать по другому я не пойму ;( 

Ошибка не в функциях, а при обращении к ним. Меня смущает переменная bar, и нигде нет как Вы его определяете
 
//+------------------------------------------------------------------+
//| Рисование трендовых и других линий. Начало.                      |
//+------------------------------------------------------------------+
void _drawline (double& LB[],double& HB[], int x, bool y)
  {
   int  i=0, j, k, ray, wr0, wr1, jh, jl, jc, ni, j1, n;
   double el=-1, eh=-1;
   string nameObj, per_;
   double p1,p2, tangens, tangens1, f1, f2;
   int    np[2];
   datetime t1,t2;
   bool   new=false, hl=false; // hl= false - первый экстремум на минимуме; = true - на максимуме
   double tangens_[2], p_[2];

   if (HB[nbar[x][0]]>0) hl=true;

   if (y && TrendLineType==0) {np[0]=-1; np[1]=-1; k=GrossPeriod_[x]*60;}
            
   if (TrendLineType!=1)
     {
      for (ray=2;ray>0;ray--)
        {
         j=nbar[x][ray];
         j1=nbar[x][ray-1];

         if ((!hl && ray==2) || (hl && ray==1))
           {
            p1=iLow(NULL,GrossPeriod_[x],j); 
            if (ExtFirstPoint)
              {
               for (i=j;i>=0;i--)
                 {
                  if (iLow(NULL,GrossPeriod_[x],i)==iLow(NULL,GrossPeriod_[x],j)) j=i;
                  if (i==j1) break;
                 }
              }

            t1=iTime(NULL,GrossPeriod_[x],j); np[ray-1]=j;
            tangens=iLow(NULL,GrossPeriod_[x],j-1)-iLow(NULL,GrossPeriod_[x],j); p2=iLow(NULL,GrossPeriod_[x],j-1); t2=iTime(NULL,GrossPeriod_[x],j-1);

            for (i=j-1;i>=0;i--)
              {
               tangens1=(iLow(NULL,GrossPeriod_[x],i)-iLow(NULL,GrossPeriod_[x],j))/(j-i);
               if (tangens>=tangens1) {tangens=tangens1; p2=iLow(NULL,GrossPeriod_[x],i); t2=iTime(NULL,GrossPeriod_[x],i);}
               if (i==j1) break;
              }
           }
         else if ((hl && ray==2) || (!hl && ray==1))
           {
            p1=iHigh(NULL,GrossPeriod_[x],j);
            if (ExtFirstPoint)
              {
               for (i=j;i>=0;i--)
                 {
                  if (iHigh(NULL,GrossPeriod_[x],i)==iHigh(NULL,GrossPeriod_[x],j)) j=i;
                  if (i==j1) break;
                 }
              }

            t1=iTime(NULL,GrossPeriod_[x],j); np[ray-1]=j;
            tangens=iHigh(NULL,GrossPeriod_[x],j-1)-iHigh(NULL,GrossPeriod_[x],j); p2=iHigh(NULL,GrossPeriod_[x],j-1); t2=iTime(NULL,GrossPeriod_[x],j-1);
            for (i=j-1;i>=0;i--)
              {
               tangens1=(iHigh(NULL,GrossPeriod_[x],i)-iHigh(NULL,GrossPeriod_[x],j))/(j-i);
               if (tangens<=tangens1) {tangens=tangens1; p2=iHigh(NULL,GrossPeriod_[x],i); t2=iTime(NULL,GrossPeriod_[x],i);}
               if (i==j1) break;
              }
           }

         if (y && TrendLineType==0)
           {

            if ((!hl && ray==2) || (hl && ray==1))
              {
               i=iBarShift(NULL,Period(),t2+k,false);
               while (Time[i]>t2+k) {i++; if (i>=Bars) {recount[x]=0; return;}}

               j=i;
               while (Time[i]>=t2) {if (Low[i]<Low[j]) {j=i;} i++; if (i>=Bars) {recount[x]=0; return;}}
               t2=Time[j]; n=j;

               i=iBarShift(NULL,Period(),t1+k,false);
               while (Time[i]>t1+k) {i++; if (i>=Bars) {recount[x]=0; return;}}

               j=i;
               while (Time[i]>=t1) {if (Low[i]<Low[j]) {j=i;} i++; if (i>=Bars) {recount[x]=0; return;}}
               t1=Time[j]; np[ray-1]=j;

              }
            else if ((hl && ray==2) || (!hl && ray==1))
              {
               i=iBarShift(NULL,Period(),t2+k,false);
               while (Time[i]>t2+k) {i++; if (i>=Bars) {recount[x]=0; return;}}

               j=i;
               while (Time[i]>=t2) {if (High[i]>High[j]) {j=i;} i++; if (i>=Bars) {recount[x]=0; return;}}
               t2=Time[j]; n=j;

               i=iBarShift(NULL,Period(),t1+k,false);
               while (Time[i]>t1+k) {i++; if (i>=Bars) {recount[x]=0; return;}}

               j=i;
               while (Time[i]>=t1) {if (High[i]>High[j]) {j=i;} i++; if (i>=Bars) {recount[x]=0; return;}}
               t1=Time[j]; np[ray-1]=j;

              }

            tangens=(p2-p1)/(j-n);
           }

         wr0=nbar[x][0]; wr1=nbar[x][1];
         if ((LB[wr0]>0 && HB[wr0]>0) || (LB[wr1]>0 && HB[wr1])) {recount[x]=0; return;}

         if (t1==t2) continue;
         tangens_[ray-1]=tangens; p_[ray-1]=p1;
         if (GrossPeriod_[x]==0) per_=""+Period();
         else if (GrossPeriod_[x]>0) per_=""+GrossPeriod_[x];
         nameObj="#"+ExtComplect+"_"+ray+"_"+x+"_"+per_;

         ObjectDelete(nameObj);
         ObjectCreate(nameObj, OBJ_TREND, 0, t1, p1, t2, p2);
         ObjectSet(nameObj, OBJPROP_COLOR, zzColor_[x]);
         ObjectSet(nameObj, OBJPROP_STYLE, LineStyle_[x]);
         ObjectSet(nameObj, OBJPROP_WIDTH, LineWidth_[x]);

         if (ray==1 && vLineVisible_[x]==1 && vLine[x]==1)
           {
            nameObj="#"+ExtComplect+"_vLine"+"_"+x+"_"+per_;
            ObjectDelete(nameObj);
            ObjectCreate(nameObj,OBJ_VLINE,0, tvLine[x],p1);
            ObjectSet(nameObj, OBJPROP_COLOR, zzColor_[x]);
            ObjectSet(nameObj, OBJPROP_STYLE, LineStyle_[x]);
            ObjectSet(nameObj, OBJPROP_WIDTH, LineWidth_[x]);
           }

        }

      if (np[1]>=0 && np[0]>=0 && (LevelVisible_[x]==1  || hLevelVisible_[x]==1))
        {
         if (TrendLineType==2) {if (hl) f1=iHigh(NULL,GrossPeriod_[x],np[1])+(np[1]-np[0])*tangens_[1]; else f1=(np[1]-np[0])*tangens_[1]+iLow(NULL,GrossPeriod_[x],np[1]);}
         else {if (hl) f1=High[np[1]]+(np[1]-np[0])*tangens_[1]; else f1=(np[1]-np[0])*tangens_[1]+Low[np[1]];}
//         f2=(((p_[1]-p_[0]+(np[1]-np[0])*tangens_[1])/(tangens_[0]-tangens_[1]))*tangens_[0]+p1);
         f2=(np[1] - (p_[0]-p_[1]+np[0]*tangens_[0]-np[1]*tangens_[1])/(tangens_[0]-tangens_[1]))*tangens_[1]+p_[1];
        }

      if (np[1]>=0 && np[0]>=0 && LevelVisible_[x]==1)
        {

         nameObj="#"+ExtComplect+"_level"+"_"+x+"_"+per_;

         ObjectDelete(nameObj);
         ObjectCreate(nameObj,OBJ_HLINE,0,t1,f2);
         ObjectSet(nameObj, OBJPROP_COLOR, zzColor_[x]);
         ObjectSet(nameObj, OBJPROP_STYLE, LineStyle_[x]);
         ObjectSet(nameObj, OBJPROP_WIDTH, LineWidth_[x]);
        }

      if (np[1]>=0 && np[0]>=0 && hLevelVisible_[x]==1)
        {
         if (TrendLineType==2) {t1=iTime(NULL,GrossPeriod_[x],nbar[x][0]); t2=iTime(NULL,GrossPeriod_[x],nbar[x][1]);}
         else {t1=Time[nbar[x][0]]; t2=Time[nbar[x][1]];}

         nameObj="#"+ExtComplect+"_hLevel"+"_"+x+"_"+per_;

         ObjectDelete(nameObj);
         ObjectCreate(nameObj,OBJ_FIBO,0,t1,f1,t2,f2);
         ObjectSet(nameObj, OBJPROP_LEVELCOLOR, zzColor_[x]);
         ObjectSet(nameObj, OBJPROP_COLOR, CLR_NONE);
         ObjectSet(nameObj, OBJPROP_LEVELSTYLE, hLineStyle_[x]);
         ObjectSet(nameObj, OBJPROP_LEVELWIDTH, hLineWidth_[x]);
         ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi);

         for (i=0;i<Sizefi;i++)
           {
            ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+i,fi[i]);
            if (hLabelVisible_[x]==1) ObjectSetFiboDescription(nameObj, i, fitxt100[i]); 
           }
        }
     }
   else // TrendLineType=1
     {
      if (y)
        {
         ni=-1; jc=-1;
         nbar[x][0]=-1; nbar[x][1]=-1; nbar[x][2]=-1;
         t1=iTime(NULL, GrossPeriod_[x],i);

         for (j=0;(jc<3 && j<Bars);j++)
           {
            if (Time[j]<t1)
              {
               i++; t1=iTime(NULL, GrossPeriod_[x],i);
              }

            if (LB[i]>0)
              {
               if (el>=Low[j] || el<0) {el=Low[j]; jl=j;}
              }
            else
              {
               if (el>0)
                 {
                  el=-1;
                  nbar[x][jc]=jl;
                  if (jc==numbervLine)
                    {
                     tvLine[x]=Time[jl];
                    }
                 }
              }

            if  (HB[i]>0)
              {
               if (eh<=High[j]) {eh=High[j]; jh=j;}
              }
            else
              {
               if (eh>0)
                 {
                  eh=-1;
                  if (nbar[x][jc]==jh) {recount[x]=0; return;}
                  nbar[x][jc]=jh;
                  if (jc==numbervLine)
                    {
                     tvLine[x]=Time[jh];
                    }
                 }
              } 

            if (ni!=i) {ni=i; if (LB[i]>0 || HB[i]>0) jc++;}
           }

         if (jc<3 || nbar[x][2]>=Bars) {recount[x]=0; return;}
        }

      wr0=nbar[x][0]; wr1=nbar[x][1];
      if (y) {if (nbar[x][0]<0 || nbar[x][1]<0 || nbar[x][2]<0) {recount[x]=0; return;}}
      else {if ((LB[wr0]>0 && HB[wr0]>0) || (LB[wr1]>0 && HB[wr1])) {recount[x]=0; return;}}

      for (ray=2;ray>0;ray--)
        {
         j=nbar[x][ray];
         j1=nbar[x][ray-1];

         if ((!hl && ray==2) || (hl && ray==1))
           {
            p1=Low[j]; 
            if (ExtFirstPoint)
              {
               for (i=j;i>=0;i--)
                 {
                  if (Low[i]==Low[j]) j=i;
                  if (i==j1) break;
                 }
              }

            t1=Time[j]; np[ray-1]=j;
            tangens=Low[j-1]-Low[j]; p2=Low[j-1]; t2=Time[j-1];

            for (i=j-1;i>=0;i--)
              {
               tangens1=(Low[i]-Low[j])/(j-i);
               if (tangens>=tangens1) {tangens=tangens1; p2=Low[i]; t2=Time[i];}
               if (i==j1) break;
              }
           }
         else if ((hl && ray==2) || (!hl && ray==1))
           {
            p1=High[j];
            if (ExtFirstPoint)
              {
               for (i=j;i>=0;i--)
                 {
                  if (High[i]==High[j]) j=i;
                  if (i==j1) break;
                 }
              }

            t1=Time[j]; np[ray-1]=j;
            tangens=High[j-1]-High[j]; p2=High[j-1]; t2=Time[j-1];
            for (i=j-1;i>=0;i--)
              {
               tangens1=(High[i]-High[j])/(j-i);
               if (tangens<=tangens1) {tangens=tangens1; p2=High[i]; t2=Time[i];}
               if (i==j1) break;
              }
           }

         if (t1==t2) continue;

         if (GrossPeriod_[x]==0) per_=""+Period();
         else if (GrossPeriod_[x]>0) per_=""+GrossPeriod_[x];
         nameObj="#"+ExtComplect+"_"+ray+"_"+x+"_"+per_;

         ObjectDelete(nameObj);
         ObjectCreate(nameObj, OBJ_TREND, 0, t1, p1, t2, p2);
         ObjectSet(nameObj, OBJPROP_COLOR, zzColor_[x]);
         ObjectSet(nameObj, OBJPROP_STYLE, LineStyle_[x]);
         ObjectSet(nameObj, OBJPROP_WIDTH, LineWidth_[x]);

         if (ray==1 && vLineVisible_[x]==1 && vLine[x]==1)
           {
            nameObj="#"+ExtComplect+"_vLine"+"_"+x+"_"+per_;
            ObjectDelete(nameObj);
            ObjectCreate(nameObj,OBJ_VLINE,0, tvLine[x],p1);
            ObjectSet(nameObj, OBJPROP_COLOR, zzColor_[x]);
            ObjectSet(nameObj, OBJPROP_STYLE, LineStyle_[x]);
            ObjectSet(nameObj, OBJPROP_WIDTH, LineWidth_[x]);
           }

         tangens_[ray-1]=tangens; p_[ray-1]=p1;
        }

      if (LevelVisible_[x]==1  || hLevelVisible_[x]==1)
        {
         if (hl) f1=High[np[1]]+(np[1]-np[0])*tangens_[1]; else f1=(np[1]-np[0])*tangens_[1]+Low[np[1]];
//         f2=(((p_[1]-p_[0]+(np[1]-np[0])*tangens_[1])/(tangens_[0]-tangens_[1]))*tangens_[0]+p1);
         f2=(np[1] - (p_[0]-p_[1]+np[0]*tangens_[0]-np[1]*tangens_[1])/(tangens_[0]-tangens_[1]))*tangens_[1]+p_[1];
// Print("GrossPeriod = "+GrossPeriod_[x]+"   f2 = "+f2+"  np[0] = "+np[0]+"  np[1] = "+np[1]+"   p1 = "+p1+"   p2 = "+p2+"   tangens_[0] = "+tangens_[0]+"   tangens_[1] = "+tangens_[1]);
        }

      if (LevelVisible_[x]==1)
        {

         nameObj="#"+ExtComplect+"_level"+"_"+x+"_"+per_;

         ObjectDelete(nameObj);
         ObjectCreate(nameObj,OBJ_HLINE,0,t1,f2);
         ObjectSet(nameObj, OBJPROP_COLOR, zzColor_[x]);
         ObjectSet(nameObj, OBJPROP_STYLE, LineStyle_[x]);
         ObjectSet(nameObj, OBJPROP_WIDTH, LineWidth_[x]);
        }

      if (hLevelVisible_[x]==1)
        {
         t1=Time[nbar[x][0]]; t2=Time[nbar[x][1]];

         nameObj="#"+ExtComplect+"_hLevel"+"_"+x+"_"+per_;

         ObjectDelete(nameObj);
         ObjectCreate(nameObj,OBJ_FIBO,0,t1,f1,t2,f2);
         ObjectSet(nameObj, OBJPROP_LEVELCOLOR, zzColor_[x]);
         ObjectSet(nameObj, OBJPROP_COLOR, CLR_NONE);
         ObjectSet(nameObj, OBJPROP_LEVELSTYLE, hLineStyle_[x]);
         ObjectSet(nameObj, OBJPROP_LEVELWIDTH, hLineWidth_[x]);
         ObjectSet(nameObj,OBJPROP_FIBOLEVELS,Sizefi);

         for (i=0;i<Sizefi;i++)
           {
            ObjectSet(nameObj,OBJPROP_FIRSTLEVEL+i,fi[i]);
            if (hLabelVisible_[x]==1) ObjectSetFiboDescription(nameObj, i, fitxt100[i]); 
           }
        }
     }

  }
//+------------------------------------------------------------------+
//| Рисование трендовых и других линий. Конец.                       |
//+------------------------------------------------------------------+

 

  bool   new=false, hl=false; // hl= false - первый экстремум на минимуме; = true - на максимуме

 

 последняя строчка - ошибка - 'new' - name expected

Индикатор nen/a


Файлы:
 
mgmaxim:

Почему-то, если в настройках указать PERIOD_CURRENT, то все рисует замечательно на всех ТФ. А как только указываю чтобы рисовал линии, которые может определить по точкам Н1, переключаю на М15 - и все ломается.  

Естественно, ломается; а если будете рисовать линии по точкам М15, то после переключения на Н1 ничто не сломается. 

Невозможно при квантовании 1 час получить точность, аналогичную квантованию 15 минут. Про Котельникова что-нибудь слышали? 

 
tara:

Естественно, ломается; а если будете рисовать линии по точкам М15, то после переключения на Н1 ничто не сломается. 

Невозможно при квантовании 1 час получить точность, аналогичную квантованию 15 минут. Про Котельникова что-нибудь слышали? 

Это я понимаю, но тогда ведь должны остаться те же линии, но со смещением. А у меня получается что линии чертятся по другим точкам. Причем точки определяются правильно. Т.е. на М15 они те же что и на Н1. А линии чертятся не по этим точкам, а по графику М15. Вот функция, которая чертит Трендовые линии сопротивления

А про Котельникова не слышал. Кто это? 

void trend_lines_hi(int period)

  {

   int per=period_to_integer(period);

   double pr1=0,pr2=0,pr3=0,pr4=0,pr5=0;

   datetime t1=0,t2=0,t3=0,t4=0,t5=0;

   bool find_p1 = false;

   bool find_p2 = true;

   bool find_p3 = true;

   bool find_p4 = true;

   for(int i=bar_to_history-1; i>=0; i--)

     {

      if(fu_hi(i,period)>pr1 && pr1>0) //если цена оказалась выше первой точки

        {

         find_p1=false; find_p2=true;                                           //то указываем что нет первой точки. надо ее искать

         ObjectDelete(trl1);

        }

      if(find_p1==false) //изначально условие, что нет первой точки

        {

         if(bar_point_hi[per][i]>0) //перебирали массив баров с хаями, нашли первую с конца запись. Остальные нули

           {

            find_p1=true; find_p2=false;                                          //указываем что нашли первую точку и дальше ее искать пока не нужно

            pr1=point_pr_hi[per][i];                               //выясняем цену и время для первой точки

            t1=fu_time(bar_point_hi[per][i],period);

            continue;                                                //переходим к следующему бару

           }

        }

      if(fu_hi(i,period)<=pr1) //если цена оказалась меньше или равна первой точки

        {

         if(find_p2==true) //если уже есть вторая точка, а значит и нарисованна линия 

           {

            if(fu_hi(i,period)>ObjectGetValueByShift(trl1,i)) //и цена выросла выше этой линии

              {

               find_p2=false; find_p3=true;                                   //помечаю, что больше нет второй точки

               ObjectDelete(trl2);

              }

            if(fu_hi(i,period)<ObjectGetValueByShift(trl1,i)) //если цена оказалась ниже линии

              {

               if(find_p3==true)

                 {

                  if(fu_hi(i,period)>ObjectGetValueByShift(trl2,i))

                    {

                     find_p3=false; find_p4=true;


                     ObjectDelete(trl3);

                     //continue;

                    }

                  if(fu_hi(i,period)<ObjectGetValueByShift(trl2,i))

                    {

                     if(find_p4==true)

                       {

                        if(fu_hi(i,period)>ObjectGetValueByShift(trl3,i))

                          {

                           find_p4=false;


                           //continue;

                          }

                       }

                     if(find_p4==false)

                       {

                        if(bar_point_hi[per][i]>0)

                          {

                           ObjectDelete(trl3);

                           find_p4=true;

                           pr4= point_pr_hi[per][i];

                           t4 =fu_time(bar_point_hi[per][i],period);

                           trl3="3 "+DoubleToStr(pr4,Digits)+IntegerToString(t4);

                           ObjectCreate(trl3,OBJ_TREND,0,t3,pr3,t4,pr4);

                           ObjectSet(trl3,OBJPROP_RAY,true);

                           ObjectSet(trl3,OBJPROP_COLOR,hiclr);

                           ObjectSet(trl3,OBJPROP_WIDTH,width3);

                           continue;

                          }

                       }

                    }

                 }

               if(find_p3==false) //если еще не нашел третью точку

                 {

                  if(bar_point_hi[per][i]>0) //если нашел при этом новое значение максмума, т.е. можно третью линию нарисовать

                    {

                     ObjectDelete(trl2);

                     find_p3=true; find_p4=false;

                     pr3=point_pr_hi[per][i];                           //выясняю координаты третьей точки

                     t3 =fu_time(bar_point_hi[per][i],period);

                     trl2="2 "+DoubleToStr(pr3,Digits)+IntegerToString(t3);//создаю имя для будущей второй линии

                     ObjectCreate(trl2,OBJ_TREND,0,t2,pr2,t3,pr3);

                     ObjectSet(trl2,OBJPROP_RAY,true);

                     ObjectSet(trl2,OBJPROP_COLOR,hiclr);

                     ObjectSet(trl2,OBJPROP_WIDTH,width2);

                     continue;                                          //следующая итерация

                    }

                 }

              }

           }

         if(find_p2==false) //и если указано, что второй точки нет

           {

            if(bar_point_hi[per][i]>0) //то если нашел запись в массиве (т.е. нашел очередной максимум)

              {

               ObjectDelete(trl1);

               find_p2=true; find_p3=false;                                       //указываю, что нашел вторую точку

               pr2=point_pr_hi[per][i];                            //выясняю координаты второй точки

               t2 = fu_time(bar_point_hi[per][i],period);

               trl1="1 "+IntegerToString(t2)+DoubleToStr(pr2);          //создаем имя будущей линии

               ObjectCreate(trl1,OBJ_TREND,0,t1,pr1,t2,pr2);         //создаю трендовую линию

               ObjectSet(trl1,OBJPROP_RAY,true);

               ObjectSet(trl1,OBJPROP_COLOR,hiclr);

               ObjectSet(trl1,OBJPROP_WIDTH,width1);

               continue;

              }

           }

        }

     }

  }

 
Vinin:
Ошибка не в функциях, а при обращении к ним. Меня смущает переменная bar, и нигде нет как Вы его определяете
 Значения этой переменной приходят из цикла. Перебираю бары от 1000 до 0.
 
mgmaxim:

Это я понимаю, но тогда ведь должны остаться те же линии, но со смещением. А у меня получается что линии чертятся по другим точкам. Причем точки определяются правильно. Т.е. на М15 они те же что и на Н1. А линии чертятся не по этим точкам, а по графику М15. Вот функция, которая чертит Трендовые линии сопротивления

А про Котельникова не слышал. Кто это? 

_________________________________________________

Не должно быть тех же линий. Если экстремум на графике М1 был зафиксирован в 11:59, то на графике Н1 он окажется зафиксированным в 11:00, к гадалке не ходи. А Котельников - первый, кто обратил внимание на этот ныне очевидный факт. 

 
tara:

ОК. Пусть есть функция

double d = iHigh(Symbol(),PERIOD_H1,bar);

пускай bar = 100; 

Она ведь не должна выдать разные значения на Н1 и на М15 графике?

Я имею ввиду эта функция считает бары именно на Н1. И не важно какой я график открыл.

Или нужно дополнительно прописывать какие-то условия? iBarShift? 

 
mgmaxim:

ОК. Пусть есть функция

double d = iHigh(Symbol(),PERIOD_H1,bar);

пускай bar = 100; 

Она ведь не должна выдать разные значения на Н1 и на М15 графике?

Я имею ввиду эта функция считает бары именно на Н1. И не важно какой я график открыл.

Или нужно дополнительно прописывать какие-то условия? iBarShift? 

В большинстве случаев должна. Бар с индексом 100 на графике Н1 точно отличается по времени открытия от бара с индексом 100 на графике М15. Хотя в некоторых случаях их максимум может совпадать. Но это все равно разные бары.

Например, если сейчас текущее время сервера 18:34, то на Н1 формируется бар с временем открытия 18:00, на М15 - с временем открытия 18:30. Бар на М15 с временем открытия 18:00 будет иметь индекс 2, в то время как на Н1 бар с таким временем открытия продолжает оставаться с индексом 0. Далее, бару Н1 с индексом 1 и с временем открытия 17:00 соответствует четыре бара М15 (17:00, 17:15, 17:30 и 17:45) с индексами 6, 5, 4, 3 соответственно.

В итоге бару Н1 с индексом 100 в данной ситуации будут соответствовать бары М15 с индексами:  396, 397, 398 и 399.

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