Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1747

 
Andrey Sokolov #:

Gracias.

Resulta que hay diferentes funciones con el mismo nombre. ¿Y no se puedehacer pasar un número diferente de parámetros?

Puede, pero es menos que los parámetros, el botón de ejemplo tiene muchos parámetros, pero
//+------------------------------------------------------------------+ 
//| Создает кнопку                                                   | 
//+------------------------------------------------------------------+ 
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)                // приоритет на нажатие мышью 

Se dibujará incluso con un mínimo de parámetros

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

Saludos. ¿Podría decirme, por favor, si es posible hacer esto y cómo?

¿Es posible escribir las funciones de manera que se puedan pasar diferentes números de parámetros a las funciones escritas?

Cómo, por ejemplo, en esta función, puede pasar 4 o 5 parámetros.


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

El resultado es

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
 

Por favor, ayúdenme, no puedo averiguar cuál es el error

   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;

Quería una onda uniforme, pero por alguna razón el "0" va dos veces


 

¿Por qué a veces no funcionaNormalizeDouble?

Cuando imprimo una matriz en el registro, casi todos los valores dobles se imprimen con el decimal especificado, y algunos 3-4 valores (de un centenar) con 15 dígitos.

...

2021.11.15 04:01:07.821Sov2 EURUSD,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 #:

Por favor, ayúdenme, no puedo averiguar cuál es el error

Quería una onda uniforme, pero por alguna razón el "0" va dos veces


porque las condiciones son confusas, en una iteración del bucle sólo debe tener la bandera up en un estado, y puede tener true y en la misma iteración del bucle convertirse en false

Yo lo escribiría así en general:

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

porque las condiciones son confusas, en una iteración del bucle sólo debería tener la bandera de arriba en un estado, pero puede tener true y en la misma iteración del bucle convertirse en false

Yo lo escribiría así en general:

Muchas gracias, Igor.
 

¿Me pueden decir cómo hacerlo correctamente?

   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]; 
     }

no introducir todos los elementos que quiero sumar, sino sólo especificar 5 elementos

 
Sergey Zhukov #:

Si le cambias el nombre a *.mq4, todo está bien.

Si se compila así, se producen errores.

No tengo errores


 
MakarFX #:

No tengo errores.


El mío tiene este aspecto:

e

De todos modos, no es crítico. Gracias por su ayuda.

Razón de la queja: