MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1747

 
Andrey Sokolov #:

ありがとうございます。

同じ名前の別の関数があることがわかりました。 そして、異なる数のパラメータを渡すことができるようにできないのでしょうか?

できますが、パラメータより少ないです。例のボタンはパラメータが多いですが、
//+------------------------------------------------------------------+ 
//| Создает кнопку                                                   | 
//+------------------------------------------------------------------+ 
bool ButtonCreate(const long              chart_ID=0,               // ID графика 
                  const string            name="Button",            // имя кнопки 
                  const int               sub_window=0,             // номер подокна 
                  const int               x=0,                      // координата по оси X 
                  const int               y=0,                      // координата по оси Y 
                  const int               width=50,                 // ширина кнопки 
                  const int               height=18,                // высота кнопки 
                  const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки 
                  const string            text="Button",            // текст 
                  const string            font="Arial",             // шрифт 
                  const int               font_size=10,             // размер шрифта 
                  const color             clr=clrBlack,             // цвет текста 
                  const color             back_clr=C'236,233,216',  // цвет фона 
                  const color             border_clr=clrNONE,       // цвет границы 
                  const bool              state=false,              // нажата/отжата 
                  const bool              back=false,               // на заднем плане 
                  const bool              selection=false,          // выделить для перемещений 
                  const bool              hidden=true,              // скрыт в списке объектов 
                  const long              z_order=0)                // приоритет на нажатие мышью 

最小限のパラメータでも描画される

ButtonCreate(0,InpName,0,x,y,x_size,y_size,InpCorner);
 
Andrey Sokolov #:

ごあいさつ可能かどうか、どのように可能か教えていただけませんか。

関数に異なる数のパラメータを渡せるように書くことはできますか?

どのように、例えば、この関数では、4つまたは5つのパラメータを渡すことができます。


/********************Script program start function*******************/
void OnStart()
 {
  double a = 2.87,
         b = 3.62,
         c = 0;
  Print("Fu(a, b) ", Fu(a, b));
  Fu(a, b, c);
  Print("Fu(a, b, c) ", c);
 }/******************************************************************/
double Fu(double x, double y)
 {
  return x*y;
 }/******************************************************************/
void Fu(double x, double y, double & z)
 {
  z = x+y;
 }/******************************************************************/
/*****************************End program****************************/

その結果

2021.11.15 00:01:54.629 00 USDJPY,M15: Fu(a, b, c) 6.49
2021.11.15 00:01:54.629 00 USDJPY,M15: Fu(a, b) 10.3894
 

エラーの原因が分からないので、助けてください

   for(i=limit;i>=0;i--)
     {
      if(up)
        {
         if(Label1Buffer[i+1]<Input1){a+=1;}
         else {up=false;}
        }
      if(!up)
        {
         if(Label1Buffer[i+1]>0){a-=1;}
         else {up=true;}
        }
      Label1Buffer[i]=a;

均一な 波が欲しかったのですが、なぜか「0」が2回になってしまいます


 

NormalizeDoubleが 動作しないことがあるのはなぜですか?

ログに配列を出力すると、ほぼすべての2倍値が指定の小数点以下1桁で出力され、中には15桁の値も(100個中)3-4個出力されます。

...

2021.11.15 04:01:07.821Sov2EURUSD,M1: 9.9
2021.11.15 04:01:07.724 Sov2 EURUSD,M1: 9.80000000001
2021.11.15 04:01:07.821 Sov2 EURUSD,M1: 9.80000000001 2021.11.15 04:01:07.675 Sov2 EURUSD,M1: 9.9
2021.11.15 04:01:07.626 Sov2 EURUSD,M1: 9.6
2021.11.15 04:01:07.577 ソブ2 EURUSD,M1: 9.1

...

 
MakarFX #:

エラーの原因が分からないので、助けてください

均一な 波が欲しいのに、なぜか "0 "が2回出てしまう


ループの1回の繰り返しで、upフラグが1つの状態であるべきで、trueがあり、ループの同じ繰り返しでfalseになることができるからです。

一般的にはそのように書きますね。

   int y = 0, shift = 1;
   const int max_value = 100;
   const int min_value = 0;
   for(int i = rates_total - 1; i >= 0; i--)
   {
      Label1Buffer[i] = y; 
      y += shift;
      if(y >= max_value || y <= min_value) shift *= -1;
   }
 
Igor Makanu #:

ループの1回の繰り返しでは、upフラグは1つの状態でなければならないのに、ループの同じ繰り返しでtrueになったりfalseになったりして、条件が混乱しているからです。

一般的にはそのように書きますね。

イゴールさん、ありがとうございました。
 

正しい方法を教えてください

   for(i=limit;i>=0;i--)
     {
      Label1Buffer[i] = MathRand(); 
      Label2Buffer[i] = Label1Buffer[i+1]+Label1Buffer[i+2]+Label1Buffer[i+3]+Label1Buffer[i+4]+Label1Buffer[i+5]; 
     }

集計したい要素をすべて入力するのではなく、5つの要素だけを指定する。

 
Sergey Zhukov #:

*.mq4にリネームすれば、すべて問題ありません。

そのようにコンパイルすると、エラーが出ます。

エラーはありません


 
Alexey Viktorov,Maxim Kuznetsov,MakarFX ありがとうございました。
 
MakarFX #:

エラーは出ていません。


私のはこんな感じです:

e

とにかく、クリティカルではないんです。ご協力ありがとうございました。