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
1. L'opérateur new renvoie un pointeur, bien sûr, les développeurs ont fait un gâchis avec le déréférencement implicite, donc votre version fonctionne, mais il est préférable de ne pas s'accrocher à des choses non documentées.
2. Bien sûr, ce n'est pas C++ mais c'est très similaire, donc les listes d'initialisation (je ne sais pas pour l'efficacité) sont kasher.
Vérifié, oui votre option fonctionne, et logiquement c'est plus correct :
2019.08.31 22:07:35.196 tst (EURUSD,H1) Stratégie_1::Stratégie_1
2019.08.31 22:07:35.196 tst (EURUSD,H1) Contexte::Contexte
2019.08.31 22:07:35.196 tst (EURUSD,H1) Stratégie_2::Stratégie_2
2019.08.31 22:07:35.196 tst (EURUSD,H1) Contexte::Contexte
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategy_1::Algorithm
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategy_2::Algorithm
2019.08.31 22:07:35.197 tst (EURUSD,H1) Stratégie_1::Algorithme
Le pointeur et l'objet créé à l'initialisation n'ont pas été perdus, et la méthode de l'interface n'a pas remplacé les méthodes des classes 1 et 2 - tout semble fonctionner comme prévu.
Comment éviter les sections de code répétitives lors de l'initialisation ? - dans le constructeur, vous ne pouvez pas
Comment éviter les sections de code répétitives lors de l'initialisation ? - dans le constructeur, vous ne pouvez pas
Au lieu d'une interface, vous créez une classe ordinaire. Là, vous mettez *m et faites de la méthode bool SomeMethod {if (CheckPointer(m)) return false ; m=new... ; return true;}
Non, j'ai besoin des interfaces - c'est très bien que je n'aie pas besoin de tout tirer à chaque tick - je ferai un appel d'une stratégie par tick - en général, j'aime la configuration de tout cela jusqu'ici, il semble que c'était nécessaire pour résoudre mon problème de cette façon :
J'ai un peu modifié mon exemple - il fonctionne, mais il devrait ressembler à ceci :
mais si je supprime le corps de la méthodeCStrategy::Algorithm(void), il y aura une erreur : 'Algorithm' -la fonction doit avoir un corps.
Pourquoi est-ce une erreur ? - parce que je déclare la méthode CStrategy::Algorithm(void) avec le modificateur virtual
J'ai un peu modifié mon exemple - il fonctionne, mais il devrait ressembler à ceci :
mais si je supprime le corps de la méthode CStrategy::Algorithm(void), il y aura une erreur : 'Algorithm' - la fonction doit avoir un corps.
Pourquoi est-ce une erreur ? - parce que je déclare la méthode CStrategy::Algorithm(void) avec le modificateur virtual
virtual void Algoritm()=0 ;
Non, ça ne marchera pas non plus. Si vous déclarez une abstraction, ayez la gentillesse de l'implémenter.
Je pense que le compilateur perçoit la méthode Algorithm() de l'interface et la méthode déclarée virtual void Algorithm() comme des méthodes différentes en raison du modificateur virtual.
Une méthode abstraite doit être implémentée dans les descendants. Encore une fois, il n'est pas nécessaire de le mettre en œuvre.
J'ai besoin d'interfaces parce qu'il est pratique pour moi de déclarer un comportement différent pour 6 stratégies en fonction des paramètres du conseiller expert (il n'y a pas tant de stratégies que de systèmes d'ordres).
en ce moment :
Je veux minimiser le corps des méthodes Algorithm() - si j'écris correctement la classe de base - dans mon exemple, la classe CStrategy, alors l'Algorithm() lui-même contiendra 5-10 lignes au maximum.
Comment dois-je écrire ce code sans interface ? - Maintenant tout est bref et il ne restera plus qu'à tirer les algorithmes eux-mêmes des stratégies tous les tick ou moins fréquemment.
как этот код без интерфейса написать? - сейчас все кратко и останется только дергать сами алгоритмы стратегий каждый тик или реже