Об одном применении ООП - страница 11

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

Начиная с анонса МТ5 все пытаюсь добиться ответа на вопрос:

На сколько возрастут показатели моего советника (или чьего бы то ни было), если я в него все это супер-пупер внедрю?

Ни разу не получил ответа...

 ...

Вы не сможете реализовать сложный торговый алгоритм без развитого языка программирования. Простые решения на уровне "купил выше машки продали ниже", - остались в прошлом, в годах эдак в 80-ых. Следовательно, вы в принципе ничего прибыльного написать на ограниченном языке программирования не сможете (везение не в счет конечно).
 
СанСаныч Фоменко:

...

Запрещены внешние библиотеки, а следовательно R маркете. Если бы не это ограничение я бы просто обогатился без всякого риска на продаже очень качественных индикаторов.

...

Знаете что плохому танцору мешает? 

Никто не запрещает Вам обогащаться, переводя суперприбыльные стат. методы в MQL код. AlgLib вам в помощь.

Но все это из серии Ваших фантазий: "Вот если бы был бы такой же, но с розовыми пугавицами, вот тогда я бы такое забацал что стал бы в топе..." - А Вы попробуйте для начала написать хоть что-то, и продать хотя бы одну копию своего продукта. Быстро с небес на землю спуститесь, и поймете, что все гораздо сложней чем просто реализовать какой-то стат. метод.  

 
Vasiliy Sokolov:

К сожалению, интерфейсы в MQL5 запрещены, и это очень печально, хотя их можно было бы включить изящным ходом: разрешить множественной наследование чисто абстрактных классов.

Интерфейсы в MQL5 работают:

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:

Интерфейсы в MQL5 работают:

Объект должен уметь поддерживать множество интерфейсов, иначе выхолащивается смысл их применения.

 

К сожалению только на уровне хотелок:

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

 Т.е. пока IEnumerator чисто абстрактный класс, множественное наследование с его участием полностью безопасно.

 
Renat Fatkhullin:

Интерфейсы в MQL5 работают:

А пока по факту, интерфейсы все равно приходится заворачивать в длинные цепочки наследования. Пример тому, замечательная библиотека Internal выложенная MQ:

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

Объект должен уметь поддерживать множество интерфейсов, иначе выхолащивается смысл их применения.

Над этим уже работаем, самим нужно.
 
Renat Fatkhullin:
Над этим уже работаем, самим нужно.
Молодцы. Это реально круто будет. Тем более решение вполне изящное: достаточно разрешить множественное наследование от классов тогда и только тогда, когда они представлены в виде чисто абстрактных классов (не содержат данных и реализаций, все методы публичны). Т.е. вводить какую-то специфическую конструкцию или ключевое слово, не входящее в стандарт С++ не потребуется.
 
Также из пожеланий: нужно и дальше развивать библиотеку Internal. Она станет просто суперской либой, когда появятся интерфейсы. Старый CObject забудем как страшный сон.
 
Vasiliy Sokolov:
достаточно разрешить множественное наследование от классов тогда и только тогда, когда они представлены в виде чисто абстрактных классов (не содержат данных и реализаций, все методы публичны).
... и ни от кого не наследуются, иначе все равно ромбы.
Причина обращения: