Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1366

 

Läuft es wirklich auf diese Frage hinaus?

//+------------------------------------------------------------------+
//| Получим 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 ist eine Art Brauch, nicht wahr?

 
Mikhail Toptunov #:

Läuft es wirklich auf diese Frage hinaus?

Es ist eine Art Brauch, nicht wahr?

EMPTY_VALUE

dies ist der Höchstwert von double, es gibt keinen höheren Wert

 
Alexey Viktorov #:

So wie ich es verstehe, müssen Sie den maximalen Indikatorwert finden, der nie gleich Null ist.

Ich hasse NULL und wende bei numerischen Werten immer 0,0 an, was nie scheitert.

Ich denke, es wird das System belasten und EMPTY_VALUE und NULL werden nicht viel wiegen. Ich weiß nicht, was ich mir dabei denke!

 
Alexey Viktorov #:

So wie ich es verstehe, müssen Sie den maximalen Indikatorwert finden, der nie gleich Null ist.

Ich kann NULL nicht ausstehen und wende bei numerischen Werten immer 0,0 an, was nie scheitern wird.


Ich muss sowohl nach dem Höchst- als auch nach dem Mindestwert suchen, wenn ich den Mindestwert nicht finde!!!

 
Aliaksandr Hryshyn #:

dies ist der Höchstwert des Typs double, es gibt keinen höheren Wert

Wie bezeichne ich z.B. eine Variable in einem Array als leer, damit sie am wenigsten wiegt?

 
Aliaksandr Hryshyn #:

dies ist der Höchstwert des Typs double, es gibt keinen höheren Wert

Wenn NULL, wäre es dann einfacher?

 

Wie auch immer, danke für die Tipps, Hut ab vor euch Bergbewohnern)))

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

Wenn es eine einfachere Option gibt, sehr interessant, welche für das System

 

Hilfe, kann jemand helfen!

Wie man mit roher Gewalt ein Array durchläuft

1) auf der Diagonale

2) innerhalb des Bereichs von (0).


Ich habe diese Algorithmen ausprobiert, aber ich komme nicht weiter.

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

Hilfe, kann jemand helfen!

Wie kann ich ein Array mit roher Gewalt durchlaufen lassen

1) auf der Diagonale

2) innerhalb des Bereichs von (0).


Ich versuche diese Algorithmen, aber ich kann sie nicht finden.

Auf der Diagonalen reicht eine Schleife aus. Oder vielleicht habe ich die Frage falsch verstanden.

Vielleicht brauchen Sie es

/********************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****************************/
Aber es ist ein Rohentwurf...
 
Alexey Viktorov #:

Bei diagonaler Anordnung ist ein Zyklus ausreichend. Oder vielleicht habe ich die Frage falsch verstanden.

Vielleicht ist es das, was Sie brauchen.

aber es ist ein Entwurf...

Hm, das ist eine coole Lösung. Ich habe das hier, ich muss es neu anordnen. Ich versuche immer noch herauszufinden, wie ich das machen soll.


Grund der Beschwerde: