Кто-нибудь пользуется стандартными классами для работы с индикаторами?

 

 Есть класс CiCustom, который наследует класс CIndicator. Я решил своим классом, который работает с канкретным индикатором наследоваться от CiCustom, чтобы была возможность использоваться все средства по созданию и работе с индикатором нативно, наследуя все возможности по иерархии. Но, оказалось, что ничего не вышло. Функция Create из класса CIndicator возвращает что мол ошибка при создании индикатора, причём, постоянно.

Тем не менее, если пойти другим путём и воспользоваться функцией indicatorCreate, то всё работает. Так вот это удивительно. Ведь параметры, которые принимают эти оба метода, как Create, так и indicatorCreate абсолютно идентичны. Сигнатура этих функций идентична. Там промахнуться не возможно. Разве что возвращает одна факт создания, а другая хэндл. Ну и если пользоваться функцией из класса CIndicator, то нужна наследовать пачку классов по иерархии. А если не пользоваться - не нужно. Тогда возникает вопрос, а на кой оно нужно тогда?

Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorCreate
Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorCreate
  • www.mql5.com
[in]  Количество параметров, передаваемых в массиве parameters_array[]. Элементы массива имеют специальный тип структуры MqlParam. По умолчанию нулевое значение - параметры не передаются. Если указано ненулевое количество параметров, то параметр первого элемента должно содержать имя пользовательского индикатора. Пользовательский индикатор...
 

Проще самому чего надо написать. Простенько получается, и со вкусом.

Со стандартными классами все уж очень монстробразно получается.

 
hoz:
 

Тогда возникает вопрос, а на кой оно нужно тогда?

Боюсь, ты опять что-то напутал с ООП.

Пройдись в отладчике по функции Creаte - и погляди, почему происходит ошибка.

 
Yuriy Asaulenko:
Проще самому чего надо написать. Простенько получается, и со вкусом.

Да я сам и начал писать. Если бы здесь были нормальные возможности рефлексии, вообще было бы удобно. А так костыльно выходит.

 
Georgiy Merts:

Боюсь, ты опять что-то напутал с ООП.

Пройдись в отладчике по функции Creаte - и погляди, почему происходит ошибка.

По ходу баг какой-то

 

 

Запись - ужасная, все расплывается, не видно текста.

Выложи исходник-то...

 
Я понял, что здесь нет возможности наследования от класса, у которого конструктор принимает аргументы. Можно сделать костыль, типа конструктор не принимает аргументы, а в нём вызывать метод какой-нить типа инициализации. Но как-то мне это не очень нравится. По другому никак?
 

Ерунда, есть возможность - надо явно указать этот конструктор с параметрами. Я весьма широко использую наследование, где у наследника - нет параметров в конструкторе, а у предка - есть.

Вот, прямо мой рабочий код:

void CFlatSP_GBPCAD_PrCh_EPF::CFlatSP_GBPCAD_PrCh_EPF(double dMMRiskPercent):CChannelBackSPBinder_EPFT(CS_GBPCAD,PERIOD_M15,dMMRiskPercent)

У предка - три параметра в конструкторе, у потомка - один параметр. Можно и без праметров сделать.

Говорю ж - ты с ООП напутал.

Прежде чем обвинять производителей - подтяни свой ООП-скилл.

 
Georgiy Merts:

Запись - ужасная, все расплывается, не видно текста.

Выложи исходник-то...

Просто у меня разрешение очень высокое, поэтому так..

Единственное, здесь нужно будет изменить наследование класса ZZHandling с indCustom на CiCustom как в стандартной библиотеке, что бы работало. Я переименовывал т.к. было нужно.

Файлы:
onZZ.mq5  17 kb
ZigZag.mqh  14 kb
ZZHandling.mqh  17 kb
 
Georgiy Merts:

Ерунда, есть возможность - надо явно указать этот конструктор с параметрами. Я весьма широко использую наследование, где у наследника - нет параметров в конструкторе, а у предка - есть.

Вот, прямо мой рабочий код:

void CFlatSP_GBPCAD_PrCh_EPF::CFlatSP_GBPCAD_PrCh_EPF(double dMMRiskPercent):CChannelBackSPBinder_EPFT(CS_GBPCAD,PERIOD_M15,dMMRiskPercent)

У предка - три параметра в конструкторе, у потомка - один параметр. Можно и без праметров сделать.

Говорю ж - ты с ООП напутал.

Так у меня в классе ZZHandling конструкторе 2 параметра, а без параметров нет конструктора. От этого класса ZZHandling я наследуюсь. И вот так не получается:

class ZigZag : public ZZHandling {
}

А ваш пример из одной строки не очень понятен.

 
hoz:

Так у меня в классе ZZHandling конструкторе 2 параметра, а без параметров нет конструктора. От этого класса ZZHandling я наследуюсь. И вот так не получается:

Речь про объявление самого конструктора. Там, где описываешь конструктор - надо указать все параметры в предке и в потомке.

Должно быть что-то вроде:

ZigZag::ZigZag():ZZHandling(int iParameter1,int iParameter2)

{

// Тело конструктора


};

То есть, в конструкторе ZigZag - параметров нет, а в конструкторе ZZHandling - два параметра, и понятное дело - эти параметры при вызове должны быть уже известны.

Причина обращения: