初心者の方からの質問 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つです。

 

助けて!誰か助けて

配列をブルートフォースで通過させる方法

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)。


これらのアルゴリズムを試しているのですが、見つけられません。

対角線上にある場合は、1つのループで十分です。それとも、質問の仕方が間違っているのでしょうか。

もしかしたら、必要かもしれない

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

斜めの場合は1サイクルで十分です。それとも、私が質問を誤解していたのでしょうか。

あなたに必要なのは、これかもしれない。

が、草案である...。

ふむ、クールな解決法だ。 これを手に入れたからには、並べ替えが必要だ。 どうすればいいか、まだ考えているところだ。


理由: