Метод Main в классе CiMA

 

Всех приветствую!

Никак не могу разобраться с классом CiMA (скользящая средняя). В оном классе присутствуют, среди прочих, метод Create, который бы, вроде, создает индикатор. Хочу поблагодарить составителей документации ибо все предельно просто и понятно:

1. Что значит создает? Видимо, как Господь Бог землю? Куда девает данные созданного? И как к ним добраться? Или без танцев с бубнами не обойтись? Так мотив бы напели!!!!!

2. Метод Main . Доки говорят, что получает элемент буфера по указанному индексу. Супер гениально!!!! Какого, ......., такого, .....ка, буфера????????

3. Есть метод GetData. С разным набором аргументов. В каждом наборе присутствует буфер! И Бог бы с ним, с буфером! Его можно создать функцией SetIndexBuffer(привязать массив к индексу) и в него можно скопировать функцией CopyBuffer. Только вот что копировать? Эта функция просит хэндл индикатора. Где в методе Create этот самый хэндл? 

И вообще странно, зачем городить весь этот ООП, если в примерах документации 2/3 кода в стиле Си?!

Буду очень благодарен, ежель кто откликнется и просветит меня, сирого...))))


 
Alexey Lobanov:

Всех приветствую!

Никак не могу разобраться с классом CiMA (скользящая средняя). В оном классе присутствуют, среди прочих, метод Create, который бы, вроде, создает индикатор. Хочу поблагодарить составителей документации ибо все предельно просто и понятно:

1. Что значит создает? Видимо, как Господь Бог землю? Куда девает данные созданного? И как к ним добраться? Или без танцев с бубнами не обойтись? Так мотив бы напели!!!!!

2. Метод Main . Доки говорят, что получает элемент буфера по указанному индексу. Супер гениально!!!! Какого, ......., такого, .....ка, буфера????????

3. Есть метод GetData. С разным набором аргументов. В каждом наборе присутствует буфер! И Бог бы с ним, с буфером! Его можно создать функцией SetIndexBuffer(привязать массив к индексу) и в него можно скопировать функцией CopyBuffer. Только вот что копировать? Эта функция просит хэндл индикатора. Где в методе Create этот самый хэндл? 

И вообще странно, зачем городить весь этот ООП, если в примерах документации 2/3 кода в стиле Си?!

Буду очень благодарен, ежель кто откликнется и просветит меня, сирого...))))


Если Вам трудно с ООП и у Вас не хватает опыта в использовании ООП - ЗАЧЕМ Вы пытаетесь это использовать? Работайте с простыми кодами. Создавайте индикатор как в справке: iMA

Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
iMA - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Вопрос не в моем опыте в ООП. Он, поверьте, может и не велик, но достаточен. Вопрос в документации. Точнее, в ее неясности. Например, в описании метода Create. Что значит "создает"? 
 
Alexey Lobanov #:
Вопрос не в моем опыте в ООП. Он, поверьте, может и не велик, но достаточен. Вопрос в документации. Точнее, в ее неясности. Например, в описании метода Create. Что значит "создает"? 
Пример работы с двумя индикаторами класса CiMA
Документация по MQL5: Стандартная библиотека / Индикаторы / Индикаторы тренда / CiMA
Документация по MQL5: Стандартная библиотека / Индикаторы / Индикаторы тренда / CiMA
  • www.mql5.com
CiMA - Индикаторы тренда - Индикаторы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Lobanov #:
Вопрос не в моем опыте в ООП. Он, поверьте, может и не велик, но достаточен. Вопрос в документации. Точнее, в ее неясности. Например, в описании метода Create. Что значит "создает"? 

Что не ясно в 

Create

Создает индикатор


Создает индикатор с указанными параметрами. Для обновления и получения значений индикатора используйте Refresh() и GetData().

bool  Create(
   string           string,        // символ
   ENUM_TIMEFRAMES  period,        // период
   int              ma_period,     // период усреднения
   int              ma_shift,      // смещение
   ENUM_MA_METHOD   ma_method,     // метод усреднения
   int              applied        // тип цены, хэндл
   )


Вы слово "создаёт" интерпретируете по-своему? Создаёт означает: до этого момента не было индикатора, а после метода Create - есть индикатор. 

Документация по MQL5: Стандартная библиотека / Индикаторы / Индикаторы тренда / CiMA / Create
Документация по MQL5: Стандартная библиотека / Индикаторы / Индикаторы тренда / CiMA / Create
  • www.mql5.com
Create(string,ENUM_TIMEFRAMES,int,int,ENUM_MA_METHOD,int) - CiMA - Индикаторы тренда - Индикаторы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

А здесь что не ясно? 

Main

Получает данные буфера


Получает элемент буфера по указанному индексу.

double  Main(
   int  index      // индекс
   ) const


Речь про индикатор iMA и у этого индикатора ТОЛЬКО ОДИН БУФЕР. Учите матчасть.

Документация по MQL5: Стандартная библиотека / Индикаторы / Индикаторы тренда / CiMA / Main
Документация по MQL5: Стандартная библиотека / Индикаторы / Индикаторы тренда / CiMA / Main
  • www.mql5.com
Main(int) - CiMA - Индикаторы тренда - Индикаторы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov #:

А здесь что не ясно? 

Main

Получает данные буфера


Получает элемент буфера по указанному индексу.


Речь про индикатор iMA и у этого индикатора ТОЛЬКО ОДИН БУФЕР. Учите матчасть.

 Здесь не ясно ВСЁ! Ибо не работает метод Main. Приходится через массивы и буферы добираться до значений. 

Покопался немного под капотом всех этих классов. Пока не дошло, как этот самый Main фунциклирует. Будет время, загляну глубже и если пойму, то поделюсь светлыми мыслями.

 

Кажется, стало ясно!  Вот функция Refresh класса CIndicatorBuffer. Именно в ней происходит копирование данных в буфер. Там еще похожая есть RefreshCurrent.

Т.е., без предварительного вызова этой функции данных в буфере не будет!!!! Проверил. Так и есть. Без вызова refresh Main выдает белиберду!  Ну что же, матчасть изучил , чего и модератору советую, в том числе поправить мануал))))). 

bool CIndicatorBuffer::Refresh(const int handle,const int num)
  {
//--- check
   if(handle==INVALID_HANDLE)
     {
      SetUserError(ERR_USER_INVALID_HANDLE);
      return(false);
     }
//---
   m_data_total=CopyBuffer(handle,num,-m_offset,m_size,m_data);
//---
   return(m_data_total>0);
  }
 

А прочитать то, что написано не смогли?

Создает индикатор с указанными параметрами. Для обновления и получения значений индикатора используйте Refresh() и GetData().

 
Alexey Lobanov #:


То есть Вы даже не смотрели пример, который я создал?

 
В Create выполняется загрузка индикатора - вызов функции iMA() - то, что обычно в OnInit() делаем.
Причина обращения: