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

 
Aleksandr Slavskii #:

Wenn es im Expert Advisor vorgeschrieben ist, Aufträge zu löschen und Positionen zu schließen, wenn der Expert Advisor gelöscht wird,

dann wird alles gelöscht und geschlossen

Ein kleiner Zusatz: wenn es 2,5 Sekunden dauert.

Выполнение функции OnDeinit() ограничивается 2.5 секундами. Если за это время функция не закончила свою работу, то ее выполнение завершается принудительно.
 

Ich weiß nicht, wie ich das machen soll.

Wenn das Mausrad-Scroll-Ereignis eintritt, wird der Code ausgeführt.

Das Mausrad kann für mehrere Klicks auf einmal gescrollt werden, und wir werden nicht ein Ereignis mit dparam = Anzahl der Klicks, sondern mehrere Ereignisse mit dparam = +/-120 erhalten.

Der Code wird einige Zeit lang ausgeführt, was viel länger ist als die Zeit zwischen den Klicks beim Scrollen des Mausrads.

Als Ergebnis stellt sich heraus, dass niemand mehr mit dem Mausrad scrollt und das Programm noch einige Zeit weiter rechnet.

//+------------------------------------------------------------------+
void OnInit()
  {
   ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, 0, true);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;

   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      //--- какой то код
      delta += dparam / 120;
      Sleep(1000);
      //---
      Print(delta);
     }
  }
//+------------------------------------------------------------------+
15:12:22.820    test (EURUSD,H1)        0.0
15:12:23.821    test (EURUSD,H1)        1.0
15:12:24.811    test (EURUSD,H1)        2.0
15:12:25.823    test (EURUSD,H1)        3.0
15:12:26.817    test (EURUSD,H1)        4.0
15:12:27.814    test (EURUSD,H1)        5.0
Das Mausrad wurde um 15:12:22.820 Uhr gedreht und dann wurde das Programm 5 weitere Male ausgeführt, also 5 ganze Sekunden lang.


Frage: Wie kann man den Programmcode einmal statt mehrmals ausführen?

Das heißt, das Rad hat 5 Klicks lang gescrollt, delta = dparam / 120 * 5.

 
Aleksandr Slavskii #:

Ich weiß nicht, wie ich das machen soll.

Wenn das Mausrad-Scroll-Ereignis eintritt, wird der Code ausgeführt.

Das Mausrad kann für mehrere Klicks auf einmal gescrollt werden, und wir werden nicht ein Ereignis mit dparam = Anzahl der Klicks, sondern mehrere Ereignisse mit dparam = +/-120 erhalten.

Der Code wird für eine gewisse Zeit ausgeführt, die viel länger ist als die Zeit zwischen den Klicks beim Scrollen des Mausrads.

Als Ergebnis stellt sich heraus, dass niemand mehr mit dem Mausrad scrollt, und das Programm rechnet noch einige Zeit weiter.

Das Mausrad wurde um 15:12:22.820 Uhr bewegt, und dann wurde das Programm 5 weitere Male ausgeführt, also 5 ganze Sekunden lang.


Frage: Wie kann man den Programmcode einmal statt mehrmals ausführen?

Das heißt, das Rad hat 5 Klicks lang gescrollt, delta = dparam / 120 * 5.

Versuchen Sie dies

//+------------------------------------------------------------------+
void OnInit()
  {
   ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, 0, true);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;
   bool flag = true;
   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      //--- какой то код
      delta += dparam / 120;
      Sleep(1000);
      //---
      if(flag)
       {
        Print(delta);
        flag = false;
       }
     }
  }
//+------------------------------------------------------------------+

Ich habe es nicht überprüft, wenn überhaupt, ist es nicht meine Schuld...)))))) Ich muss etwas mit dem Flag machen... und vielleicht muss ich den Code in eine benutzerdefinierte Funktion einbauen und dort mit dem Flag herumspielen.

 
Herzlichen Dank!
 

Am 03. Juni habe ich mein Skript für MT5 veröffentlicht(https://www.mql5.com/ru/code/44732).... Es befindet sich immer noch im Status "wird vom Moderator geprüft". Wer weiß, wie lange man auf die Prüfung warten muss?

Скачать бесплатно скрипт 'Quick Change MA (method, period)' от 'NotBuffett' для MetaTrader 5 в MQL5 Code Base
  • www.mql5.com
Скачать бесплатно скрипт 'Quick Change MA (method, period)' от 'NotBuffett' для MetaTrader 5 в MQL5 Code Base
 
Alexey Viktorov #:

Versuchen Sie dies

Ich habe es nicht überprüft, wenn es nicht mein Fehler ist... )))))) Ich muss irgendwie mit dem Flag herumspielen... und vielleicht muss ich den Code in eine benutzerdefinierte Funktion einfügen und dort mit dem Flag herumspielen.

Das Problem ist, dass benutzerdefinierte Funktionen nur innerhalb von Ereignisfunktionen ausgeführt werden, und ich habe nur zwei solcher Funktionen OnInit und OnChartEvent in meinem EA.

Im Allgemeinen habe ich es geschafft, es zu tun, wenn auch nicht ganz Ass, aber immer noch besser als es war.

//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;
   static ulong timeWheel = 0;
   static bool mouse_wheel = false;

   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      delta += dparam / 120;
      mouse_wheel = true;
      timeWheel = GetMicrosecondCount();
     }

   if(mouse_wheel && GetMicrosecondCount() - timeWheel > 0)
     {
      Print(delta);
      //--- какой то код
      Sleep(1000);
      //---
      delta = 0;
      mouse_wheel = false;
     }
  }
//+------------------------------------------------------------------+
23:48:28.853    test (EURUSD,H1)        1.0
23:48:29.857    test (EURUSD,H1)        1.0
23:48:30.856    test (EURUSD,H1)        4.0
23:48:31.881    test (EURUSD,H1)        2.0
23:48:32.880    test (EURUSD,H1)        4.0
23:48:33.887    test (EURUSD,H1)        11.0
23:48:34.914    test (EURUSD,H1)        15.0
23:48:35.926    test (EURUSD,H1)        7.0
23:48:36.936    test (EURUSD,H1)        9.0
23:48:46.477    test (EURUSD,H1)        6.0
23:48:47.479    test (EURUSD,H1)        -1.0
 
Aleksandr Slavskii #:

Das Problem ist, dass benutzerdefinierte Funktionen nur innerhalb von Ereignisfunktionen ausgeführt werden, und ich habe nur zwei solcher Funktionen OnInit und OnChartEvent in meinem EA.

Im Allgemeinen gelang es mir, es zu tun, obwohl nicht ganz eine gute Idee, aber immer noch besser als es war.

Sie können auch ohne Probleme benutzerdefinierte Funktionen aus OnChartEvent aufrufen.

Das Flag wird auf der globalen Ebene deklariert. Das Einfügen von OnTick nur zum Zurücksetzen der Flagge ist kein Problem und verzögert die Codeausführung nicht.

Wenn die Flagge offen ist, wird eine benutzerdefinierte Funktion aufgerufen. Intern wurde das Flag geschlossen. In OnTick wird das Flag wieder geöffnet und wartet auf die nächste Ausführung der Benutzerfunktion.

Ich denke, das ist einfacher, als bei der Ausführungszeit hängen zu bleiben.

 
Alexey Viktorov #:

Sie können auch benutzerdefinierte Funktionen aus OnChartEvent aufrufen, kein Problem.

Das Flag wird auf globaler Ebene deklariert. Das Einfügen von OnTick nur zum Zurücksetzen der Flagge ist kein Problem und verzögert die Codeausführung nicht.

Wenn die Flagge offen ist, wird eine benutzerdefinierte Funktion aufgerufen. Intern wurde das Flag geschlossen. In OnTick wird das Flag wieder geöffnet und wartet auf die nächste Ausführung der Benutzerfunktion.

Ich denke, das ist einfacher, als sich an die Ausführungszeit zu binden.

Ich verstehe es nicht ganz, oder besser gesagt, ich verstehe es überhaupt nicht :)

Und wenn es keine Ticks gibt, funktioniert OnTick nicht ohne Ticks, was soll ich tun?


Eigentlich rufe ich sowieso benutzerdefinierte Funktionen von OnChartEvent auf. Es war nur ein Problem, den letzten Mausklick beim Scrollen des Rades zu verfolgen.

Die Aufgabe bestand darin, die Ausführung der benutzerdefinierten Funktion bis zu dem Moment zu verzögern, in dem das Scrollen mit dem Rad gestoppt wird, während die Anzahl der Klicks während des Scrollens gezählt wird.

Im Prinzip hat es funktioniert.

 
NotBuffett #:

Am 03. Juni habe ich mein Skript für MT5 veröffentlicht(https://www.mql5.com/ru/code/44732).... Es befindet sich immer noch im Status "wird vom Moderator geprüft". Wer weiß, wie lange man auf die Prüfung warten muss?

Ich habe den Code gerade veröffentlicht. Die Überprüfung hat weniger als eine Minute gedauert.

Wahrscheinlich haben Sie beim Veröffentlichen einen Fehler gemacht.

 
Aleksandr Slavskii #:

Ich habe den Code gerade veröffentlicht. Die Überprüfung hat weniger als eine Minute gedauert.

Wahrscheinlich haben Sie bei der Veröffentlichung einen Fehler gemacht.

Ich habe versucht, ihn erneut zu veröffentlichen... und es ist das Gleiche:

Unter "5. Test" heißt es"DerTest wurde ohne Fehler abgeschlossen" und bietet an, ihn zu veröffentlichen, aber wenn Sie auf die Schaltfläche "Veröffentlichen" klicken, erhalten Sie eine Fehlermeldung

404. Diese Seite existiert nicht

Im Unterabschnitt "Meine Codes" gibt es jetzt zwei Codes und bei beiden steht "vom Moderator geprüft".

Generell werde ich eine Frage im allgemeinen Thread stellen, vielleicht fällt es den Moderatoren noch auf.

Grund der Beschwerde: