![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
S'agit-il d'une classe de test ou allez-vous vraiment l'utiliser ?
Lesecond, je l'écris de toute façon sous MT4, même pour moi - il ne fonctionne pas dans le testeur pour quelques symboles, si je vois quelque chose d'utile dans MT4, je passerai à MT5 en utilisant MT4Orders - j'ai vérifié mon "travail créatif" sans problèmes avec cette bibliothèque
tout d'abord, je veux voir l'idée d'une véritable POO - c'est pourquoi je la teste, pour voir ce qui en sortira, jusqu'à présent ça se passe assez mal.... on verra, j'ai le temps, voici le chargeur que j'ai décidé de fabriquer moi-même ))))
Je sais que ce n'est pas la meilleure façon d'initialiser avant le début du code principal, ou plutôt je le pensais, mais je ne l'ai jamais vérifié, peu importe le nombre de nouvelles constructions que j'ai eues - dans MQL tout est toujours disponible, même au niveau de la visibilité globale, j'ai vu les gens des sources aller directement au sommet et l'écrire de cette façon :
et ces initialisations invalides ont fonctionné pendant des années de build en build. Les développeurs ont donc gâté les gens jusqu'à l'os )))).
SZZY : ici, en général, comme toujours lorsqu'on utilise la POO - l'essentiel est de diviser correctement le problème en éléments complexes et de ne pas hériter de tout ce qui est à portée de main. Je ne sais pas où "mettre" la sortie texte des erreurs - elle a besoin de partout, dans n'importe quelle classe et à n'importe quel endroit du programme, très probablement vous devrez créer une classe de base comme@Vladimir Simakov a montré ci-dessus son code
pp 1-3 tous solvables, MAIS... OK, ici avec la statique aidé, qu'il en soit ainsi car il y a une aide, au moins quelque chose pour justifier sa décision, maintenant le code est le suivant :
J'ai créé 3 instances de Cdeal, je suis dans le journal :
...
jusqu'à présent, tout fonctionne comme prévu !
Mais tout de même, votre version originale était meilleure. Ne sacrifiez pas la fiabilité pour économiser une ligne de code.)
laquelle ? - J'ai la moitié du sujet dans mes variations ))))
mais oui, tu as raison à cent pour cent !
SZY :
le moyen le plus simple et le plus fiable - créer une instance de la classe via new dans OnInit() - et copier immédiatement toutes les variables d'environnement du terminal, mais ce n'est pas le meilleur moyen - si je prévois d'ouvrir un ordre immédiatement au démarrage du constructeur dans cet exemple, alors cette instance de la classe sera probablement supprimée et ensuite éventuellement recréée - cela pose déjà quelques problèmes à cause des appels répétés - je recommence à charger le terminal, gaspillant à nouveau de la mémoire.... en général, ce n'est pas soluble de cette façon
ZZZY : peut-être une autre journée d'expériences, et éventuellement prendre l'exemple de@Vladimir Simakov- tout y est très clair
J'ai esquissé ma classe, qui doit initialiser les champs une fois avec des valeurs constantes, et cela semble fonctionner comme prévu :
Je n'aime pas 2 choses :
1. je répète l'appel de SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP) - parce que l'ordre d'initialisation n'est pas défini, c'est-à-dire qu'il n'est pas sûr que VolumeSTEP sera initialisé en premier et seulement ensuite GetDigitsInVolumeStep() sera appelé
2. je veux me débarrasser de la méthode statique static int GetDigitsInVolumeStep() - j'ai vu une vidéo sur youtube disant qu'en pure POO on ne devrait pas utiliser de méthodes statiques, et maintenant je me bats contre des moulins à vent
le lien vers la vidéo, c'est essentiellement la même chosehttps://youtu.be/lfdAwl3-X_c ethttps://youtu.be/zME4SOCHT0I
comment puis-je réécrire ces 2 points qui ne me plaisent pas ?
1. Il n'y a rien de mal à appeler cette fonction deux fois.
2. ne trouvez-vous pas déroutant que ceux qui sont contre l'utilisation des fonctions statiques ne donnent pas le moindre argument ?
Il vaut mieux ne pas regarder les vidéos de n'importe qui, mais lire des livres.
2. n'êtes-vous pas troublé par le fait que ceux qui sont contre l'utilisation des fonctions statiques ne donnent pas le moindre argument ?
Et vous êtes le premier à soutenir que la vidéo ne correspond à rien dans la pratique, j'ai écrit dans un autre fil mon opinion sur la vidéo - le conférencier ne pouvait même pas répondre aux questions des étudiants.
et vous êtes le premier à me soutenir que la vidéo ne correspond à rien de la pratique, j'ai écrit dans un autre fil mon opinion sur la vidéo - le journaliste ne pouvait même pas répondre aux questions des étudiants.
Je ne pense pas qu'OOP consiste à réduire ses propres capacités pour suivre aveuglément les postulats infondés de certains porte-parole de l'Internet, où chacun balaie à sa façon.
Je ne pense pas que la POO consiste à réduire ses propres capacités pour suivre aveuglément les postulats infondés de certains porte-parole de l'Internet, où chacun balaie devant sa porte.
Si vous avez vu la vidéo, vous devriez comprendre que la cible est ..... en général, vous ne comprenez rien et vous n'êtes pas encore assez mûr. C'est du moins ce que m'a expliqué A100.
SZZ : Je vais expérimenter un peu plus tard avec les interfaces, peut-être qu'une certaine "entité-beauté" apparaîtra )))).
J'ai regardé sa vidéo sur la statique, tout ça pour écrire comme ça :
Eh bien, écrire un wrapper sur une statique est un problème, n'est-ce pas ?
class Stateless_with_state { Stateless q; Data d; call() {q::call(d);} };
Et les modèles sont clairement plus efficaces. J'ai aimé la question du public https://www.youtube.com/watch?v=75U9eefFYoU#t=33m25s
ZS : Je vais expérimenter avec les interfaces un peu plus tard, peut-être qu'une certaine "entité-beauté" apparaîtra )))).
Vérifié si "OOP pattern - Behavioural patterns - Strategy" fonctionnera
2019.08.31 21:04:40.441 tst (EURUSD,H1) Stratégie_1::Stratégie_1
2019.08.31 21:04:40.442 tst (EURUSD,H1) Contexte::Contexte
2019.08.31 21:04:40.442 tst (EURUSD,H1) Strategy_1::Algorithm
2019.08.31 21:04:40.442 tst (EURUSD,H1) Stratégie_2::Stratégie_2
2019.08.31 21:04:40.442 tst (EURUSD,H1) Contexte::Contexte
2019.08.31 21:04:40.442 tst (EURUSD,H1) Strategy_2::Algorithm
Fonctionne sans aucun problème à mon avis
vérifié si le "OOP Pattern - Behavioural Patterns - Strategy (Strategy)" fonctionnera
2019.08.31 21:04:40.441 tst (EURUSD,H1) Stratégie_1::Stratégie_1
2019.08.31 21:04:40.442 tst (EURUSD,H1) Contexte::Contexte
2019.08.31 21:04:40.442 tst (EURUSD,H1) Strategy_1::Algorithm
2019.08.31 21:04:40.442 tst (EURUSD,H1) Stratégie_2::Stratégie_2
2019.08.31 21:04:40.442 tst (EURUSD,H1) Contexte::Contexte
2019.08.31 21:04:40.442 tst (EURUSD,H1) Strategy_2::Algorithm
fonctionne sans aucun problème pour moi
L'opérateur new renvoie un pointeur. Bien sûr, les développeurs se sont plantés avec le déréférencement implicite et c'est pourquoi votre version fonctionne, mais je préfère ne pas m'attarder sur des choses non documentées.
2. Ce n'est certainement pas C++, mais c'est très similaire, donc les listes d'initialisation (je ne sais pas pour l'efficacité) sont kasher.