Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 687

 

Woher weiß ich, warum dieses Konstrukt nicht funktioniert?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
Es meldet einen Fehler array out of range in '**.mq5' (13,10)
Wenn ich die Zeichenfolge double buf[]; durch double buf[10]; ersetze, gibt es keinen Ausgang außerhalb des Arrays.
 
ivanivan_11:

Können Sie mir sagen, warum diese Konstruktion nicht funktioniert?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
meldet einen Fehler array out of range in '**.mq5' (13,10)
wenn ich die Zeichenkette double buf[]; durch double buf[10]; ersetze, gibt es keinen array exit.

Entweder double buf[10];

Oder double buf[];, aber dann unbedingt ArrayResize(buf,10);

 
Artyom Trishkin:

Entweder double buf[10];

Oder double buf[];, aber dann muss ich ArrayResize(buf,10) ausführen;

Ich danke Ihnen.

Darf ich noch etwas erklären?

D.h., wenn ich ein Array initialisiere und es dann in der Schleife fülle, wächst seine Größe mit jeder Iteration, und ich muss seine Größe neu definieren? Ich dachte, dies geschieht automatisch, egal wie viele Elemente ich hinzufüge.

Wenn ich sie sofort mit einer bestimmten Anzahl von Elementen fülle, muss ich dieses Verfahren nicht durchführen.

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   int closed1=CopyClose("EURUSD",NULL,0,3,buf);
  
  }
 
ivanivan_11:

Ich danke Ihnen.

Kann ich das noch deutlicher machen?

D.h., wenn ich ein Array initialisiere und es dann in der Schleife fülle, wächst seine Größe mit jeder Iteration, und ich muss seine Größe neu definieren? Ich dachte, das geschieht automatisch, egal wie viele Elemente ich hinzufüge.

und wenn ich sie sofort mit einer bestimmten Anzahl von Elementen fülle, muss ich ein solches Verfahren nicht durchführen.

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   int closed1=CopyClose("EURUSD",NULL,0,3,buf);
  
  }

Die Funktion CopyXXXX() setzt automatisch die Größe des übergebenen Arrays außer Kraft.

Wenn Sie das Array selbst ausfüllen, wenn es dynamisch ist, muss der Programmierer dafür sorgen, dass es die richtige Größe hat.

Wenn Sie ein Array deklarieren, können Sie es zu

  • ein dynamisches Array, in diesem Fall müssen Sie die Größe neu definieren.
  • nicht-dynamisch: buff[5] - in diesem Fall müssen Sie ihn mit den richtigen Werten initialisieren
  • nicht dynamisch: buff[]={10,20,30,40,50}; - in diesem Fall wird er bei der Deklaration mit Werten initialisiert
 
Artyom Trishkin:

Die Funktion CopyXXXX() setzt automatisch die Größe des übergebenen Arrays außer Kraft.

Wenn Sie das Array selbst füllen und es dynamisch ist, muss der Programmierer dafür sorgen, dass es die richtige Größe hat.

Wenn Sie ein Array deklarieren, können Sie es zu

  • ein dynamisches Array, in diesem Fall müssen Sie die Größe neu definieren.
  • nicht-dynamisch: buff[5] - in diesem Fall müssen Sie ihn mit den richtigen Werten initialisieren
  • nicht-dynamisch: buff[]={10,20,30,40,50}; - in diesem Fall wird er mit den von Ihnen angegebenen Werten initialisiert
danke für die Klarstellung
 
Wer weiß schon, was die Zahlen im Laufdiagramm bei der genetischen Optimierung bedeuten? Es gibt zwei Zahlen, zum Beispiel 0,637 oder 7,27. Und wie man den richtigen Lauf auswählt. Ich interessiere mich zum Beispiel für die Laufnummer 5381. Wie wählt man sie aus?
 
Wer weiß, was das Vorzeichen zwischen den Klammern bedeutet?GHPR=(BalanceClose/BalanceOpen)^(1/N)
 
Roma Ivanov:
Wer weiß, was das Vorzeichen zwischen den Klammern bedeutet?GHPR=(BalanceClose/BalanceOpen)^(1/N)
Bitweise exklusive ODER-Verknüpfung
 

Wirklich? Wirklich?

Ich habe immer gedacht, dass(^) eine Potenzierung ist.

 
Roma Ivanov:
Wer weiß, was das Vorzeichen zwischen den Klammern bedeutet?GHPR=(BalanceClose/BalanceOpen)^(1/N)
Umwandlung des Abschlusses.
Grund der Beschwerde: