Questions des débutants MQL5 MT5 MetaTrader 5 - page 1366

 

Est-ce que ça se résume vraiment à ça ?

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

C'est une sorte de coutume, n'est-ce pas ?

 
Mikhail Toptunov #:

Est-ce que ça se résume vraiment à ça ?

C'est une sorte de coutume, n'est-ce pas ?

EMPTY_VALUE

c'est la valeur maximale du double, il n'y a rien de plus élevé

 
Alexey Viktorov #:

D'après ce que je comprends, vous devez trouver la valeur maximale de l'indicateur qui n'est jamais égale à zéro.

Je déteste NULL et applique toujours 0.0 dans les valeurs numériques, ce qui n'échoue jamais.

Je pense que cela va charger le système et que EMPTY_VALUE et NULL ne pèseront pas lourd. Je ne sais pas à quoi je pense !

 
Alexey Viktorov #:

D'après ce que je comprends, vous devez trouver la valeur maximale de l'indicateur qui n'est jamais égale à zéro.

Je ne supporte pas le NULL et j'applique toujours 0,0 en valeurs numériques qui n'échoueront jamais.


Je dois chercher à la fois le maximum et le minimum ; si je fais zéro, alors je ne trouverai pas la valeur minimum ! !!

 
Aliaksandr Hryshyn #:

c'est la valeur maximale du type double, il n'y a rien de plus élevé

Par exemple, comment désigner une variable dans un tableau comme étant vide pour qu'elle pèse le moins ?

 
Aliaksandr Hryshyn #:

c'est la valeur maximale du type double, il n'y a rien de plus élevé

Si NULL, ce serait plus facile ?

 

En tout cas, c'est fait, merci pour les conseils, bravo à vous les montagnards)))).

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

S'il existe une option plus simple, il est très intéressant de savoir laquelle pour le système.

 

A l'aide, quelqu'un peut aider !

Comment puis-je forcer un tableau à passer à travers

1) sur la diagonale

2) dans l'intervalle de (0).


J'ai essayé ces algorithmes, mais je n'arrive à rien.

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

A l'aide, quelqu'un peut aider !

Comment puis-je forcer un tableau à passer à travers

1) sur la diagonale

2) dans l'intervalle de (0).


J'essaie ces algorithmes, mais je n'arrive pas à le trouver.

Si elle est en diagonale, une boucle suffit. Ou peut-être que j'ai mal formulé la question.

Peut-être que tu en as besoin

/********************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****************************/
Mais c'est un brouillon...
 
Alexey Viktorov #:

Si c'est en diagonale, un cycle suffit. Ou peut-être ai-je mal compris la question.

Peut-être que c'est ce dont vous avez besoin.

mais c'est un brouillon...

Hm, c'est une solution sympa. J'ai celle-ci, je dois la réarranger. J'essaie toujours de trouver comment faire.