Bei einer Anwendung des OOP - Seite 11

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

Seit der Ankündigung von MT5 habe ich versucht, eine Antwort auf diese Frage zu bekommen:

Um wie viel wird sich die Leistung meines EA (oder die eines anderen) erhöhen, wenn ich all dieses super-duper Zeug einbaue?

Ich habe nie eine Antwort erhalten...

...

Sie können einen komplexen Handelsalgorithmus nicht ohne eine entwickelte Programmiersprache implementieren. Einfache Lösungen auf dem Niveau von "höher als Mashka kaufen, niedriger verkaufen" gehören der Vergangenheit an, den 80er Jahren. Folglich kann man mit einer begrenzten Programmiersprache im Grunde genommen nichts Gewinnbringendes schreiben (Glück wird dabei natürlich nicht berücksichtigt).
 
СанСаныч Фоменко:

...

Externe Bibliotheken sind untersagt, daher der R-Marktplatz. Wenn es diese Einschränkung nicht gäbe, würde ich mit dem Verkauf sehr hochwertiger Indikatoren ohne jedes Risiko reich werden.

...

Weißt du, was einen schlechten Tänzer aufhält?

Niemand verbietet, sich zu bereichern, indem man superprofitable statistische Methoden in MQL-Code umwandelt. AlgLib ist Ihre Hilfe.

Aber es ist alles wie in Ihrer Fantasie: "Wenn ich den gleichen hätte, aber mit rosa Knopflöchern, dann hätte ich so etwas gemacht und wäre ganz oben..." Aber versuchen Sie, den gleichen wenigstens einmal zu schreiben und versuchen Sie, ihn selbst umzusetzen. - Versuchen Sie zunächst, etwas zu schreiben und zumindest ein Exemplar Ihres Produkts zu verkaufen. Sie werden schnell auf den Boden der Tatsachen zurückkommen und verstehen, dass alles viel komplizierter ist, als nur irgendeine statistische Methode umzusetzen.

 
Vasiliy Sokolov:

Leider sind Schnittstellen in MQL5 verboten, was sehr bedauerlich ist, obwohl sie durch einen geschickten Schachzug hätten aktiviert werden können: die Mehrfachvererbung von rein abstrakten Klassen.

Die Schnittstellen in MQL5 funktionieren:

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:

Die Schnittstellen in MQL5 funktionieren:

Ein Objekt muss in der Lage sein, mehrere Schnittstellen zu unterstützen, sonst wird es sinnlos.

 

Leider nur auf der Ebene des Wunschdenkens:

//+------------------------------------------------------------------+
//| 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
{
   ...
}

Das heißt, solange IEnumerator eine rein abstrakte Klasse ist, ist die Mehrfachvererbung mit ihr völlig sicher.

 
Renat Fatkhullin:

Die Schnittstellen in MQL5 funktionieren:

In der Zwischenzeit müssen die Schnittstellen immer noch in lange Vererbungsketten verpackt werden. Ein Beispiel dafür ist die wunderbare interne Bibliothek, die von MQ veröffentlicht wurde:

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

Ein Objekt muss in der Lage sein, mehrere Schnittstellen zu unterstützen, sonst wird es sinnlos.

Daran arbeiten wir bereits, wir müssen es selbst tun.
 
Renat Fatkhullin:
Wir arbeiten bereits daran, wir brauchen es selbst.
Gut gemacht. Das wird wirklich cool sein. Außerdem ist die Lösung recht elegant: Es reicht aus, Mehrfachvererbung von Klassen zuzulassen, wenn sie als rein abstrakte Klassen dargestellt werden (keine Daten oder Implementierungen enthalten, alle Methoden sind öffentlich). D.h. es ist nicht notwendig, ein bestimmtes Konstrukt oder Schlüsselwort einzuführen, das nicht Teil des C++-Standards ist.
 
Noch eine Anmerkung am Rande: Die interne Bibliothek muss weiter ausgebaut werden. Es wird ein großartiges Feature werden, wenn die Schnittstellen erscheinen. Das alte CObject wird wie ein schlechter Traum in Vergessenheit geraten.
 
Vasiliy Sokolov:
es genügt, die Mehrfachvererbung von Klassen zuzulassen, wenn sie als rein abstrakte Klassen dargestellt werden (keine Daten oder Implementierungen enthalten, alle Methoden sind öffentlich).
... und werden von niemandem vererbt, sonst sind sie immer noch Rauten.