Caractéristiques du langage mql5, subtilités et techniques - page 225
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Pouvez-vous nous en dire plus à ce sujet ?
J'ai eu le temps de vérifier : oui, l'astuce a échoué, ChartID()=12345 pour le visuel et le non-visuel...(tel un ChartID constant du testeur).
Mais ChartGetInteger(ChartID(),CHART_WIDTH_IN_PIXELS) donne honnêtement -1 s'il n'y a pas d'écran. Vous pouvez l'utiliser pour déterminer la physique - s'il y a un endroit pour sortir quelque chose ou non. Parce qu'il y a beaucoup de drapeaux, et que nous ne savons pas du tout ce qu'il y a sur le VPS.
Une autre nuance soudaine de MQL - les méthodes virtuelles ne sont pas appelées à partir des constructeurs.
dans le code
on ne peut pas faire comme ça :-)) OnAttach de la classe mère sera appelée depuis le constructeur ; et pendant l'accès normal - de la classe enfant.
Vous ne pouvez pas lecomprendre, vous devez le mémoriser:-)
Autre nuance soudaine de MQL : les méthodes virtuelles ne sont pas appelées à partir des constructeurs.
dans le code
on ne peut pas faire comme ça :-)) OnAttach de la classe mère sera appelé à partir du constructeur ; et pendant l'accès normal - de la classe enfant.
Vous ne pouvez pas lecomprendre, vous devez le mémoriser:-)
Pourquoi est-ce impossible à comprendre ? L'initialisation d'un pointeur sur une méthode de la table des méthodes virtuelles se fait dans le constructeur. Le constructeur de la classe mère est appelé en premier, puis le constructeur du successeur. Par conséquent, lorsque le corps du constructeur de la classe parente est exécuté, dans la table des méthodes virtuelles, le pointeur pointe vers l'adresse de la méthode de la classe de base.
PS. Ceci est pour l'éternel cholivar sur la question de savoir si vous devriez apprendre le C++. Si vous l'étudiez, en allant à l'essentiel et non en bachotant, de telles choses deviennent évidentes).
Pourquoi est-ce impossible à comprendre ? L'initialisation d'un pointeur sur une méthode de la table des méthodes virtuelles a lieu dans le constructeur. Le constructeur de la classe mère est appelé en premier, puis celui de la classe successeur. Par conséquent, lorsque le corps du constructeur de la classe parente est exécuté, le pointeur pointe sur l'adresse de la méthode de la classe de base dans la table des méthodes virtuelles.
PS. Ceci est pour l'éternel cholivar sur la question de savoir si vous devriez apprendre le C++. Si vous l'étudiez, en creusant l'essence des choses et non en bachotant, de telles choses deviennent évidentes).
Après les scripts, où tout est possible, il est un peu surprenant qu'"un constructeur ne puisse pas être virtuel" :-))
après les scripts, où tout est possible, il est un peu surprenant qu'"un constructeur ne puisse pas être virtuel" :-)
Pour votre "problème", il existe une solution : https://habr.com/ru/post/64369/.
PS. Ce n'est pas exactement la même chose, bien sûr, mais c'est une piste de réflexion générale
après les scripts, où tout est possible, il est un peu surprenant que "un constructeur ne puisse pas être virtuel" :-)
inattendu ?
Imaginez que HiLow::OnAttach soit appelé. S'il y avait de nouveaux champs dans HiLow et que OnAttach les lisait, il y aurait "utilisation de variables non initialisées" (parce que le constructeur de HiLow n'a pas encore commencé à s'exécuter).
POSITION_TIME_UPDATE n'est pertinent que dans la modification du lot d'une position. Par exemple, la clôture partielle d'une position sur tout type de compte ou une recharge sur la compensation.
Les modifications des niveaux SL/TP n'affectent pas POSITION_TIME_UPDATE.
En d'autres termes, POSITION_TIME_UPDATE n'est affecté que par les modifications reflétées dans l'historique des transactions. Les niveaux SL/TP ne font pas partie de ces modifications et ne les affectent donc pas.
Oui, en effet, c'est le cas sur un compte réel.
Mais après avoir construit l'Expert Advisor, je l'ai essayé dans le testeur, et il s'avère que dans le testeur, les modifications des niveaux SL/TP affectent POSITION_TIME_UPDATE.
Voici un extrait des journaux.
Ici, j'ai surligné en jaune l'heure d'ouverture de la position, puis (au prochain tick) en rouge l'heure de modification (placement) du SL et du TP. Je vérifie ensuite les heures POSITION_TIME et POSITION_TIME_UPDATE à l'aide de l'impression -elles sont différentes.
Lorsque la modification du SL et du TP se fait dans la même seconde, les temps POSITION_TIME et POSITION_TIME_UPDATE sont bien sûr les mêmes.
Merci pour l'information !
Le champ ORDER_TIME_SETUP_MSC est modifié lorsque les ordres sont partiellement exécutés.
Par conséquent, DEAL_TIME_MSC peut être inférieur à ORDER_TIME_SETUP_MSC de son ordre.
Exemple.