En una aplicación de la OOP - página 11

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

Desde el anuncio de MT5, he estado tratando de obtener una respuesta a la pregunta:

¿Cuánto aumentará el rendimiento de mi EA (o de cualquier otro) si le meto todas estas cosas superdotadas?

Nunca recibí una respuesta...

...

No se puede implementar un algoritmo de negociación complejo sin un lenguaje de programación desarrollado. Las soluciones simples al nivel de "comprar más alto que la mashka, vender más bajo" son cosa del pasado, de los años 80. En consecuencia, básicamente no se puede escribir nada rentable en un lenguaje de programación limitado (la suerte no se tiene en cuenta, por supuesto).
 
СанСаныч Фоменко:

...

Las bibliotecas externas están prohibidas, de ahí el mercado de R. Si no fuera por esta restricción me haría rico sin ningún riesgo al vender indicadores de muy alta calidad.

...

¿Sabes qué es lo que detiene a un mal bailarín?

Nadie prohíbe enriquecerse convirtiendo los métodos estadísticos superrentables en código MQL. AlgLib es su ayuda.

Pero todo es como tu fantasía: "Si tuviera el mismo, pero con ojales rosas, ¡habría hecho algo que me convertiría en un top! - Intenta escribir algo y vender al menos una copia de tu producto primero. Rápidamente bajarás a la tierra y comprenderás que todo es mucho más complicado que la mera aplicación de algún método estadístico.

 
Vasiliy Sokolov:

Desgraciadamente, las interfaces están prohibidas en MQL5, lo cual es muy desafortunado, aunque se podrían haber habilitado en un movimiento limpio: permitir la herencia múltiple de clases puramente abstractas.

Las interfaces en MQL5 funcionan:

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:

Las interfaces en MQL5 funcionan:

Un objeto debe ser capaz de soportar múltiples interfaces, de lo contrario carece de sentido.

 

Desgraciadamente, sólo en el nivel de las ilusiones:

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

Es decir, mientras IEnumerator sea una clase puramente abstracta, la herencia múltiple que la involucra es completamente segura.

 
Renat Fatkhullin:

Las interfaces en MQL5 funcionan:

Mientras tanto, de hecho, las interfaces todavía tienen que estar envueltas en largas cadenas de herencia. Un ejemplo de ello es la maravillosa biblioteca Interna publicada por MQ:

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

Un objeto debe ser capaz de soportar múltiples interfaces, de lo contrario carece de sentido.

Ya estamos trabajando en ello, tenemos que hacerlo nosotros.
 
Renat Fatkhullin:
Ya estamos trabajando en ello, lo necesitamos nosotros mismos.
Bien hecho. Será realmente genial. Además, la solución es bastante elegante: basta con permitir la herencia múltiple de clases si y sólo si se representan como clases abstractas puras (no contienen datos ni implementaciones, todos los métodos son públicos). Es decir, no es necesario introducir alguna construcción o palabra clave específica que no forme parte del estándar C++.
 
También como nota al margen: la biblioteca interna debe desarrollarse más. Se convertirá en una gran característica cuando aparezcan las interfaces. El antiguo CObject será olvidado como un mal sueño.
 
Vasiliy Sokolov:
es suficiente con permitir la herencia múltiple de clases si y sólo si se representan como clases puramente abstractas (no contienen datos ni implementaciones, todos los métodos son públicos).
... y no se heredan de nadie, sino siguen siendo rombos.