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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Viktar Dzemikhau
3386
Viktar Dzemikhau  

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

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

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

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

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

Georgiy Merts
9179
Georgiy Merts  
hoz:
 

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

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

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

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

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

Viktar Dzemikhau
3386
Viktar Dzemikhau  
Georgiy Merts:

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

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

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

 

Georgiy Merts
9179
Georgiy Merts  

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

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

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

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

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

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

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

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

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

Viktar Dzemikhau
3386
Viktar Dzemikhau  
Georgiy Merts:

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

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

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

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

Файлы:
onZZ.mq5 17 kb
ZigZag.mqh 14 kb
Viktar Dzemikhau
3386
Viktar Dzemikhau  
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 {
}

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

Georgiy Merts
9179
Georgiy Merts  
hoz:

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

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

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

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

{

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


};

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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий