新人对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 "会出现两次。


 

为什么NormalizeDouble 有时不工作?

当我打印一个数组到日志时,几乎所有的双倍值都被打印到指定的小数点后1位,还有一些3-4个值(在一百个值中)有15位。

...

2021.11.15 04:01:07.821Sov2EURUSD,M1: 9.9
2021.11.15 04:01:07.724 Sov2 EURUSD,M1: 9.800000000000001
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 Sov2 EURUSD,M1: 9.1

...

 
MakarFX #:

请帮助,我不知道错误是什么。

想要一个均匀的 波,但由于某些原因,"0 "去了两次


因为条件很混乱,在一个循环的迭代中,你应该只有一个状态的上升标志,你可以有真,在同一个循环的迭代中变成假。

我一般会这样写。

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

因为条件很混乱,在循环的一次迭代中,你应该只有一个状态的上升标志,但你可以有真,在循环的同一迭代中变成假。

我一般会这样写。

谢谢你,伊戈尔,非常感谢。
 

你能告诉我如何正确操作吗?

   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,就一切正常了。

如果你这样编译,你就会出现错误。

我没有错误


 
MakarFX #:

我没有任何错误。


我的看起来像这样:

e

总之,这并不关键。谢谢你的帮助。

原因: