Помогите правильно написать класс канала

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

решил переписать своего советника из процедурного стиля в ООП. 

Написал примерно такой код: 

class channel
  {
   
public:
   
   double            high[];
   double            low[];
   int               period;
   double            factor;
   double            delta;
   

   double            h;
   double            l;
   double            center;


                     channel(void)
     {
      center=0;
      h =  EMPTY_VALUE;
      l = -EMPTY_VALUE;
     }

                    ~channel(void);
  };

На выходе хочу получить верх канала и низ канала. это 2 разных цены. 

как правильней организовать такой канал ну к примеру для канала Дончиана? 

Например: 

h = Get_h (массив high, правый максимум, количество максимумов);

l = Get_l (так же самоe) ;

или 

Get_H_L ((массив high, массив low, номер правого бара, количество баров)
{
 	h = ArrayMaximum(...);
 	l = ArrayMinimum(...) ;
}



Правильно ли вписывать h и l в поля класса или правильней их получать через метод? 

Может есть какой то другой подход? Чем тогда он лучше ? 

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

period = W_PERIOD ;

Зачем вообще в таком случае заморачиваться с классами когда можно просто понаписывать 2 фукции И не париться ? В чем преимущество такого класса? 

prostotrader
8046
prostotrader  
https://www.mql5.com/ru/job
Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • www.mql5.com
Многиепары инструментов рано или поздно вступают в корреляцию (однонаправленное илиразнонаправленное симметричное движение). Об этом много писалось на форуме в www.mql5.com Приручной торговле я использовал онлайн таблицу корреляции: https://www.oanda.com/lang/ru/forex-trading/analysis/currency-correlation Рассчитываетсякорреляция по формуле...
Maxim Kuznetsov
12927
Maxim Kuznetsov  
Dmitiry Ananiev:

решил переписать своего советника из процедурного стиля в ООП. 

Написал примерно такой код: 

На выходе хочу получить верх канала и низ канала. это 2 разных цены. 

как правильней организовать такой канал ну к примеру для канала Дончиана? 

Например: 

или 



Правильно ли вписывать h и l в поля класса или правильней их получать через метод? 

Может есть какой то другой подход? Чем тогда он лучше ? 

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

period = W_PERIOD ;

Зачем вообще в таком случае заморачиваться с классами когда можно просто понаписывать 2 фукции И не париться ? В чем преимущество такого класса? 

просто переводить рабочий код из "процедурного" в такой же но с классом - бесполезное и даже вредное занятие.

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

И ещё, в местной песочнице принято производить классы из CObject и прочих CIndicator. Не знаток "стандартной библиотеки", но в ней или кодобазе наверняка есть какой-нить CChannelIndicator который уже реализует необходимый минимум для каналов
Koldun Zloy
728
Koldun Zloy  

Главный принцип ООП: Если Вы создаёте какой-то класс, Вы должны знать зачем Вы это делаете. Не знаете не создавайте.

Из того что Вы сказали, совершенно непонятно что Вы с ним собираетесь делать.

Поэтому непонятно как его правильно написать.


Andrei
3096
Andrei  
Dmitiry Ananiev:

решил переписать своего советника из процедурного стиля в ООП. 

Переписывать из процедурного кода в ООП имеет смысл только для упаковки, когда код уже готов и отлажен.

Если планируется работа с кодом, то ОПП лишь усложнит понимание и как следствие работу с ним, что впрочем является преимуществом когда код пишется за деньги и важно количество строк кода.

Koldun Zloy
728
Koldun Zloy  
Andrei:

Переписывать из процедурного кода в ООП имеет смысл только для упаковки, когда код уже готов и отлажен.

Если планируется работа с кодом, то ОПП лишь усложнит понимание и как следствие работу с ним, что впрочем является преимуществом когда код пишется за деньги и важно количество строк кода.

Просто бред.

Andrei
3096
Andrei  
Также не стоит забывать что классы в ООП не предназначены для обмена информации между собой, что делает невозможным адекватное написание вычислительных алгоритмов, которые требуют отладки и обмена данных из функций и переменных в разных классах. Для этого нужно конструировать различные хитроумные интерфейсы.
Georgiy Merts
9181
Georgiy Merts  
Andrei:
Также не стоит забывать что классы в ООП не предназначены для обмена информации между собой, что делает невозможным адекватное написание вычислительных алгоритмов, которые требуют отладки и обмена данных из функций в разных классах.

Что за ерунда ?

У меня классы в ООП только тем и занимаются, что "обмениваются информацией между собой".

Чисто вычислительные алгоритмы (скажем, МНК) - у меня также организованы в виде класса, на вход которому подаются исходные данные, а с него можно получить коэффициенты степенного многочлена.

Georgiy Merts
9181
Georgiy Merts  
Dmitiry Ananiev:
 

Правильно ли вписывать h и l в поля класса или правильней их получать через метод? 

Может есть какой то другой подход? Чем тогда он лучше ? 

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

period = W_PERIOD ;

Зачем вообще в таком случае заморачиваться с классами когда можно просто понаписывать 2 фукции И не париться ? В чем преимущество такого класса? 

ООП позволяет гораздо эффективнее проводить дальнейшую поддержку и модификацию кода.

Как правило, объекты строятся по принципу "внутри - данные, снаружи - функции".

То есть, массивы значений верхней и нижней границ (и, возможно, медианы) - у тебя хранятся в защищенной или приватной секции. А пользователь твоего канала - может получить их через соответствующие функции. То есть, функции доступа к данным - представляют интерфейс работы с каналом. Этот интерфейс можно даже вынести в класс-предок, у которого все функции чисто виртуальны (приравнены к нулю). И пользователь канала - получает этот самый виртуальный интерфейс, не имея никакого доступа к реальным данным.

Такая организация позволяет не думать о том, на какие блоки повлияют изменения внутри канала.

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

И наоборот - ты, когда пишешь пользователя канала - совершенно не задумываешься над тем, как у тебя организованы данные внутри класса. Есть интерфейс - и ты его и используешь для получения границ канала.

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

Andrei
3096
Andrei  
Georgiy Merts:

Что за ерунда ?

У меня классы в ООП только тем и занимаются, что "обмениваются информацией между собой".

Чисто вычислительные алгоритмы (скажем, МНК) - у меня также организованы в виде класса, на вход которому подаются исходные данные, а с него можно получить коэффициенты степенного многочлена.

У как эти коэффициенты извлекаются из класса?

Andrei
3096
Andrei  
Georgiy Merts:

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

Вот именно организацию данных внутри класса и нужно знать для процесса отладки и написания кода, так как это постоянно меняется по ходу дела.

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