• ВНИМАНИЕ! С 1-го октября 2020 года бонусы за общение будут начисляться только на счета типа Standard Promo MT5.
    ВСЕМ участникам промоакции "Amega ОБЩЕНИЕ 2.0" необходимо оставить новую заявку! Обсуждения в теме...

Классы-обертки для индикаторов

RegXRay

Новичок
Регистрация
11 Июл 2018
Сообщения
505
Поблагодарили
2
Поинты
0.00
Пол
Муж.
В одной из статей из серии статей "УНИВЕРСАЛЬНЫЙ ТОРГОВЫЙ ЭКСПЕРТ" познакомился со объектно-ориентированным способом определения индикаторов. Более подробно можно узнать из ссылки ниже.
В этой теме предлагаю делиться своими классами для различных пользовательских индикаторов.
Например для индикатора SuperTrend supertrend.zip
Вот такой класс-обертка
Код:
//+------------------------------------------------------------------+
//|                                                 CSuperTrend.mqh  |
//+------------------------------------------------------------------+
enum Trend{Up,Dn,None};
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CSuperTrend
  {
private:
   int               m_supertrend_handle;       // Хендл индикатора
   ENUM_TIMEFRAMES   m_timeframe;               // Таймфрейм
   string            m_symbol;                  // Инструмент
   int               m_period;                  // Период
   double            m_multiplier;              // множитель
   void              Init(void);

public:
                     CSuperTrend(void);
/*Params*/
   //Set
   void              Timeframe(ENUM_TIMEFRAMES  timeframe);//
   void              Symbol(string symbol);
   void              Period(int period);
   void              Multiplier(double multiplier);
   //Get
   ENUM_TIMEFRAMES   Timeframe(void);
   string            Symbol(void);
   int               Period(void);
   double            Multiplier(void);

/*Out values*/
   double            Value(int index);
   Trend             Trend(int index);
  };
//+------------------------------------------------------------------+
//| Конструктор по умолчанию.                                        |
//+------------------------------------------------------------------+
CSuperTrend::CSuperTrend(void) :
m_symbol(_Symbol),
m_timeframe(PERIOD_CURRENT),
m_period(18),
m_multiplier(1.7)
  {
  }
//+------------------------------------------------------------------+
//| Инициализация.                                                   |
//+------------------------------------------------------------------+
CSuperTrend::Init(void)
  {
   if(m_supertrend_handle!=INVALID_HANDLE)
     {
      bool res=IndicatorRelease(m_supertrend_handle);
      if(!res)
        {
         string text="Realise SuperTrend indicator failed. Error ID: "+(string)GetLastError();
        }
     }
   m_supertrend_handle=iCustom(m_symbol,m_timeframe,"supertrend",m_period,m_multiplier);

   if(m_supertrend_handle==INVALID_HANDLE)
     {
      string params="(Period:"+(string)m_period+", Multipier:"+(string)m_multiplier+")";
      string text="Create SuperTrend indicator failed"+params+". Error ID: "+(string)GetLastError();
     }

  }
//+------------------------------------------------------------------+
//| Установка таймфрейма.                                            |
//+------------------------------------------------------------------+
void CSuperTrend::Timeframe(ENUM_TIMEFRAMES  tf)
  {
   m_timeframe=tf;
   if(m_supertrend_handle!=INVALID_HANDLE)
      Init();
  }
//+------------------------------------------------------------------+
//| Возвращает текущий таймфрейм.                                    |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES  CSuperTrend::Timeframe(void)
  {
   return m_timeframe;
  }
//+------------------------------------------------------------------+
//| Устанавливает символ, на котором должен быть рассчитан индикатор |
//+------------------------------------------------------------------+
void CSuperTrend::Symbol(string symbol)
  {
   m_symbol=symbol;
   if(m_supertrend_handle!=INVALID_HANDLE)
      Init();
  }
//+------------------------------------------------------------------+
//| Возвращает символ, для которого рассчитывается индикатор         |
//+------------------------------------------------------------------+
string CSuperTrend::Symbol(void)
  {
   return m_symbol;
  }
//+------------------------------------------------------------------+
//| Устанавливает период расчета индикатора|
//+------------------------------------------------------------------+
void CSuperTrend::Period(int period)
  {
   m_period=period;
   if(m_supertrend_handle!=INVALID_HANDLE)
      Init();
  }
//+------------------------------------------------------------------+
//| Возвращает период       |
//+------------------------------------------------------------------+
int CSuperTrend::Period(void)
  {
   return m_period;
  }
//+------------------------------------------------------------------+
//| Устанавливает множитель|
//+------------------------------------------------------------------+
void CSuperTrend::Multiplier(double multiplier)
  {
   m_multiplier=multiplier;
   if(m_supertrend_handle!=INVALID_HANDLE)
      Init();
  }
//+------------------------------------------------------------------+
//| Возвращает множитель       |
//+------------------------------------------------------------------+
double CSuperTrend::Multiplier(void)
  {
   return m_multiplier;
  }
//
// Значение 0-ого буфера  индикатора на баре index
//+------------------------------------------------------------------+
double            CSuperTrend::Value(int index)
  {
   if(m_supertrend_handle==INVALID_HANDLE)
      Init();
   double values[];
   if(CopyBuffer(m_supertrend_handle,0,index,1,values))
      return values[0];
   return EMPTY_VALUE;
  }
// Определяем тренд на баре index
//+------------------------------------------------------------------+
Trend            CSuperTrend::Trend(int index)
  {
   double val=Value(index);
   double close=iClose(m_symbol,m_timeframe,0);

   return (val>close)?Dn:((val<close)?Up:None);
  }
//+------------------------------------------------------------------+
 

Вложения

Yra

Общаюсь с выгодой
Регистрация
25 Дек 2018
Сообщения
1,144
Поблагодарили
98
Поинты
0.50
Пол
Муж.
RegXRay Здравствуйте
вы тут пишете что продолжите описание алгоритмов а ничего не пишете а меня заинтересовало, да меня интересуют любые открытые коды на языке MQL5 так как очень хочу и это изучить что=бы переписать все свои программы на это язык.
 

Yra

Общаюсь с выгодой
Регистрация
25 Дек 2018
Сообщения
1,144
Поблагодарили
98
Поинты
0.50
Пол
Муж.
В одной из статей из серии статей "УНИВЕРСАЛЬНЫЙ ТОРГОВЫЙ ЭКСПЕРТ" познакомился со объектно-ориентированным способом определения индикаторов. Более подробно можно узнать из ссылки ниже.
В этой теме предлагаю делиться своими классами для различных пользовательских индикаторов.
Например для индикатора SuperTrend supertrend.zip
Вот такой класс-обертка
[/CODE]
Здравствуйте я очень сильно извиняюсь даже как-то не удобно спрашивать,что это такое "класс-обертка для индикатора" на языке QL5 ,на MQL четвертом я не встречал такое выражение потому что самоучка пожалуйста кто знает поясните мне пожалуйста.
 
Сверху