Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1134

 
Nauris Zukas:

Здравствуйте. Если за ране не знать сколько элементов будет в массиве, как объявлять массив, чтобы увеличивался массив с каждым новым элементом?

Пример для того чтобы понятнее было:

double HighA[]; // ??????????????????

for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));

Чаще надо читать документацию.
ArrayResize - Операции с массивами - Справочник MQL4
ArrayResize - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArrayResize - Операции с массивами - Справочник MQL4
 
Alexey Viktorov:
Чаще надо читать документацию.

Я читал и пробовал но получал ошибку "array out of range". На примере это выглядела так:

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[i]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
 
Nauris Zukas:

Я читал и пробовал но получал ошибку "array out of range". На примере это выглядела так:

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[i]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));

‌Когда не выполняется условие A[i] < B[i] размер массива остаётся неизменным, а счётчик цикла увеличивается. Потому и выход за пределы...

Так попробуй

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            int size = ArraySize(HighA);
            ArrayResize(HighA, size+1);
            HighA[size]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));


 
Alexey Viktorov:

‌Когда не выполняется условие A[i] < B[i] размер массива остаётся неизменным, а счётчик цикла увеличивается. Потому и выход за пределы...

Так попробуй

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            int size = ArraySize(HighA);
            ArrayResize(HighA, size+1);
            HighA[size]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));


Спасибо! Теперь все работает!
 
Nauris Zukas:

Я читал и пробовал но получал ошибку "array out of range". На примере это выглядела так:

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[i]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));

Ну так будет работать быстрее

  int countHlines=0;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[countHlines-1]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));


// Вариант №2
  int countHlines=-1;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines+1);
            HighA[countHlines]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
 
Vitaly Muzichenko:

Ну так будет работать быстрее

  int countHlines=0;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[countHlines-1]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));


// Вариант №2
  int countHlines=-1;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines+1);
            HighA[countHlines]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Спасибо, ясно! Будет работать быстрее из за ArraySize, это как-то замедляет?
 
Nauris Zukas:
Спасибо, ясно! Будет работать быстрее из за ArraySize, это как-то замедляет?
Незначительно, но зато понятно и застрахован от ошибки.
 
Alexey Viktorov:
Незначительно, но зато понятно и застрахован от ошибки.
Спасибо!
 
Здравствуйте, для торговли использую советника ИЛАН 2.0, подскажите как  сделать автоматическую остановку советника после закрытия всех ордеров? мне это нужно допустим перед выходом важных новостей чтобы он довел сделки до логичного конца и больше не торговал.Заранее спасибо!
 

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

Заранее благодарен.