Su un'applicazione dell'OOP - pagina 11

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

Dall'annuncio di MT5, ho cercato di ottenere una risposta alla domanda:

Quanto aumenteranno le prestazioni della mia EA (o di chiunque altro) se ci metto tutta questa roba super-duper?

Non ho mai ricevuto una risposta...

...

Non è possibile implementare un algoritmo di trading complesso senza un linguaggio di programmazione sviluppato. Le soluzioni semplici a livello di "compra più in alto di mashka, vendi più in basso" sono nel passato, negli anni 80. Di conseguenza, non è possibile scrivere nulla di redditizio su un linguaggio di programmazione limitato (la fortuna non è presa in considerazione, ovviamente).
 
СанСаныч Фоменко:

...

Le librerie esterne sono vietate, da qui il mercato R. Se non fosse per questa restrizione, diventerei ricco senza alcun rischio vendendo indicatori di altissima qualità.

...

Sai cosa ferma un cattivo ballerino?

Nessuno vieta di arricchirsi convertendo metodi statistici superprofitti in codice MQL. AlgLib è il vostro aiuto.

Ma è tutto come la tua fantasia: "Se avessi avuto lo stesso, ma con le asole rosa, avrei fatto qualcosa che mi avrebbe fatto diventare un top! - Cercate di scrivere qualcosa e di vendere prima almeno una copia del vostro prodotto. Rapidamente scenderai sulla terra e capirai che tutto è molto più complicato della semplice implementazione di qualche metodo statistico.

 
Vasiliy Sokolov:

Sfortunatamente, le interfacce sono proibite in MQL5, il che è molto spiacevole, anche se avrebbero potuto essere abilitate con una mossa pulita: permettere l'ereditarietà multipla di classi puramente astratte.

Le interfacce in MQL5 funzionano:

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:

Le interfacce in MQL5 funzionano:

Un oggetto deve essere in grado di supportare più interfacce, altrimenti diventa privo di significato.

 

Sfortunatamente, solo a livello di pensiero velleitario:

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

Cioè, finché IEnumerator è una classe puramente astratta, l'ereditarietà multipla che la coinvolge è completamente sicura.

 
Renat Fatkhullin:

Le interfacce in MQL5 funzionano:

Nel frattempo, infatti, le interfacce devono ancora essere avvolte in lunghe catene di eredità. Un esempio di questo è la meravigliosa libreria Internal postata da MQ:

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

Un oggetto deve essere in grado di supportare più interfacce, altrimenti diventa privo di significato.

Stiamo già lavorando su questo, dobbiamo farlo noi stessi.
 
Renat Fatkhullin:
Ci stiamo già lavorando, ne abbiamo bisogno noi stessi.
Ben fatto. Sarà davvero bello. Inoltre, la soluzione è abbastanza elegante: è sufficiente permettere l'ereditarietà multipla dalle classi se e solo se sono rappresentate come classi astratte pure (non contengono dati o implementazioni, tutti i metodi sono pubblici). Cioè non è necessario introdurre qualche costrutto o parola chiave specifica che non fa parte dello standard C++.
 
Inoltre, come nota a margine: la biblioteca interna deve essere ulteriormente sviluppata. Diventerà una grande caratteristica quando appariranno le interfacce. Il vecchio CObject sarà dimenticato come un brutto sogno.
 
Vasiliy Sokolov:
è sufficiente permettere l'ereditarietà multipla dalle classi se e solo se sono rappresentate come classi puramente astratte (non contengono dati o implementazioni, tutti i metodi sono pubblici).
... e non sono ereditati da nessuno, altrimenti sono ancora rombi.