Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1366

 

Неужели все упирается в это

//+------------------------------------------------------------------+
//| Получим High для заданного номера бара                           |
//+------------------------------------------------------------------+
double CNewBar::iHighMax(int ot,int bands)
  {
   double result=-1;
   for(i=ot; i<bands; i++)
      if(m_ExtLowerBuffer[i]!=EMPTY_VALUE)
         if(m_ExtLowerBuffer[i]>result)
            result=lh;
   return(result);
  }

 Как то кастомно , что ли

 
Mikhail Toptunov #:

Неужели все упирается в это

 Как то кастомно , что ли

EMPTY_VALUE

это максимальное значение типа double, выше ничего нету

 
Alexey Viktorov #:

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

Я терпеть не могу NULL и всегда в числовых значениях применяю 0.0 которое никогда не подведёт.

Думал ил думаю это нагрузит систему, типо весит что то , а  EMPTY_VALUE и NULL они типо не весомые . Ну я так фантазирую не шарю!

 
Alexey Viktorov #:

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

Я терпеть не могу NULL и всегда в числовых значениях применяю 0.0 которое никогда не подведёт.


Надо, что бы и максимальное и минимальное искал если делаю ноль, тогда минимальное значение не найду!!!

 
Aliaksandr Hryshyn #:

это максимальное значение типа double, выше ничего нету

то есть как мне обозначить переменную в массиве пустую, что бы она меньше всего весила?

 
Aliaksandr Hryshyn #:

это максимальное значение типа double, выше ничего нету

Если NULL, то легче будет?

 

В общем сделал так, спасибо за подсказки , низкий поклон вам, жители Горы))

//+------------------------------------------------------------------+
//| Получим Lowest для заданного промежутка                          |
//+------------------------------------------------------------------+
double CNewBar::iLowMin(int ot,int bands)
  {
   double result=EMPTY_VALUE;
    for(int i=ot; i<ot+bands; i++)
      if(m_ExtLowerBuffer[i]!=NULL)
         if(m_ExtLowerBuffer[i]<result)
            result=m_ExtLowerBuffer[i];
   return(result);
  }
//+------------------------------------------------------------------+
//| Получим High для заданного номера бара                           |
//+------------------------------------------------------------------+
double CNewBar::iHighMax(int ot,int bands)
  {
   double result=NULL;
   for(int i=ot; i<ot+bands; i++)
      if(m_ExtUpperBuffer[i]!=NULL)
         if(m_ExtUpperBuffer[i]>result)
            result=m_ExtUpperBuffer[i];
   return(result);
  }

Если есть более простой вариант, очень интересно какой для системы

 

Хелп, кто-нибудь может помочь!

Как перебрать массив чтобы перебор был

1) по диагонали

2) в диапазоне значения (0) 


Кручу мучу эти алгоритмы, ни как не попаду 

void OnStart()
{
   for( int k = 0; k < ARRAY_SIZE_X; k++ ){
      for( int x = k, y = 0; x >= 0 && y < ARRAY_SIZE_Y; x--, y++ ){
         Print( "y = ", y, ", x = ", x );
         if( array[y][x] > 0 )
         {
         }
      }
   }
   for( int k = 1; k < ARRAY_SIZE_Y; k++ ){
      for( int x = ARRAY_SIZE_X-1, y = k; x >= 0 && y < ARRAY_SIZE_Y; x--, y++ ){
         Print( "y = ", y, ", x = ", x );
         if( array[y][x] > 0 )
         {
         }
      }
   }
}
 
Mikhail Toptunov #:

Хелп, кто-нибудь может помочь!

Как перебрать массив чтобы перебор был

1) по диагонали

2) в диапазоне значения (0) 


Кручу мучу эти алгоритмы, ни как не попаду 

Если по диагонали, то достаточно одного цикла. Или я не правильно понял вопрос.

Возможно это вам надо

/********************Script program start function*******************/
void OnStart()
 {
  int array[5][3];
  for(int k = 0; k < ArrayRange(array, 0); k++)
   {
    for(int x = 0; x < ArrayRange(array, 1); x++)
     {
      if(k+x >= ArrayRange(array, 0))
        break;
      Print("array[", k+x, "][", x, "]", array[k+x][x]);
     }
   }
 }/******************************************************************/
/*****************************End program****************************/
но это черновой вариант…
 
Alexey Viktorov #:

Если по диагонали, то достаточно одного цикла. Или я не правильно понял вопрос.

Возможно это вам надо

но это черновой вариант…

хм прикольное решение. получилось вот это , надо отобразить иначе. пока думаю как


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