Fehler, Irrtümer, Fragen - Seite 2616

 
Igor Makanu:

Verstehe, d.h. Sie lösen das ewige Problem des Datenaustauschs zwischen Terminals

Nein. Sie müssen Daten von dem Tester empfangen, von dem aus der Expert Advisor ausgeführt wird. Ich weiß, wie man das in 90 % der Fälle macht.

 
fxsaber:

Ich benötige einen EA, der auf dem Agenten läuft, um das Terminal-Handle zu erhalten, von dem aus er zur Ausführung im Agenten gesendet wurde.

Zu den Agenten kann ich nichts sagen. Ich habe es nicht überprüft, aber das Terminal-Handle kann wie erwartet über die PID abgerufen werden:

#define    READ_CONTROL   0x00020000
#define    bInheritHandle true

#include <WinAPI\processthreadsapi.mqh>
int OnInit()
  {
   uint process_id = GetCurrentProcessId();
   Print("process_id = ",process_id);
   HANDLE handle = OpenProcess(READ_CONTROL,bInheritHandle,process_id);	// https://docs.microsoft.com/ru-ru/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess?redirectedfrom=MSDN
   Print("handle = ",handle);
   return(INIT_SUCCEEDED);
  }

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

Ich habe die PID im Task-Manager überprüft und sie ist dieselbe


 
Igor Makanu:

Zu den Agenten kann ich nichts sagen. Ich habe es nicht überprüft, aber das Terminal-Handle kann, wie ich annahm, über die PID ermittelt werden:

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

Überprüfte PID im Task-Manager passt

Dieser Code ist gut für Service, aber nicht für Expert Advisor auf Agent.

 
Igor Makanu:

Zu den Agenten kann ich nichts sagen. Ich habe es nicht überprüft, aber das Terminal-Handle kann, wie ich annahm, über die PID ermittelt werden:

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

Ich habe die PID im Task-Manager überprüft und sie ist dieselbe

DasProblem ist gelöst, danke.

 
Können Sie mir bitte sagen, in metatrader5 in MQL5/logs Ordner die Protokolle für die letzten 7 Tage gespeichert werden. Wurde dies irgendwo in den Einstellungen geändert oder handelt es sich um einen Terminalfehler?
 

Hier sind 2 Vorschläge.

1- Legen Sie eine Option (Schaltfläche) fest, um die Optimierung zu beenden und zur Vorwärtsoptimierung zu wechseln.

Das heißt, es sollte ein schneller Taschenrechner sein. Aber es zählt und zählt. Und ich bin auch an Forward interessiert, ich muss warten.

Manchmal muss ich etwas länger zählen, und manchmal muss ich es kurz machen.

Ich brauche 2 Tasten - Optimierung verlängern und Optimierung stoppen, mit einem Schalter zum Weiterschalten.

2- Die Symbolleisten sind wieder auf 2 Ebenen heruntergerutscht! Als meine Tochter klein war, sagte sie einmal: "Rutschen und rutschen - rutschen!"...)

Auch hier schieben sich die Paneele immer wieder in die zweite Reihe und wieder heraus. Ich habe es schon satt, sie rückwärts zu verschieben (in dieselbe Reihe). Reparieren Sie es endlich! Wie viel Platz wird hier vergeudet!

 

Bitte überprüfen Sie den folgenden Fehler selbst. Die Anwendung verfügt über eine spezielle minimalistische Anzeige, deren einzige Aufgabe darin besteht, den Status der "Capslock"-Taste abzulesen. Sie wird im Protokoll und im Kommentar angezeigt.

Die Abfolge der Maßnahmen ist wie folgt.

  1. Kompilieren Sie den Indikator, platzieren Sie ihn auf dem Chart und stellen Sie sicher, dass 0 ("capslock" ist nicht aktiviert) gedruckt wird.
  2. Wechseln Sie zu ME, aktivieren Sie CapsLock und kompilieren Sie neu. Kehren Sie zum Terminal zurück. Überprüfen Sie die Protokolle, um sicherzustellen, dass der alte Indikator entladen und der neue geladen ist. Der "CapsLock"-Status wird jedoch weiterhin als 0 zurückgegeben.
  3. Wenn wir den Indikator aus dem Chart entfernen und erneut hochladen, wird das Capslock normal erkannt - es wird 1 angezeigt.

Was ist das Wunder? Beim Neustart durch Kompilierung werden einige Umgebungsvariablen nicht bereinigt oder etwas anderes?

Dateien:
CapsLock.mq5  1 kb
 
Stanislav Korotky:

Bitte überprüfen Sie den folgenden Fehler selbst. Die Anwendung verfügt über eine spezielle minimalistische Anzeige, deren einzige Aufgabe darin besteht, den Status der "Capslock"-Taste abzulesen. Sie wird im Protokoll und im Kommentar angezeigt.

Die Reihenfolge der Aktionen ist wie folgt.

  1. Kompilieren Sie den Indikator, platzieren Sie ihn auf dem Chart und stellen Sie sicher, dass 0 ("capslock" ist nicht aktiviert) gedruckt wird.
  2. Wechseln Sie zu ME, aktivieren Sie CapsLock und kompilieren Sie neu. Kehren Sie zum Terminal zurück. Überprüfen Sie die Protokolle, um sicherzustellen, dass der alte Indikator entladen und der neue geladen ist. Der CapsLock-Status wird jedoch weiterhin als 0 zurückgegeben.
  3. Wenn wir den Indikator aus dem Diagramm entfernen und erneut hochladen, wird das Capslock normal erkannt - es wird 1 angezeigt.

Was ist das Wunder? Beim Neustart durch Kompilierung werden einige Umgebungsvariablen nicht bereinigt oder etwas anderes?

Und wenn ja?

void OnDeinit(const int reason)
{
  if (ind != INVALID_HANDLE)
  {
    IndicatorRelease(ind);
  }
}
 
Vitaly Muzichenko:

Wie wäre es damit?

Was hat das mit der Sache zu tun? Ich erstelle keinen Indikator aus MQL-Code. Sie ist manuell an die Karte gekoppelt. Ich brauche es, damit im Entwicklungsprozess, wenn Programme häufig neu kompiliert werden, sie ihre Funktionalität nicht aufgrund von Fehlern mit gespeichertem Kontext/Systemumgebung verlieren. Im Moment muss ich nach der Neukompilierung einen Induktor deinstallieren und neu installieren, damit er den aktuellen Zustand der Tastatur erkennt.

 
Stanislav Korotky:

Werden beim Neustart nach dem Kompilieren einige Umgebungsvariablen nicht gelöscht oder ähnliches?

Ja, es ist ein Fehler. Indikator oder EA - es macht keinen Unterschied.