Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1747

 
Andrey Sokolov #:

Ich danke Ihnen.

Es stellt sich heraus, dass es verschiedene Funktionen mit demselben Namen gibt, und Siekönnen nicht die Möglichkeit schaffen, eine unterschiedliche Anzahl von Parametern zu übergeben?

Es kann, aber es ist weniger als die Parameter, das Beispiel Schaltfläche hat viele Parameter, aber
//+------------------------------------------------------------------+ 
//| Создает кнопку                                                   | 
//+------------------------------------------------------------------+ 
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)                // приоритет на нажатие мышью 

Es wird auch mit einem Minimum an Parametern gezeichnet

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

Grüße. Können Sie mir bitte sagen, ob und wie dies möglich ist?

Ist es möglich, Ihre Funktionen so zu schreiben, dass Sie eine unterschiedliche Anzahl von Parametern an geschriebene Funktionen übergeben können?

Wie zum Beispiel in dieser Funktion können Sie 4 oder 5 Parameter übergeben.


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

Das Ergebnis ist

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
 

Bitte helfen Sie mir, ich kann die Fehlerursache nicht herausfinden

   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;

Ich wollte eine gleichmäßige Welle, aber aus irgendeinem Grund geht "0" zweimal


 

Warum funktioniertNormalizeDouble manchmal nicht?

Wenn ich ein Array im Protokoll ausdrucke, werden fast alle doppelten Werte mit der angegebenen 1 Dezimalstelle gedruckt, und einige 3-4 Werte (von hundert) mit 15 Stellen.

...

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

Bitte helfen Sie mir, ich kann die Fehlerursache nicht herausfinden

Gewünscht war eine gleichmäßige Welle, aber aus irgendeinem Grund geht die "0" zweimal


weil die Bedingungen verwirrend sind. Bei einer Iteration der Schleife sollte das "up"-Flag nur in einem Zustand sein, und Sie können "true" haben und in der gleichen Iteration der Schleife "false" werden

Ich würde es im Allgemeinen so schreiben:

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

weil die Bedingungen verwirrend sind. Bei einer Iteration der Schleife sollte das "up"-Flag nur in einem Zustand sein, aber Sie können "true" haben und in derselben Iteration der Schleife "false" werden

Ich würde es im Allgemeinen so schreiben:

Vielen Dank, Igor, ich danke dir.
 

Können Sie mir sagen, wie man es richtig macht?

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

nicht alle Elemente eingeben, die ich addieren möchte, sondern nur 5 Elemente angeben

 
Sergey Zhukov #:

Wenn Sie sie in *.mq4 umbenennen, ist alles in Ordnung.

Wenn Sie es auf diese Weise kompilieren, erhalten Sie Fehler.

Ich habe keine Fehler


 
 
MakarFX #:

Ich habe keine Fehler.


Meine sieht so aus:

e

Wie auch immer, es ist nicht kritisch. Vielen Dank für Ihre Hilfe.