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

 

Добрый день!

Подскажите пожалуйста, как найти минимальное значение?

Cуть такая: эксперт генерирует определённое значение, и данные идут в переменную. Вот собственно из этой переменной,  найти самое минимальное значение. Как это сделать?

MathMin - естественно не помог. А может неправильно использовал.

[Удален]  

Инициализируйте переменную при начале работы максимально возможным значением:

double a=DBL_MAX;

void OnTick()
   {   
   a=MathMin(a, iLow(Symbol(),0,0));
   
   }
Другие типы
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Константы числовых типов
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Константы числовых типов
  • www.mql5.com
Каждый простой числовой тип предназначен для определенного круга задач и позволяет оптимизировать работу mql5-программы при правильном применении...
 
Aleksei Stepanenko #:

Инициализируйте переменную при начале работы максимально возможным значением

Другие типы

Что -то не получается...

Привёл конкретный пример ниже.

 
if ((ppTP>0) && (ppSL>0))
{
koef1=NormalizeDouble(ppTP/ppSL,3); 
}



if (koef1 > koef1_i_max) // Поиск максимального исторического значения коэффициента "koef1"
{
koef1_i_max=koef1;
}
else 
{ 
if (koef1_i_max>0)
{
koef1_i_max=koef1_i_max;
}
}

// Поиск минимального исторического значения коэффициента "koef1"  ???????
То есть - "наверх идём  спокойно".  Тут я выкрутился. А вот с минимальными значениями - от максимального - проблемы. 
[Удален]  
double koef1_i_max=DBL_MIN;
double koef1_i_min=DBL_MAX;

void OnTick()
   {   
   if (koef1 > koef1_i_max) 
     {
     koef1_i_max=koef1;
     }
   if (koef1 < koef1_i_min) 
     {
     koef1_i_min=koef1;
     }

Идея такая: чтобы искать максимальное, сначала необходимо переменную сделать минимальной, и наоборот

 

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

Обозначая "DBL_MAX" мы пытаемся идти от максимума, и находить любое значение, которое ниже "DBL_MAX". А нужно находить самое минимальное значение из поступающих данных.

Пытался решить задачу ArrayMinimum. Но получается тоже самое - в переменной  "koef_i_min" появляется текущее значение, ниже глобального максимума.

Есть мысль, что решить это можно циклом, и массивом, вкупе. Массивом внутри цикла.  Чтобы все значения попадали в цикл, а массив уже выбирал самое минимальное значение из потока данных. Но как это организовать не понимаю. 

 
Alexey Belyakov #:

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

Обозначая "DBL_MAX" мы пытаемся идти от максимума, и находить любое значение, которое ниже "DBL_MAX". А нужно находить самое минимальное значение из поступающих данных.

Пытался решить задачу ArrayMinimum. Но получается тоже самое - в переменной  "koef_i_min" появляется текущее значение, ниже глобального максимума.

Есть мысль, что решить это можно циклом, и массивом, вкупе. Массивом внутри цикла.  Чтобы все значения попадали в цикл, а массив уже выбирал самое минимальное значение из потока данных. Но как это организовать не понимаю. 

А почему в koef_i_min" появляется текущее значение?

 
Galim_V #:

А почему в koef_i_min" появляется текущее значение?

Потому что :

void OnTick()
   {   
   if (koef1 > koef1_i_max) 
     {
     koef1_i_max=koef1;
     }
   if (koef1 < koef1_i_min) 
     {
     koef1_i_min=koef1;
     }
 
Alexey Belyakov #:

Потому что :

Этот клочок бумаги лично мне ничего не говорит. Разве что, ни 

koef1_i_max

ни

koef1_i_min

не статичны.

 
Galim_V #:

Этот клочок бумаги лично мне ничего не говорит. Разве что, ни 

ни

не статичны.

Да, так и есть.

Я вот думаю. Неужели разработчики не могли предусмотреть простейший математический оператор, кторый в динамичной переменной фикисирует всё меньший, и меньший минимум, но больше нуля. Это же выглядит элементарщиной!))

Я два дня потратил на это, но толкового так ничего и не придумал...

Фактически по этой теме -"поиск макс/мин. значения" есть две методики.

Это массив  ArrayMinimum/Max и  MathMin/MathMax и Всё!  

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

- В MathMax, MathMin - только два значения.... а почему только два?  Почему нет оператора который анализирует все новые поступающие значения...

Cтранно...