Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1366

 

¿Realmente se reduce a esto?

//+------------------------------------------------------------------+
//| Получим 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);
  }

Es una especie de costumbre, ¿no?

 
Mikhail Toptunov #:

¿Realmente se reduce a esto?

Es una especie de costumbre, ¿no?

EMPTY_VALUE

este es el valor máximo del doble, no hay nada más alto

 
Alexey Viktorov #:

Según entiendo, hay que encontrar el valor máximo del indicador que nunca es igual a cero.

Odio los NULL y siempre aplico 0,0 en los valores numéricos, lo que nunca falla.

Creo que se cargará el sistema y EMPTY_VALUE y NULL no pesarán mucho. ¡No sé en qué estoy pensando!

 
Alexey Viktorov #:

Según entiendo, hay que encontrar el valor máximo del indicador que nunca es igual a cero.

No soporto NULL y siempre aplico 0,0 en valores numéricos que nunca fallarán.


¡¡¡Necesito buscar tanto el máximo como el mínimo si hago cero, entonces no encontraré el valor mínimo!!!

 
Aliaksandr Hryshyn #:

este es el valor máximo del tipo double, no hay nada más alto

es decir, ¿cómo designar una variable de un array para que esté vacía y pese lo menos posible?

 
Aliaksandr Hryshyn #:

este es el valor máximo del tipo double, no hay nada más alto

Si es NULO, ¿será más fácil?

 

De todos modos hecho así, gracias por los consejos , kudos a ustedes habitantes de la montaña)))

//+------------------------------------------------------------------+
//| Получим 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);
  }

Si hay una opción más sencilla, muy interesante cuál para el sistema

 

Ayuda, ¡alguien puede ayudar!

Cómo forzar bruscamente un array para que pase

1) en la diagonal

2) dentro del rango de (0).


He estado probando estos algoritmos, pero no consigo nada.

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 #:

Ayuda, ¡alguien puede ayudar!

¿Cómo puedo forzar un array para que pase por

1) en la diagonal

2) dentro del rango de (0).


Estoy probando estos algoritmos, pero no lo encuentro.

Si está en la diagonal, un bucle es suficiente. O quizás he entendido mal la pregunta.

Tal vez lo necesites

/********************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****************************/
Pero es un borrador...
 
Alexey Viktorov #:

Si es en diagonal, un ciclo es suficiente. O tal vez he entendido mal la pregunta.

Quizás esto es lo que necesitas.

pero es un borrador...

Hm, esa es una solución genial. Tengo esta, tengo que reorganizarla. Todavía estoy tratando de averiguar cómo hacerlo.