Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 445

 
Artyom Trishkin:

Ну так и читайте iCustom() сразу по индексу первого цикла.

Другой вопрос - что вам нужны данные от текущего бара влево. Поэтому и говорю - читайте от нуля до найденного нужного, но не более, чем rates_total-1.

При этом читайте только при limit>1

В остальное время новых данных нет, и индекс найденного нужного вам бара не поменяется.

Не хочет, при этом номера баров ближних стрелок  в комментарии пишет правильно

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<1) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) 
     {
      limit=rates_total-1;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--) 
     {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,i),Digits)!=EMPTY_VALUE)
           {
            num_buy=i;

           }
//
      if(num_buy==10)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",1,i),Digits)!=EMPTY_VALUE
            )
           {
            num_sell=i;

           }
      if(num_sell==10)
        {
         BufferDN[i+1]=high[i+1]+distance*MyPoint;

        }
     
      Comment(num_buy,"num_sell",num_sell);
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }
 
mila.com:

Не хочет

А вы читаете, что я пишу?

Другой вопрос - что вам нужны данные от текущего бара влево. Поэтому и говорю - читайте от нуля до найденного нужного, но не более, чем rates_total-1.

При этом читайте только при limit>1

 
Artyom Trishkin:

А вы читаете, что я пишу?

Другой вопрос - что вам нужны данные от текущего бара влево. Поэтому и говорю - читайте от нуля до найденного нужного, но не более, чем rates_total-1.

При этом читайте только при limit>1

Разве я не так сделала?
   if(limit>1)
     {
      limit=rates_total-1;

 
mila.com:

Разве я не так сделала?
   if(limit>1)
     {
      limit=rates_total-1;

Вы дальше вот что сделали:

for(int i=limit; i>=0; i--) 

А я о чём говорил?

 
Artyom Trishkin:

Вы дальше вот что сделали:

А я о чём говорил?

Читать при limit>1

for(int i=limit; i>1; i--) 

не соображаю как правильно?

 
mila.com:

Читать при limit>1

не соображаю как правильно?

Поэтому и говорю - читайте от нуля до найденного нужного, но не более, чем rates_total-1.
 
Artyom Trishkin:
Поэтому и говорю - читайте от нуля до найденного нужного, но не более, чем rates_total-1.

Говорю же, не соображаю как это. Покажите, ожалуйста )

 
mila.com:

Говорю же, не соображаю как это. Покажите, ожалуйста )

if(limit>1)
  {
   for(int i=0; i<limit; i++) 
     { 
      // тут поиск до нужного вам бара. Нашли - запомнили бар или поставили точку куда нужно и break;
     }
  }

Данный цикл будет только до нужного вам бара (если найдётся), либо по всей истории - до limit.

 
Artyom Trishkin:

Данный цикл будет только до нужного вам бара (если найдётся), либо по всей истории - до limit.

я, совсем плохая, ни чего не показывает.

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<1) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) 
     {
      limit=rates_total-1;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
  if(limit>1)
  {
   for(int i=0; i<limit; i++) 
     { 
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,i),Digits)!=EMPTY_VALUE)
           {
            num_buy=i;

           }
//
      if(num_buy==10)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",1,i),Digits)!=EMPTY_VALUE
            )
           {
            num_sell=i;

           }
      if(num_sell==10)
        {
         BufferDN[i+1]=high[i+1]+distance*MyPoint;

        }
     
      Comment(num_buy,"num_sell",num_sell);
     }
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }
 
mila.com:

я, совсем плохая, ни чего не показывает.

Я вот так и не пойму: а что хотите найти и отобразить? Просто словами - без кода.

Вот вы пишете:

Здравствуйте, помогите, пожалуйста.

Хочу, в любой момент, знать номер бара, на котором есть стрелка индикатора.

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

Вот и вопрос сразу: а зачем ищете именно на десятом баре? А вообще, на каком баре нужно? И какую именно стрелку? Самую последнюю? Или две последних - верхнюю и нижнюю? Или узнать бар нужной стрелки по её номеру справа-налево?

Вот не понятно.

И приложите полностью весь индикатор, а не OnCalculate()

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