Erreurs, bugs, questions - page 434

 

komposter
Vous avez raison. J'ai fait une erreur.
Je vous remercie de votre réponse.

 
Silent:

Manuel de référence MQL5 - Bibliothèque standard - Classes pour l'organisation des données - CArrayObj (sur le site web et dans l'aide) :

2. Le mécanisme de gestion de la mémoire est désactivé.

Dans ce cas, CArrayObj n'est pas responsable de la libération de la mémoire.

C'est corrigé, merci.
 

Documentation. Section des variables statiques.

"...Les variables statiques existent dès l'exécution du programme et sont initialisées une fois avant d'appeler la fonction spécialisée OnInit().... "

Vérification du code de l'Expert Advisor :

void OnInit() {
  Print("OnInit() begin!");

  static bool init = true;
  if (init) {
    Print("Static initialized!");
    init = false;
  } 

  Print("OnInit() end!");
}

"Placer" l'EA sur le graphique :

2011.06.27 20:10:56     Тест (EURUSD,H1)        OnInit() begin!
2011.06.27 20:10:56     Тест (EURUSD,H1)        Static initialized!
2011.06.27 20:10:56     Тест (EURUSD,H1)        OnInit() end!

Sans supprimer l'EA du graphique, nous changeons la période du graphique :

2011.06.27 20:11:00     Тест (EURUSD,M30)       OnInit() begin!
2011.06.27 20:11:00     Тест (EURUSD,M30)       OnInit() end!

C'est censé fonctionner comme ça ?

En fait, j'ai interprété l'information de la documentation comme une initialisation forcée des variables statiques à tout appel de la fonction OnInit(), qu'elle soit causée par une recompilation ou un changement de symbole ou autre...

Il s'avère que je me suis trompé. Veuillez m'éclairer : quelles sont les exceptions à cette règle ?

 

Lorsque les paramètres d'entrée sont modifiés, c'est le même "gâchis".

Cependant, lorsque le compte est modifié, il est traité correctement - les variables statiques sont réinitialisées.

Je me demande comment changer le symbole du graphique sans supprimer l'expert(REASON_CHARTCHANGE) ?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - Документация по MQL5
 
voix_kas:

Documentation. Section des variables statiques.

"...Les variables statiques existent dès l'exécution du programme et sont initialisées une fois avant d'appeler la fonction spécialisée OnInit().... "

Vérification du code de l'Expert Advisor :

"Placer" l'EA sur le graphique :

Sans supprimer l'EA du graphique, nous changeons la période du graphique :

C'est censé fonctionner comme ça ?

Oui, ça devrait fonctionner.

Le programme (son code) a déjà été chargé une fois et n'effectue qu'une réinitialisation à chaud (Deinit/Init sans déchargement du code). Dans ce cas, c'est au développeur de s'assurer que l'environnement est initialisé correctement.

 
Renat:

Oui, ça devrait fonctionner comme ça.

Le programme (son code) est déjà chargé une fois et ne fait qu'une réinitialisation à chaud (Deinit/Init sans déchargement du code). Dans ce cas, le développeur doit veiller à l'initialisation correcte de l'environnement.

Tout d'abord, votre commentaire contredit clairement la définition de la documentation : initialiser une fois avant d'appeler OnInit(). Dans ce cas, vous devez clairement spécifier la définition dans la documentation : "...initialiser une fois avant d'appeler OnInit(). premièrement appeler OnInit()".
Deuxièmement, votre commentaire contredit clairement le cas du changement de compte, dans lequel MT, évidemment, met fin de force au Conseiller Expert et le restaure à nouveau.

La question fondamentale de savoir si les variables statiques doivent être réinitialisées de force à chaque appel à OnInit() (et pas seulement au premier) peut-elle être soumise à l'examen et au vote ?

 

En général, c'est drôle comme les choses fonctionnent.
À première vue, je pensais que la fonction OnDenit était une sorte de destructeur, et OnInit - le constructeur de l'Expert Advisor.
En fait, il s'avère que OnInit est un événement multiple (dans la durée de vie de l'expert). Ensuite, il n'est pas clair, pourquoi avons-nous besoin de générer explicitement l'événement OnDenit si nous savons que l'EA ne termine pas son opération (par exemple, en cas de changement de période graphique) ?

Et une autre question.
La raison de la désinitialisation de REASON_CHARTCHANGE est que le symbole ou la période d'un graphique a été modifié.
Veuillez expliquer comment on peut changer le symbole d'un graphique sans supprimer l'EA qui s'y trouve ?

 
voix_kas:

Et une autre question.
Motif de la désinitialisation REASON_CHARTCHANGE - Le symbole ou la période du graphique a été modifié.
Veuillez expliquer comment on peut changer le symbole d'un graphique sans supprimer l'EA qui s'y trouve ?

ChartSetSymbolPeriod()
 
voix_kas:

En fait, c'est drôle.
Par intuition, j'ai pensé que la fonction OnDenit était une sorte de destructeur et que la fonction OnInit était le constructeur de l'Expert Advisor.
En fait, il semble que OnInit soit un événement multiple (dans la durée de vie d'un Expert Advisor). Ensuite, il n'est pas clair, pourquoi avons-nous besoin de générer explicitement l'événement OnDenit si nous savons que l'EA ne termine pas son opération (par exemple, en cas de changement de période graphique) ?

Et une autre question.
La raison de la désinitialisation de REASON_CHARTCHANGE - Le symbole ou la période d'un graphique a été modifié.
Veuillez expliquer comment on peut changer le symbole d'un graphique sans supprimer l'EA qui s'y trouve ?

De la même manière que tout était appelé dans MT4. Et on ne sait pas si l'opération EA est terminée ou non (à cette fin, les paramètres sont abandonnés dans OnDeinit, bien que la raison d'un éventuel déclenchement de OnInit puisse aussi être facilement trouvée).

2. Tout est très simple, dans les paramètres du terminal, autorisez le conseiller expert à négocier lorsque le symbole et la période changent.

Sélectionnez ensuite un autre symbole dans l'aperçu du marché et "déposez"-le sur le graphique avec votre souris.

L'EA en tout cas, avec une initialisation normale après le changement de symbole/période "ne sera pas supprimé" (il "redémarrera à chaud" comme Renat l'a dit ci-dessous). Si nous examinons la situation à un niveau simple, le conseiller expert sera autorisé à négocier sous certains paramètres du terminal.

Yedelkin:
ChartSetSymbolPeriod()
Une autre option, mais programmatique. :)
 
voix_kas:

Tout d'abord, votre commentaire contredit clairement la définition dans la documentation : ils sont initialisés une fois avant l'appel OnInit(). Dans ce cas, vous devez clairement spécifier la définition dans la documentation : "...initialiser une fois avant d'appeler OnInit(). premièrement Appel OnInit()".

Oui, cela devrait être défini plus précisément dans la documentation.


Deuxièmement, votre commentaire contredit clairement le cas du changement de compte, dans lequel MT met évidemment fin de force à l'EA et le restaure à nouveau.

Oui, lorsque le compte est modifié, le conseiller expert se décharge évidemment de la mémoire et effectue un redémarrage à froid. Nous l'avons fait exprès.


Pouvons-nous introduire/voter une question fondamentale sur la nécessité d'une réinitialisation forcée des variables statiques à chaque appel (et pas seulement au premier) de OnInit() ?

Malheureusement, non. Ce problème ne peut être résolu qu'en redémarrant à froid le conseiller expert.
Raison: