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

 

Корифеи придите на помощь.

Задача найти минимальный элемент в массиве[].

//+------------------------------------------------------------------+ 
//| Получим Lowest для заданного промежутка                          | 
//+------------------------------------------------------------------+ 
double iLowMin(int ot,int bands,double &buffer[])
  {
   double result=-1;
   result=buffer[ArrayMinimum(buffer,ot,bands)];
   return(result);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHighMax(int ot,int bands,double &buffer[])
  {
   double result=-1;
   result=buffer[ArrayMaximum(buffer,ot,bands)];
   return(result);
  }

максимум ищет, а минимум хоть убей. Что только не пробывал, входные массивы подою заполненные - смотрел через отладку, что деееееллллать?

Print("DwMin  ",iLowMin(rates_total-50,49,ExtLowerBuffer));

Возможно есть какие-то нюансыыы? 

объявлен через 

   SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA);
 
Top2n:

Корифеи придите на помощь.

Задача найти минимальный элемент в массиве[].

максимум ищет, а минимум хоть убей. Что только не пробывал, входные массивы подою заполненные - смотрел через отладку, что деееееллллать?

Возможно есть какие-то нюансыыы? 

объявлен через 

Попробуете ArraySort и проверьте что на первый индекс выводит.

 

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

 

Внимание вопрос))

Как в индикаторе задать бар с которого начинать обрабатывать?

if(prev_calculated>rates_total-Bmax)

{ ... то что нужно обрабатывать начиная с бара[rates_total-Bmax]

}

Пробовал так, итог индикатор вообще делает один ход.

 

Снова здравствуйте! Подскажите пожалуйста, мне известен индекс элемента массива, а с помощью какой функции узнать его значение

 

int Totall=OrdersTotal();

double Price;               // Цена выбранного ордера

  double Mas[];                      //массив для упорядочивания всех ордеров

  for(int i=0; i<OrdersTotal(); i++)          // Цикл перебора ордер

   {

    if(OrderSelect(i,SELECT_BY_POS)) // Если есть следующий

     {Price=OrderOpenPrice();       //Заполняем массив ценами

      Mas[i] = Price;

     }

   }

ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);  // Теперь цены открытия упорядочены по убыванию

          

        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND)  //Определен индекс ближайшего большего по значению елемента к текущей цене

 
Nauris Zukas:

Как я уже раньше сталкивался изучая классы, так и опять появляется нюансы которые не описаны в статях или где-то так спрятаны что не возможно найти через поисковик. Целы день потрачен в пустую искал пояснения. Например что означает этот символ и как он влияют если нету. Как видно ниже в примере из стати, сначала он есть а потом нету: &

Также этот символ не понятно что означает: ~

*

В mql4, mql5 в функцию массив всегда передаётся только по ссылке (& == амперсанд)

Сначала - в формальных параметрах функции - амперсанд есть, и говорит о том, что в функцию передаётся не сам массив, а ссылка на него. А далее - внутри функции - вы уже работаете со ссылкой, а значит и не нужно заново это указывать.

Ну а тильда (~) пишется перед названием деструктора класса - конструктор и деструктор имеют то же имя, что и сам класс, но у деструктора есть ~.

Вот почитайте статью о том, когда нужно использовать ссылки, а когда указатели.

Хотя, впрочем, вам пока ещё азы нужно читать.

 
vikzip:

Снова здравствуйте! Подскажите пожалуйста, мне известен индекс элемента массива, а с помощью какой функции узнать его значение

 

int Totall=OrdersTotal();

double Price;               // Цена выбранного ордера

  double Mas[];                      //массив для упорядочивания всех ордеров

  for(int i=0; i<OrdersTotal(); i++)          // Цикл перебора ордер

   {

    if(OrderSelect(i,SELECT_BY_POS)) // Если есть следующий

     {Price=OrderOpenPrice();       //Заполняем массив ценами

      Mas[i] = Price;

     }

   }

ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);  // Теперь цены открытия упорядочены по убыванию

          

        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND)  //Определен индекс ближайшего большего по значению елемента к текущей цене

Значение_элемента_массива = Массив[индекс];

 

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

Прихожу домой , дома лаптоп макбуук, и абсолютно с такимиже параметрами по этому же инструменту с таким же тайм ФРЕИМАМ показывает абсолютно другое результат в Тестер,Есть предположения или идей почему так ?

 
Artyom Trishkin:

Значение_элемента_массива = Массив[индекс];


Спасибо, теперь новая проблема. При написании следующего условия возникает ошибка 'PriceBlizko1' - undeclared identifier. Объясните пожалуйста почему?

double Price;                                                               // Цена выбранного ордера

  double Mas[];                                                                //массив для упорядочивания всех ордеров

  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер

   {

    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий

     {

      


    Price=OrderOpenPrice();                                                    //Заполняем массив ценами

    Mas[i] = Price;

     }

   }

  

          ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);                           // Теперь цены открытия упорядочены по убыванию

          

        int Blizko1=ArrayBsearch(Mas,Bid,WHOLE_ARRAY,0,MODE_ASCEND);           //Определен индекс ближайшего меньшего по значению елемента к текущей цене

        double PriceBlizko1=Mas[Blizko1];

     

     }  

  if (PriceBlizko1-Bid>=30*Point)                           //Если нижний ордер дальше чем на 30 пунктов     !!!!!!В ЭТОЙ СТРОКЕ!!!!!

       OrderSend(Symbol(),OP_SELL,LtsS,Bid,2,0,Bid+30*Point);      //Открываем ордер Сел

                    Alert (GetLastError());                                    //Сообщение об ошибке



 
vikzip:

Используйте кнопку для вставки кода!

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