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

 
Aleksey Mavrin:

Es gibt so etwas in MT4, ich weiß nicht, ob, wenn OnInit nach dem Wechsel des Kontos ausgelöst wird, hat die Umwelt keine Zeit, um die Kontonummer oder einen anderen Fehler zu aktualisieren hatte, beschloss ich, Timer

eine Menge Dinge gehen schief, wenn das Terminal mit dem laufenden EA neu geladen wird

imho, wenn der Code nicht für Tester ist, dann alle Initialisierung ist besser zu tun, wenn der erste Tick kommt - dann 99,9% der alles korrekt initialisiert werden

 
Igor Makanu:

eine Menge Dinge gehen schief, wenn das Terminal mit einem laufenden EA überlastet ist

imho, wenn der Code nicht für einen Tester ist, dann alle Initialisierung ist besser zu tun, wenn der erste Tick kommt - dann 99,9% der alles korrekt initialisiert werden

Ich stimme zu, aber wahrscheinlich sind es 0,1% ))

 
Igor Makanu:

eine Menge Dinge gehen schief, wenn das Terminal mit einem laufenden EA überlastet ist

imho, wenn der Code nicht für Tester ist, dann ist es besser, alles zu initialisieren, wenn der erste Tick kommt - dann 99,9% der alles korrekt initialisiert werden

es ist besser, alle Initialisierungen beim ersten Ticken vorzunehmen - dann werden 99,9% der Dinge korrekt initialisiert... Wie ist das möglich?

 
ponochka:

alle Initialisierungen werden am besten beim Eintreffen des ersten Ticks durchgeführt - dann wird zu 99,9 % alles korrekt initialisiert... Wie ist das möglich?

void OnTick()
{
   static bool first_run = true;
   if(first_run)
   {
      MyOnInit();
      first_run = false;
   }
 
Igor Makanu:

Sie können dies auf einfache Weise tun, indem Sie die "My"-Auffüllungen vermeiden

int OnInit()
  {
   ...
    account=AccountNumber();
   ...
  }

void OnTick()
{
  static bool first_run = true;
   if(first_run)
   {
     if(account==0) { // Если терминал не успел получить данные с сервера
      OnInit(); // пробуем снова всё инициализировать
      return;
     }
      first_run = false;
   }
 
Vitaly Muzichenko:

Sie können dies direkt tun, indem Sie Auffüllungen in Form von "My" vermeiden

es ist kein Polster, es ist strukturierter Code.

Ihr Beispiel ist ein Beispiel dafür, wie faul, um ein zusätzliches paar Buchstaben zu schreiben und unsystematischen Code - hier mindestens 2 mal aufgerufen werden OnInit() beim Ausführen von EA, nicht die Tatsache, dass es notwendig sein wird, oder vielmehr wird nicht brechen, was zuvor geschrieben wurde - das Niveau der Fragen, die Sie sahen, oder? )))

 
Igor Makanu:

es ist kein Pad, sondern strukturierter Code

Ihr Beispiel ist ein Beispiel dafür, wie faul, um ein zusätzliches paar Buchstaben zu schreiben und unstrukturierten Code - hier mindestens 2 mal aufgerufen werden OnInit() beim Start EA, nicht die Tatsache, dass es notwendig sein wird, oder vielmehr wird nicht brechen, was zuvor geschrieben wurde - das Niveau der Fragen, die Sie sah, nicht wahr? )))

first_run = true;

Sie müssen auch in Init bei der ersten Initialisierung überprüfen und vielleicht schon dort "Null".

Ansonsten stimme ich zu.


P.S. Ich stimme nicht zu, es wird nicht 2 Mal aufgerufen, wenn Sie es geschafft haben, sich mit dem Server zu verbinden und aktuelle Daten von ihm zu erhalten.

 
Igor Makanu:

funktioniert nicht, weil in der Dokumentation steht, dassOnTick() in Indikatoren nicht funktioniert!

 
ponochka:

funktioniert nicht, weil die Dokumentation sagt, dassOnTick() nicht in Indikatoren funktioniert!

Nun, das ist die Grenze :(

Ersetzen Sie OnTick() durch

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
Und ich gehe in die andere Filiale.
 
Vitaly Muzichenko:

Nun, das ist die Grenze :(

Ich schrieb oben, über das Niveau der Fragen ;)

Und du hast angefangen, nach der Optimierung der Initialisierung in OnTick/OnInit zu suchen - dort ist alles einfacher, du brauchst einen Schutz für den gefundenen Code, um ihn mit denselben Freunden zu teilen ))))