Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 508
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
Est-ce plus court ? bool barup=... WindowRedraw() ; s'exécutera toujours - tiré de if
il peut aussi être plus court ... voir mon dossier
Un peu comme l'énoncé de la question est clair, n'est-ce pas. Le but est d'initialiser la même chose.
Comment allez-vous initialiser quelque chose qui n'existe pas encore ? Une fois l'objet créé, il commence à exister, et c'est à ce moment-là qu'il peut être initialisé.
Je vous l'ai dit tout de suite - faites d'un objet un constructeur paramétrique, et passez-lui les paramètres requis, qui seront utilisés pour initialiser l'objet nouvellement créé.
Vous pouvez passer des paramètres par le biais d'une structure, que vous remplissez avec les données requises (constantes pour tous ces objets) dans OnInit() du programme. Ensuite, dans OnTick(), par exemple, ou dans tout autre handler standard, vous créez vos objets, mais lors de la création, vous écrivez ce qui suit :
CMyObject object = new CMyObject(a_here_structure_with_set_parameters) ;
Ou, si les données de l'objet ne changent pas d'un programme à l'autre et ont toujours les mêmes valeurs, alors il faut les initialiser explicitement avec les paramètres requis dans le constructeur par le biais de la liste d'initialisation, comme Igor l'a dit plus haut :
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégie
Toutes les questions des débutants sur MQL4, aide et discussion sur les algorithmes et les codes
Ihor Herasko, 2018.03.28 17:31
Cela se fait dans la liste d'initialisation, qui se trouve dans le constructeur de la classe :
Comment allez-vous initialiser quelque chose qui n'existe pas encore ? Une fois l'objet créé, il commence à exister, et c'est à ce moment-là qu'il peut être initialisé.
Je vous l'ai dit tout de suite - faites d'un objet un constructeur paramétrique, et passez-lui les paramètres requis, qui seront utilisés pour initialiser l'objet nouvellement créé.
Vous pouvez passer des paramètres à travers une structure, que vous remplirez avec les données requises (constantes pour tous ces objets) dans OnInit() du programme. Ensuite, dans OnTick(), par exemple, ou dans tout autre handler standard, vous créez vos objets, mais à la création vous écrivez ce qui suit :
CMyObject object = new CMyObject(a_here_structure_with_set_parameters) ;
Oui, je vois. Merci. J'ai pensé qu'il existait une solution pour que, lorsqu'un objet est créé, il dispose immédiatement de paramètres prédéfinis sans avoir à les passer au constructeur ou autre. Par le biais d'une classe de parents ou autre.
Dans ma classe, j'ai toutes sortes de choses comme des paramètres d'indicateurs etc. comme paramètres. En général, les choses qui seront statiques et identiques. Alors pourquoi devrais-je passer ces valeurs à chaque fois que je crée un objet?
Alors ne le transmettez pas. Initialiser dans la liste d'initialisation, comme je l'ai montré. Au moment de créer une instance de la classe, le constructeur de la classe sera automatiquement appelé, ce qui initialisera tous les membres de la classe, spécifiés dans la liste d'initialisation. Placez la fonction Print dans la méthode CCandle et vous verrez comment le constructeur est appelé sans aucune référence à celui-ci.
Oui, je vois. Merci. J'ai pensé qu'il existait une solution pour que, lorsqu'un objet est créé, il ait immédiatement des paramètres prédéfinis sans avoir à les passer au constructeur ou autre. Via une classe parentale ou autre.
Encore une fois. Vous pouvez le faire sans transférer les données au constructeur.
Alors ne le transmettez pas. Initialiser dans la liste d'initialisation, comme je l'ai montré. Au moment de créer une instance de la classe, le constructeur de la classe sera automatiquement appelé, ce qui initialisera tous les membres de la classe, spécifiés dans la liste d'initialisation. Placez la fonction Print dans la méthode CCandle et vous verrez comment le constructeur est appelé sans aucune référence à celui-ci.
Je ne comprends pas, quelle différence cela fait-il de les passer par le constructeur ou par la fonction d'initialisation ?
Alors ne le transmettez pas. Initialiser dans la liste d'initialisation, comme je l'ai montré. Au moment de créer une instance de la classe, le constructeur de la classe sera automatiquement appelé, ce qui initialisera tous les membres de la classe, spécifiés dans la liste d'initialisation. Placez la fonction Print dans la méthode CCandle et voyez comment le constructeur est appelé sans aucune référence à cette fonction.
Avec quoi seront-ils initialisés ? Avec quelles valeurs ? Je ne comprends pas.
Supposons que j'ai des valeurs initiales dans les paramètres d'entrée de l'Expert Advisor. Je dois donc les passer à chaque objet de la classe. Mais pas pour les passer à chaque objet nouvellement créé.
comment se fait-il que dans ce cycle mon ordre limite ne soit supprimé que si après avoir placé un ordre limite sur la barre suivante, un autre ordre limite n'a pas été placé, c'est-à-dire qu'un ordre limite n'est supprimé que s'il est placé puis suivi de deux barres sans ordre limite.
Avec quoi seront-ils initialisés ? Avec quelles valeurs ? Pas clair
Ceux que vous écrivez dans la liste d'initialisation.
Supposons que j'ai initialisé des valeurs dans les paramètres d'entrée du conseiller expert. Donc, je dois les passer à chaque objet de cette classe. Mais pas pour les passer à chaque objet nouvellement créé.
C'est ici :
Si on l'exécute, on obtient :