L'EOP pour les écoliers. - page 17

 
Artyom Trishkin:

C'est exactement la même chose qu'avec les variables.

Et la concentration :

Quel est l'intérêt de ce pointeur si le commerce est disponible dans la fonction OnTrade?

#include <Trade\Trade.mqh>
CTrade trade;   // Объект № 1 в глобальной области программы

int OnInit()
{
 trade.SetExpertMagicNumber(123);
}

void OnTick()
{
 trade.Buy(0.1);
}
 
Alexey Viktorov:

Quel est l'intérêt de ce pointeur s'il est disponible dans la fonction OnTrade?

Aucun. Mais par là, je vous ai montré la différence entre la manière d'écrire un autre (deuxième) objet du même type, et la manière d'accéder à un seul objet par pointeur.

Il s'agissait d'un exemple simplifié pour répondre à votre question sur les différences et les préférences.

Vous savez, vous posez des questions avec des exemples trop simples, et quand on vous répond, vous posez une autre question - tout à fait raisonnable - "pourquoi ?".

Parce que vos exemples n'ont pas besoin d'être résolus avec des classes.

Il y a deux options ici - soit vous lisez et comprenez ce qu'on vous dit, soit... Ou vous résolvez vos problèmes de manière procédurale. Dans ce cas, vous n'aurez pas de questions "pour quelle raison".

Imaginez maintenant que votre classe CTrade ne se trouve pas dans la portée globale. И ?

Imaginez également que vous n'ayez pas un seul objet de ce type (comme c'est le cas dans presque tous les exemples de kodobase), mais autant de symboles que vous ajoutez/supprimez manuellement dans le programme. И ?

 
Сергей Таболин:

Dans ce cas, est-ce que

description incorrecte ?

J'ai cru comprendre que si elle est définie pour EA, tous les ordres/positions devraient avoir cette magie. ((

Pourquoi est-ce soudainement incorrect ?

Un EA peut avoir plusieurs magies et toutes sont les siennes.

Même dans un ulong-magic, vous pouvez stocker un ID d'expert commun + quelques mages + quelques ID différents, et avoir encore beaucoup de place.

 
Artyom Trishkin:

Aucun. Mais par là, je vous ai montré la différence entre la manière d'écrire un autre (deuxième) objet du même type, et la manière d'accéder à un seul objet par pointeur.

Il s'agissait d'un exemple simplifié pour répondre à votre question sur les différences et les préférences.

Vous savez, vous posez des questions avec des exemples trop simples, et quand on vous répond, vous posez une autre question - tout à fait raisonnable - "pourquoi ?".

Parce que vos exemples n'ont pas besoin d'être résolus avec des classes.

Il y a deux options ici - soit vous lisez et comprenez ce qu'on vous dit, soit... Ou vous résolvez vos problèmes de manière procédurale. Dans ce cas, vous n'aurez pas de questions "pour quelle raison".

Imaginez maintenant que votre classe CTrade ne se trouve pas dans la portée globale. И ?

Imaginez également que vous n'avez pas un seul objet de ce type (comme c'est le cas dans presque tous les exemples de kodobase), mais autant de caractères que vous ajoutez/supprimez manuellement dans le programme. И ?

Non, Artyom, je pose des questions pour comprendre, pas pour appliquer. Et quand vous proposez une solution à une idée idiote, c'est là que je demande "Pourquoi ?". Voyez-vous, si je pose la question à ma façon et qu'on me répond à tort ou à raison, je pense, alors tout ce qu'on m'a dit à ce sujet, je ne l'oublierai plus et je le ferai avec compréhension, ou avec compréhension, je ne le ferai pas. J'ai mes propres cafards...)) Je ne sais pas comment faire quelque chose sans comprendre. Je n'ai jamais résolu un problème de maths à partir d'un exemple de solution. Je ne sais pas comment. J'ai eu 5 F et un B en maths l'année où j'ai terminé la quatrième. Tout allait bien, j'ai été autorisé à passer les examens à la condition que si j'écrivais un essai avec un C, je serais autorisé à passer les examens, à corriger les F et à être autorisé à aller à GPTU. L'institut a été créé bien plus tard. C'est là que je suis tombé malade avec la programmation, mais elle n'était enseignée que superficiellement. Et il me semble qu'à l'époque, OOP venait tout juste d'être conçu.

 
Alexey Viktorov:

Non Artem, je pose des questions pour comprendre, pas pour appliquer. Et quand vous proposez une solution à une idée idiote, c'est là que je demande "Pourquoi ?". Voyez-vous, si je pose la question à ma façon et qu'on me répond à tort ou à raison, je pense, alors tout ce qu'on m'a dit à ce sujet, je ne l'oublierai plus et je le ferai avec compréhension, ou avec compréhension, je ne le ferai pas. J'ai mes propres cafards...)) Je ne sais pas comment faire quelque chose sans comprendre. Je n'ai jamais résolu un problème de maths à partir d'un exemple de solution. Je ne sais pas comment. J'ai eu 5 F et un B en maths l'année où j'ai terminé la quatrième. Tout allait bien, j'ai été autorisé à passer les examens à la condition que si j'écrivais un essai avec un C, je serais autorisé à passer les examens, à corriger les F et je serais autorisé à aller à GPTU. L'institut a été créé bien plus tard. C'est là que je suis tombé malade avec la programmation, mais elle n'était enseignée que superficiellement. Et il me semble qu'à l'époque, OOP venait tout juste d'être conçu.

Alors il est étrange que vous ayez posé ces questions en premier lieu.

Vous comprenez la différence entre les variables déclarées dans des champs d'application différents. Vous le faites. Et vous posez une question comme si c'était la première fois que vous entendiez parler dechamps de variables.

Lorsqu'on vous montre comment utiliser un pointeur sur un objet précédemment créé, vous posez une question étrange : "pourquoi, si l'objet est déjà visible ?". On ne vous a donc pas montré comment le faire, mais comment obtenir un pointeur dans cet exemple et faire référence à l'objet par le pointeur. Et ce ne sera pas deux objets différents dans des portées différentes, mais un seul.
Mais que se passe-t-il si l'objet n'est pas dans la portée globale mais dans un autre objet ? Et cet autre objet renvoie simplement un pointeur vers l'objet CTrade dont vous avez besoin. Dans ce cas, l'exemple ne donnerait pas lieu à la question " pourquoi ? ". Je ne pense pas. Mais on peut sous-entendre que votre réponse part du principe que vous comprenez la simplicité de votre exemple et que vous omettez la visibilité globale de l'objet "derrière les parenthèses".

 
Artyom Trishkin:

Pourquoi serait-elle soudainement incorrecte ?

Un expert peut avoir plusieurs magiciens et tous sont les siens.

Même dans une magie, vous pouvez stocker l'ID d'un EA commun + plusieurs magies + plusieurs ID différents et il vous reste encore beaucoup de place.

Je comprends. Lorsque vous faites une demande d'échange, vous pouvez spécifier n'importe quel magicien. Un EA peut ouvrir chaque nouvelle position avec un nouveau magicien. Je code également le symbole, le TF, etc. dans mon magicien. Tout cela est clair.

Seulement j'étais sûr queSetExpertMagicNumber est comme une solution globale. Si une demande de transaction ne spécifie pas explicitement une magie, elle prend la valeur définie viaSetExpertMagicNumber. Sinon, je n'en vois personnellement pas l'intérêt).

 
Сергей Таболин:

Je comprends. Lorsque vous faites une demande de transaction, vous pouvez spécifier n'importe quel assistant. Un EA peut ouvrir chaque nouvelle position avec une nouvelle magie. Je code aussi un symbole, TF, etc. dans ma magie. Tout ceci est clair.

Seulement j'étais sûr queSetExpertMagicNumber est comme une solution globale. Si une demande de transaction ne spécifie pas explicitement une magie, elle prend la valeur définie via SetExpertMagicNumber. Sinon, personnellement, je n'en vois pas l'intérêt ;))

La méthode fixe le nombre magique non pas à Expert Advisor, mais à un objet d'une classe de commerce. Il peut y avoir plusieurs classes de transactions dans un même EA et un numéro magique distinct peut être défini pour chacune d'entre elles, ce qui inclut dans sa valeur à la fois un numéro magique commun pour l'EA et un numéro magique distinct pour chacun des objets de transaction.

 
Artyom Trishkin:

Alors il est étrange que vous ayez posé ces questions en premier lieu.

Ce n'est pas étrange du tout. Si je ne comprends pas du tout la POO, c'est que je n'étais pas sûr, ou que j'avais des doutes, de l'avoir comprise correctement. J'ai demandé une clarification, j'ai obtenu une confirmation et maintenant je suis sûr (de demain). Comme ce monologue de G. Hazanov.

- Imaginez que vous vous tenez à la fenêtre, et que dans la fenêtre d'en face, sans vous en douter, se trouve une femme nue. Que ressentez-vous ?

- Confiance en l'avenir.

- Et quel est votre prochain mouvement ?

- Je déménage dans une autre pièce. J'ai une plus grande fenêtre ici.

 
Alexey Viktorov:

Ai-je raison de supposer qu'avec cette option

sans envisager un avertissement du compilateur, la position peut être ouverte avec un numéro magique autre que 123 ?

Autrement dit, un nouvel objet sera créé dans la fonction OnTick et le nombre magique qu'il contient ne sera pas égal à 123.

La position sera ouverte avec le numéro Magic égal à "0" - c'est-à-dire que la ligne

void OnTick()
{
 CTrade trade;

recrée l'objet et la magie CTrade est initialisée à "0" par défaut (dans le constructeur de la classe) lors de la création d'un objet de classe de commerce :

//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CTrade::CTrade(void) : m_async_mode(false),
   m_magic(0),
   m_deviation(10),
   m_type_filling(ORDER_FILLING_FOK),
   m_log_level(LOG_LEVEL_ERRORS)
 
Vladimir Karputov:

La position sera ouverte avec un numéro magique égal à "0" - c'est-à-dire une chaîne de caractères.

recrée l'objet à nouveau et la magie CTrade est initialisée à zéro par défaut (dans le constructeur de la classe) lors de la création de l'objet de la classe de commerce :

Oui ? Cela ne crée-t-il pas un nouvel objet indépendant ?

Raison: