Schleife einrichten

 

Hallo,

Leider benötige ich erneut etwas Unterstützung.

 

Ich habe eine Formel, die aus drei Bereichen besteht, die wiederum durch if-Bedingungen bestimmt werden.

Im ersten Bereich soll eine Variable x um einen "Faktor" solange erhöht werden, bis die Bedingung für den zweiten Bereich (“d”) erfüllt ist (dort werden andere Werte verwendet). Der Ausdruck "Faktor" besteht aus einer Berechnung.

Ich denke, dies ist über eine Schleife zu erreichen, ich bin mir aber nicht sicher, ob ich die MQL-Referenz konzeptionell richtig angewandt habe oder "x" anders einzusetzen ist:

 

If(y<d)
  {
  x = a+b; // Initialisierung der Variable x mit einem Ausgangswert a+b
  while(y<d) 
    {
    x; // Variable x, die erhöht werden soll
    x + Faktor; // schrittweise Erhöhung der Variable x um “Faktor” 
    };
  Print (“Meldung1”);
  }

  else if (y>d)
  …..


Ich erhalte auch eine Fehlermeldung: ( ")" unexpected token).

Für eine Prüfung und Hinweise bin ich dankbar.

Grüße,

Jochen

 

Seufz:

  1. Welche Zeile?
  2. Gibt es eine zweite Meldung über eine offene (
  3. Um den eigenen Code zu prüfen fragt man nicht die anderen, sondern verwendet den Debugger - das geht schneller!
 
Carl Schreiber:

Seufz:

  1. Welche Zeile?
  2. Gibt es eine zweite Meldung über eine offene (
  3. Um den eigenen Code zu prüfen fragt man nicht die anderen, sondern verwendet den Debugger - das geht schneller!

Hallo Carl,

danke, trotz des verständlichen Seufzers....

1. Hinter "while (y<d)". Aber siehe 3.

2. Nein.

3. Den Debugger setze ich selbstverständlich regelmässig ein und habe es auch in diesem Fall gemacht. Es kommt aber für den Ausdruck "x+Faktor" auch die Warnung: "Expression has no effect."

Daher denke ich, dass ich den Ausdruck in der Schleife falsch angesetzt habe und muss das zuerst lösen. Daher benötige ich einen Blick von aussen, da ich es selbst nicht hinbekomme.

Selbst wenn ich den zweiten Ausdruck der while-Schleife wie folgt umgestalte ("Faktor" statt "x+Faktor") kommt die Warnung (und der Fehler):

If(y<d)
  {
  x = a+b; // Initialisierung der Variable x mit einem Ausgangswert a+b
  while(y<d) 
    {
    x; // Variable x, die erhöht werden soll
    Faktor; // schrittweise Erhöhung der Variable x um “Faktor” 
    };
  Print (“Meldung1”);
  }

  else if (y>d)
  …..

Was mache ich in der Schleife falsch ?

Danke für die Hilfe.

Jochen

 

Naja was soll hier passieren:

x;      // ???
Faktor; // ???

Stell mal den Kursor auf while und drück F1 und schau wie das geht.

 
Carl Schreiber:

Naja was soll hier passieren:

Stell mal den Kursor auf while und drück F1 und schau wie das geht.

o.k. Carl, Du hast recht, mindestens Fehler in Ausdruck1.

Ich habe das  über das Nachschlagewerk des MetaEditos zu lösen versucht -mit F1 tut sich nichts- die Online-Hilfe sollte dazu identisch sein.

Für den "Loop-Operator While" heisst es dort (ich hab den ersten Ausdruck mit x angepasst):

Beispiel:


while(k<n && !IsStopped()) 
  { 
   x=x+Faktor; 
   k++; 
  }
 

EDIT: Bedingung, während der erhöht werden soll: y<d. y ist der Kurs. k++ bedeutet in dem Beispiel m.E. etwas anderes, denn es wird ja bereits Tick für Tick geprüft, ob y unter der Bedingung d liegt. Hier liegt mein Verständnisproblem, was ich mit der Hilfe nicht lösen kann..


 Für meine Formel heisst das:

If(y<d)
  {
  while(y<d && !ISStopped()) 
    {
    x = x + Faktor; // Variable x, die erhöht werden soll
    y++;
    };
  Print (“Meldung1”);
  }

  else if (y>d)


Leider finde ich weitere Lösungen dafür nicht in der Hilfe, verstehe diese nicht oder kann den Transfer nicht bringen....

- Den Startwert von x hatte ich mit x = a+b definiert (s.o.); mir ist unklar, wo ich ihn hier unterbringen muss.

- y++ ist sicher falsch gedacht.  Daher die Meldung: "I-value required". Was muss ich also in meinem Fall für "k" nehmen ?

Vielleicht kannst Du mir doch bitte den entscheidenden Hinweis geben - ich versuche ja, selbst eine Lösung zu finden, kann es aber nicht. Und die Lösung liegt sicher sehr nahe....

Danke !

Jochen

 

Ich würde Dir raten, such Dir unter den Artikeln oder der CodeBase etwas, was Deiner Idee nahe kommt und versuch das zu ändern.

So gehst Du von etwas aus das (höchst wahrscheinlich) funktioniert, so lernt man schneller!