Sur une application de l'OOP

 

Je suis en train de rédiger une évaluation environnementale pour un client et la situation est la suivante. Il n'y a pas de TOR clair pour tous les éléments, mais il y a des idées qu'il veut tester. C'est-à-dire que le travail est plus proche de la recherche.

Il dit : "Je ne sais même pas quoi faire, il y a des variantes d'entrées, je veux les essayer, puis-je le faire ? Je vais devoir écrire plusieurs variantes du conseiller expert ? Et les intrants en volume ne peuvent évidemment pas être contenus dans une seule fonction et ils doivent naître dynamiquement du marché. En d'autres termes, il peut y avoir 1... N. Je fais une description simplifiée de la situation.

Créons une classe de base où tout reste inchangé et à partir de cette classe, nous aurons des descendants au comportement modifié.

- Et qu'est-ce qu'une classe ?

Le client comprend un peu le langage MQL, mais n'est pas un programmeur. J'ai commencé à lui expliquer, mais il ne comprenait pas.

J'ai trouvé sur Internet une image de la classification des espèces animales. J'ai dit : simplifions les choses et supposons qu'ils ont tous évolué les uns des autres.

Je dis - notre classe de base serait les flagellés antiques. Il a une fonctionnalité de base, juste l'essentiel. Et à partir de là, on aura les protozoaires, les multicellulaires, etc. Et chaque descendant contiendra toutes les fonctionnalités de son parent.

- Oh, je vois ! Et même les mammifères auront la fonctionnalité des anciens flagellés, n'est-ce pas ?

- Oui, c'est ça.

Maintenant je pense comment ce cas serait utilisé de façon optimale dans un testeur, la stratégie n'est pas scalper ou ticking, pour un testeur est approprié. Aussi dans les énigmes effrayantes de qui sont les suceurs...)

classes

**

 
Alexey Volchanskiy:

...

Je dis - notre classe de base serait les flagellés antiques. Il a une fonctionnalité de base, juste l'essentiel. Et à partir de là, nous donnerons naissance à des protozoaires, des multicellulaires, etc. Chaque descendant contient toutes les fonctionnalités de son parent.

...

Malheureusement, l'idée d'héritage s'est avérée être un bâton à deux extrémités. Vous pouvez vous blesser involontairement. C'est pourquoi il est préférable d'utiliser l'héritage de manière très limitée.
 
Vasiliy Sokolov:
Malheureusement, l'idée de l'héritage s'est avérée être une arme à double tranchant. Vous pourriez vous assommer accidentellement. C'est pourquoi il est préférable d'utiliser l'héritage de manière très limitée.

Cette EA n'aura probablement pas plus de deux liens d'héritage. L'image est juste pour démontrer l'héritage. Je ne suis pas un adepte de la complication moi-même. Mais le Seigneur Dieu... qui aime s'amuser)))).

En ce qui concerne le regard "lump" sur la bibliothèque standard, c'est plutôt profond là, surtout dans Controls.

 
Alexey Volchanskiy:

Cette EA n'aura probablement pas plus de deux liens d'héritage. L'image est juste pour démontrer l'héritage. Je ne suis pas un adepte de la complication moi-même. Mais le Seigneur Dieu... qui aime s'amuser)))).

Pour ce qui est du "léchage", regardez la bibliothèque standard, c'est un niveau assez profond là-bas, surtout dans Controls.

Malheureusement, la bibliothèque standard n'est pas une référence. Certains cours sont de véritables chefs-d'œuvre, d'autres sont écrits sans aucune compréhension du sujet (probablement par des personnes différentes).
 
Vasiliy Sokolov:
Malheureusement, l'idée d'héritage est devenue une arme à double tranchant. Vous pouvez vous blesser involontairement. C'est pourquoi il est préférable d'utiliser l'héritage de manière très limitée.

Je peux vous donner un exemple de "zashib" ?

Moi, au contraire, j'essaie toujours d'utiliser l'héritage et le polymorphisme autant que possible. Il est très pratique de disposer de fonctions virtuelles qui sont appelées au besoin sur les objets que vous créez...

Il y a des cas où tous les descendants portent la fonctionnalité de la classe ancêtre dont les descendants n'ont plus besoin - mais je ne vois pas de problèmes particuliers ici. Ne l'utilisez pas, c'est tout. Je ne parle même pas de l'héritage protégé, lorsque les utilisateurs de la classe - ne peuvent pas déjà se référer aux fonctions de l'ancêtre, et, ici, vous pouvez très simplement "supprimer la fonctionnalité inutile".

 
George Merts:

Je peux vous donner un exemple de "zashib" ?

Moi, au contraire, j'essaie toujours d'utiliser l'héritage et le polymorphisme autant que possible. Il est très pratique de disposer de fonctions virtuelles qui sont appelées au besoin sur les objets mêmes qui sont créés...

Il existe des cas où tous les descendants portent la fonctionnalité de la classe ancêtre, dont les descendants n'ont plus besoin, mais je ne vois pas de problème particulier ici. Ne l'utilisez pas, c'est tout. Je ne parle même pas de l'héritage protégé, lorsque les utilisateurs de la classe - ne peuvent plus faire référence aux fonctions de l'ancêtre, et, ici, il est très facile de "supprimer les fonctionnalités inutiles".

Bien écrit. J'utilise beaucoup les fonctions virtuelles dans ce projet, c'est très pratique. Les classes descendantes ont des "comportements" différents, mais la même interface. Dans MQL, il n'y a pas de notion d'interface, mais il n'est pas difficile de l'imiter.

J'ai déjà pensé à mettre les instances de tous les descendants dans un tableau et à les exécuter dans une boucle avec des appels de fonctions virtuelles. Et de sélectionner les signaux les plus performants d'une certaine manière, à laquelle je n'ai pas encore pensé. Jusqu'à présent, on ne sait pas comment déterminer si les signaux sont "chanceux" ou non. Il est donc possible d'optimiser à la volée en s'adaptant à l'évolution du marché.

Je pense qu'il est préférable de ne pas le faire dans l'EA de travail, mais dans sa petite modification qui fonctionne en parallèle avec l'écriture des informations au moins dans un fichier, la vitesse d'échange n'est pas importante ici.

Qu'en est-il de la"fonctionnalité de la classe ancêtre, dont les descendants n'ont plus besoin" - peu importe, les fonctions existent en mémoire en tant que copie unique de toute façon. Bien sûr, de la mémoire de données sera allouée pour chaque instance, mais de nos jours, avec des gigaoctets de RAM, ce n'est pas très important.

 
Vous feriez mieux de décrire les TdR, parce que ce que vous voulez dire et ce que les classes ont à voir avec cela n'est pas clair.
 
Alexey Volchanskiy:

Je suis en train de rédiger un conseiller pour un client et la situation est la suivante. Il n'y a pas de TOR clair pour tous les éléments, mais il y a des idées qu'il veut tester. C'est-à-dire que le travail est plus proche de la recherche.

Il dit : "Je ne sais même pas quoi faire, il y a des variantes d'entrées, je veux les essayer, puis-je le faire ? Je vais devoir écrire plusieurs variantes du conseiller expert ? Et les entrées par volume ne peuvent évidemment pas s'inscrire dans une seule fonction et elles doivent naître dynamiquement par le marché. En d'autres termes, il peut y avoir 1... N. Je fais une description simplifiée de la situation.

Créons une classe de base où tout reste inchangé et à partir de cette classe, nous aurons des descendants au comportement modifié.

- Et qu'est-ce qu'une classe ?

Le client comprend un peu le langage MQL, mais n'est pas un programmeur. J'ai commencé à lui expliquer, mais il ne comprenait pas.

J'ai trouvé sur Internet une image de la classification des espèces animales. Je lui ai dit : "Simplifions les choses et supposons qu'ils ont tous évolué les uns des autres".

Je dis - notre classe de base serait les flagellés antiques. Il a une fonctionnalité de base, juste l'essentiel. Et à partir de là, on aura les protozoaires, les multicellulaires, etc. Et chaque descendant contiendra toutes les fonctionnalités de son parent.

- Oh, je vois ! Et même les mammifères auront la fonctionnalité des anciens flagellés, ai-je raison ?

- Oui, c'est ça.

Maintenant je pense comment ce cas serait utilisé de façon optimale dans un testeur, la stratégie n'est pas scalper ou ticking, pour un testeur est approprié. Aussi dans les énigmes effrayantes de qui sont les suceurs...)

**

Si vous ne savez pas ce qu'ils veulent, vous pouvez leur demander de le faire manuellement. Ou laissez-les tester à la main ce qu'ils ne savent pas...
 
Alexey Volchanskiy:

Je suis en train de rédiger une évaluation environnementale pour un client et la situation est la suivante. Il n'y a pas de TOR clair pour tous les éléments, mais il y a des idées qu'il veut tester. C'est-à-dire que le travail est plus proche de la recherche.

Il dit : "Je ne sais même pas quoi faire, il y a des variantes d'entrées, je veux les essayer, puis-je le faire ? Je vais devoir écrire plusieurs variantes du conseiller expert ? Et les intrants en volume ne peuvent évidemment pas être contenus dans une seule fonction et ils doivent naître dynamiquement du marché. En d'autres termes, il peut y avoir 1... N. Je fais une description simplifiée de la situation.

Créons une classe de base où tout reste inchangé et à partir de cette classe, nous aurons des descendants au comportement modifié.

- Et qu'est-ce qu'une classe ?

Le client comprend un peu le langage MQL, mais n'est pas un programmeur. J'ai commencé à lui expliquer, mais il ne comprenait pas.

J'ai trouvé sur Internet une image de la classification des espèces animales. J'ai dit : simplifions les choses et supposons qu'ils ont tous évolué les uns des autres.

Je dis - notre classe de base serait les flagellés antiques. Il a une fonctionnalité de base, juste l'essentiel. Et à partir de là, on aura les protozoaires, les multicellulaires, etc. Et chaque descendant contiendra toutes les fonctionnalités de son parent.

- Oh, je vois ! Et même les mammifères auront la fonctionnalité des anciens flagellés, n'est-ce pas ?

- Oui, c'est ça.

Maintenant je pense comment ce cas serait utilisé de façon optimale dans un testeur, la stratégie n'est pas scalper ou ticking, pour un testeur est approprié. Aussi dans les énigmes effrayantes de qui sont les suceurs...)

**

L'essentiel est qu'il soit pratique à utiliser. Pour essayer différentes entrées, vous pouvez le faire en vrac par numéro d'ensemble d'entrées. C'est-à-dire qu'il existe une collection d'ensembles d'entrée. Si cela convient, comme un tableau de fonctions. Les plus simples - achat ou vente inconditionnels par le marché. Ou conditionnel)). Ensuite, on lance l'optimiseur et on examine les différents ensembles d'entrées.
 
Alexey Busygin:
Vous feriez mieux de décrire votre cahier des charges, car ce que vous voulez dire et ce que les classes ont à voir avec cela n'est pas clair.

Quel est le cahier des charges - celui qui m'est donné par le client ? )) Pensez-vous que c'est politiquement correct ?

Ou est-ce quelque chose d'exotique pour vous ? Ou est-ce une sorte d'exotisme pour vous ? Pour moi, c'est un outil de travail ordinaire.

 
Vladimir Pastushak:
Ils devraient être envoyés pour décider ce qu'ils veulent d'abord et ensuite le demander... Ou laissez-les tester à la main ce qu'ils ne savent pas...
Pourquoi pas ? J'adore la recherche, surtout si elle est payée).