Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1747

 
Andrey Sokolov #:

Grazie.

Si scopre che ci sono diverse funzioni con lo stesso nome, manon si può rendere possibile passare un numero diverso di parametri?

Può, ma è inferiore ai parametri, il pulsante di esempio ha molti parametri, ma
//+------------------------------------------------------------------+ 
//| Создает кнопку                                                   | 
//+------------------------------------------------------------------+ 
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)                // приоритет на нажатие мышью 

Disegnerà anche con un minimo di parametri

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

Saluti. Potreste dirmi se e come questo può essere fatto?

È possibile scrivere le proprie funzioni in modo da poter passare un numero diverso di parametri alle funzioni scritte?

Come, per esempio, in questa funzione, potete passare 4 o 5 parametri.


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

Il risultato è

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
 

Per favore aiutatemi, non riesco a capire qual è l'errore

   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;

Volevo un'onda uniforme, ma per qualche motivo "0" va due volte


 

PerchéNormalizeDouble a volte non funziona?

Quando stampo un array sul log, quasi tutti i valori doppi vengono stampati con 1 decimale specificato, e alcuni 3-4 valori (su un centinaio) con 15 cifre.

...

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

Per favore aiutatemi, non riesco a capire qual è l'errore

Volevo un'onda uniforme, ma per qualche motivo "0" va due volte


perché le condizioni sono confuse, su un'iterazione del ciclo si dovrebbe avere solo il flag up in uno stato, e si può avere true e nella stessa iterazione del ciclo diventare false

Lo scriverei così in generale:

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

perché le condizioni sono confuse, su un'iterazione del ciclo si dovrebbe avere solo il flag up in uno stato, ma si può avere true e nella stessa iterazione del ciclo diventare false

Lo scriverei così in generale:

Grazie, Igor, molto.
 

Puoi dirmi come farlo correttamente

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

non inserire tutti gli elementi che voglio sommare, ma solo specificare 5 elementi

 
Sergey Zhukov #:

Se lo rinominate in *.mq4, tutto va bene.

Se lo si compila in questo modo, si ottengono errori.

Non ho errori


 
MakarFX #:

Non ho errori.


Il mio è così:

e

Comunque, non è critico. Grazie per il vostro aiuto.