Erreurs, bugs, questions - page 2616

 
fxsaber:

J'ai besoin qu'un EA s'exécutant sur l'agent soit en mesure d'obtenir l'identifiant du terminal à partir duquel il a été envoyé pour s'exécuter dans l'agent.

Je ne peux pas me prononcer sur les agents. Je n'ai pas vérifié, mais l'identifiant du terminal peut être récupéré via le PID, comme prévu :

#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

J'ai vérifié le PID dans le gestionnaire des tâches et c'est le même.


 
Igor Makanu:

Je ne peux pas me prononcer sur les agents. Je n'ai pas vérifié, mais l'identifiant du terminal, comme je le supposais, peut être obtenu via le PID :

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

Vérifié PID dans le gestionnaire de tâches correspond

Ce code est bon pour le Service, mais pas pour l'Expert Advisor sur Agent.

 
Igor Makanu:

Je ne peux pas me prononcer sur les agents. Je n'ai pas vérifié, mais l'identifiant du terminal, comme je le supposais, peut être obtenu via le PID :

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

J'ai vérifié le PID dans le gestionnaire des tâches et c'est le même.

J'airésolu le problème, merci.

 
Pouvez-vous me dire si dans metatrader5 dans le dossier MQL5/logs les logs des 7 derniers jours sont sauvegardés. Est-ce que cela a été modifié quelque part dans les paramètres ou est-ce un bug du terminal ?
 

Voici deux suggestions.

1- Faites une option (bouton) pour arrêter l'optimisation et passer à l'optimisation avant.

C'est-à-dire que c'était censé être une calculatrice rapide. Mais ça compte et ça compte. Et je suis intéressé par l'avant aussi, je dois attendre.

Parfois, j'ai besoin de compter un peu plus longtemps, et parfois j'ai besoin d'être bref.

J'ai besoin de 2 boutons - prolonger l'optimisation et arrêter l'optimisation, avec une transition vers l'avant.

2- Les barres d'outils ont à nouveau glissé sur 2 niveaux ! Ma fille était petite, elle a dit une fois "glisse et glisse - glisse !"...)

Ici aussi, les panneaux n'arrêtent pas de glisser dans et hors de la 2ème rangée. J'en ai déjà assez de les déplacer vers l'arrière (dans la même rangée). Réparez-la ! Combien d'espace est gaspillé !

 

Veuillez vérifier par vous-même le bug suivant. L'application comporte un indicateur spécial minimaliste dont la seule tâche est de lire l'état de la touche "capslock". Il est affiché dans le journal et dans le commentaire.

La séquence d'actions est la suivante.

  1. Compiler l'indicateur, le placer sur le graphique et s'assurer que 0 ("capslock" n'est pas activé) est imprimé.
  2. Passez en mode ME, activez CapsLock et recompilez. Retour au terminal. Vérifiez les journaux pour vous assurer que l'ancien indicateur est déchargé et que le nouveau est chargé. Cependant, l'état "CapsLock" est toujours renvoyé à 0.
  3. Si nous retirons l'indicateur du graphique et le chargeons à nouveau, le capslock est reconnu normalement - il affiche 1.

Quel est le miracle ? Lors du redémarrage par compilation, certaines variables d'environnement ne sont pas nettoyées ou autre chose ?

Dossiers :
CapsLock.mq5  1 kb
 
Stanislav Korotky:

Veuillez vérifier par vous-même le bug suivant. L'application comporte un indicateur spécial minimaliste dont la seule tâche est de lire l'état de la touche "capslock". Il est affiché dans le journal et dans le commentaire.

La séquence d'actions est la suivante.

  1. Compiler l'indicateur, le placer sur le graphique et s'assurer que 0 ("capslock" n'est pas activé) est imprimé.
  2. Passez en mode ME, activez CapsLock et recompilez. Retour au terminal. Vérifiez les journaux pour vous assurer que l'ancien indicateur est déchargé et que le nouveau est chargé. Cependant, l'état "CapsLock" est toujours renvoyé à 0.
  3. Si nous retirons l'indicateur du graphique et le chargeons à nouveau, le capslock est reconnu normalement - il affiche 1.

Quel est le miracle ? Lors du redémarrage par compilation, certaines variables d'environnement ne sont pas nettoyées ou autre chose ?

Et si oui ?

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

Que pensez-vous de ça ?

Qu'est-ce que ça a à voir avec ça ? Je ne crée pas un indicateur à partir du code MQL. Il s'articule sur le graphique manuellement. J'en ai besoin pour qu'au cours du processus de développement, lorsque la recompilation des programmes est fréquente, ceux-ci ne perdent pas leur fonctionnalité en raison d'erreurs liées au contexte/environnement système enregistré. Actuellement, après avoir recompilé, je dois désinstaller et réinstaller un inducteur pour qu'il détecte l'état actuel du clavier.

 
Stanislav Korotky:

Lors du redémarrage de la compilation, certaines variables d'environnement ne sont-elles pas effacées ou quelque chose comme ça ?

Oui, c'est un bug. Indicateur ou EA - cela ne fait aucune différence.

 
Stanislav Korotky:

Veuillez vérifier par vous-même le bug suivant. L'application comporte un indicateur spécial minimaliste dont la seule tâche est de lire l'état de la touche "capslock". Il est affiché dans le journal et dans le commentaire.

La séquence d'actions est la suivante.

  1. Compiler l'indicateur, le placer sur le graphique et s'assurer que 0 ("capslock" n'est pas activé) est imprimé.
  2. Passez en mode ME, activez CapsLock et recompilez. Retour au terminal. Vérifiez les journaux pour vous assurer que l'ancien indicateur est déchargé et que le nouveau est chargé. Cependant, l'état "CapsLock" est toujours renvoyé à 0.
  3. Si nous retirons l'indicateur du graphique et le chargeons à nouveau, le capslock est reconnu normalement - il affiche 1.

Quel est le miracle ? Lors du redémarrage par compilation, certaines variables d'environnement ne sont pas nettoyées ou quoi d'autre ?

L'interrogation des états clés est une opération spécifique.

L'état réel de la touche n'est donné que pour la fenêtre active. Ceci est fait exprès pour que la fenêtre inactive ne soit pas perturbée lors du traitement de OnChartEvent.