Sur une application de l'OOP - page 11

 
СанСаныч Фоменко:

Depuis l'annonce de MT5, j'essaie d'obtenir une réponse à cette question :

Dans quelle mesure les performances de mon EA (ou de n'importe qui d'autre) augmenteront-elles si j'y mets tous ces trucs super-duper ?

Je n'ai jamais eu de réponse...

...

Vous ne pouvez pas mettre en œuvre un algorithme de trading complexe sans un langage de programmation développé. Les solutions simples du type "acheter plus haut que le mashka, vendre plus bas" appartiennent au passé, aux années 80. Par conséquent, il est pratiquement impossible d'écrire quoi que ce soit de profitable sur un langage de programmation limité (la chance n'est pas prise en compte, bien sûr).
 
СанСаныч Фоменко:

...

Les bibliothèques externes sont interdites, d'où la place de marché R. Si cette restriction n'existait pas, je deviendrais riche sans aucun risque en vendant des indicateurs de très haute qualité.

...

Tu sais ce qui arrête un mauvais danseur ?

Personne n'interdit de s'enrichir en convertissant des méthodes statistiques superprofondes en code MQL. AlgLib est votre aide.

Mais tout cela ressemble à votre fantasme : "Si j'avais eu la même, mais avec des boutonnières roses, j'aurais fait quelque chose qui aurait fait de moi un top ! - Essayez d'abord d'écrire quelque chose et de vendre au moins un exemplaire de votre produit. Vous redescendrez rapidement sur terre et vous comprendrez que tout est bien plus compliqué que la simple mise en œuvre d'une méthode statistique.

 
Vasiliy Sokolov:

Malheureusement, les interfaces sont interdites dans MQL5, ce qui est très regrettable, bien qu'elles auraient pu être activées dans un geste soigné : permettre l'héritage multiple de classes purement abstraites.

Les interfaces de MQL5 fonctionnent :

class Interface
  {
public:
   virtual void      Do(void)=0;
  };

class MyTest : public Interface
  {
public:
                     MyTest(void) {};
                    ~MyTest(void) {};

   virtual void      Do(void) { Print("Hello!"); }
  };

void OnStart()
  {
   MyTest test;
   test.Do();
  }
 
Renat Fatkhullin:

Les interfaces dans MQL5 fonctionnent :

Un objet doit pouvoir supporter plusieurs interfaces, sinon il n'a plus de sens.

 

Malheureusement, seulement au niveau des vœux pieux :

//+------------------------------------------------------------------+
//| Class of all classes                                             |
//+------------------------------------------------------------------+
class CObject
{
};
//+------------------------------------------------------------------+
//| Enumerator interface                                             |
//+------------------------------------------------------------------+
template<typename T>
class IEnumerator
{
public:
   virtual bool MoveNext();
   virtual void Reset();
   virtual T    Current();
};
class CList : public CObject, public IEnumerator
{
   ...
}

En d'autres termes, tant que IEnumerator est une classe purement abstraite, l'héritage multiple qui l'implique est totalement sûr.

 
Renat Fatkhullin:

Les interfaces dans MQL5 fonctionnent :

Pendant ce temps, en fait, les interfaces doivent toujours être enveloppées dans de longues chaînes d'héritage. Un exemple de ceci est la merveilleuse bibliothèque interne postée par MQ :

IList -> ICollection -> IEnumerable + IEnumerator
 
Vasiliy Sokolov:

Un objet doit pouvoir supporter plusieurs interfaces, sinon il n'a plus de sens.

Nous y travaillons déjà, nous devons le faire nous-mêmes.
 
Renat Fatkhullin:
Nous y travaillons déjà, nous en avons besoin nous-mêmes.
Bien joué. Ce sera vraiment cool. D'ailleurs, la solution est assez élégante : il suffit d'autoriser l'héritage multiple à partir de classes si et seulement si elles sont représentées comme des classes abstraites pures (ne contenant ni données ni implémentations, toutes les méthodes sont publiques). C'est-à-dire qu'il n'est pas nécessaire d'introduire une construction ou un mot-clé spécifique qui ne fait pas partie de la norme C++.
 
Par ailleurs, la bibliothèque interne doit être développée davantage. Cela deviendra une grande fonctionnalité lorsque les interfaces apparaîtront. L'ancien CObject sera oublié comme un mauvais rêve.
 
Vasiliy Sokolov:
il suffit d'autoriser l'héritage multiple à partir de classes si et seulement si elles sont représentées comme des classes purement abstraites (ne contiennent ni données ni implémentations, toutes les méthodes sont publiques).
... et ne sont pas hérités de quelqu'un, sinon ce sont toujours des losanges.