Обсуждение статьи "Способы вызова индикаторов в MQL5"

 

Опубликована статья Способы вызова индикаторов в MQL5:

C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.

В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как получить данные индикатора в вашем эксперте? Обо всем этом рассказывается в данной статье.

Автор: KlimMalgin

 

Объясните, пожалуйста.

В "Получение хендла индикатора с помощью IndicatorCreate()"

Создаем массив

MqlParam params[];      // Массив для хранения параметров индикаторов

Без указания типа, потом меняем тип массива по потребности.

Как это работает? Можно использовать для любых структур или только для этой? Можно ли просто сменить тип у имеющегося массива?

 
Массив параметров типа MqlParam необходим функции IndicatorCreate() только при создании хэндла. Если захотите что-то изменить, то нужно "убить" текущий хэндл с помощью IndicatorRelease и создать новый. "Смена двигателя" индикатора на ходу не предусмотрена.
 

Но в статье по тексту

   ***
   // Задаем период медленной MA
   params[0].type         =TYPE_INT;
   params[0].integer_value=21;
   ***

и следом

   ***
   ArrayResize(params,2);
   // Шаг
   params[0].type         =TYPE_DOUBLE;
   params[0].double_value = 0.02;
   ***
ничего не удаляется, тип меняется...
 
Давайте на уровне общепита. Официант ставит на поднос блюда и относит вам заказ. Затем на то же блюдо он размещает блюда другого клиента и относит заказ ему. Означает ли это, что у вас тот же обед, что и у другого клиента?

 

Значит, разные обеды могут быть только на подносе официанта. Ладно, поэкспериментирую.

А массивы смешанных типов не планируются, типа [int][double]?

 
Silent:

Значит, разные обеды могут быть только на подносе официанта. Ладно, поэкспериментирую.

А массивы смешанных типов не планируются, типа [int][double]?

Используйте структуры, смотрите пример в справке  - https://www.mql5.com/ru/docs/basis/types/casting#casting_structure:

Еще один пример показывает, как можно организовать собственную функцию для получения из типа color представления цвета в RGB (Red,Green,Blue). Для этого создаем две структуры, имеющие одинаковый размер, но разный внутренний состав. Для удобства, добавим в структуру функцию, возвращающую цвет в представлении RGB в виде строки.

#property script_show_inputs
input color          testColor=clrBlue;// задайте цвет для тестирования
//--- структура для представления цвета в RGB
struct RGB
  {
   uchar             blue;          // синяя составляющая цвета
   uchar             green;         // зеленая составляющая цвета
   uchar             red;           // красная составляющая цвета
   uchar             empty;         // этот байт не используется
   string            toString();    // функция для получения в виде строки
  };
//--- функция для вывода цвета в виде строки
string RGB::toString(void)
  {
   string out="("+(string)red+":"+(string)green+":"+(string)blue+")";
   return out;
  }
//--- структура для хранения встроенного типа color 
struct builtColor
  {
   color             c;
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- переменная для хранения в RGB
   RGB colorRGB;
//--- переменная для хранения типа color
   builtColor test;
   test.c=testColor;
//--- приведение двух структур путем копирования содержимого
   colorRGB=test;
   Print("color ",test.c," = ",colorRGB.toString());
//---
  }

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Rosh:

Используйте структуры, смотрите пример в справке  - https://www.mql5.com/ru/docs/basis/types/casting#casting_structure:

Со структурами боле-мене понятно, меня массивы интересуют.

Спасибо.

 
Silent:

Со структурами боле-мене понятно, меня массивы интересуют.

Спасибо.

Сделайте структуру  и наберите массив этого типа.
 
мда...проще свой индикатор придумать и в код робота вшить чемэти хендлы кодить каждый раз... жесть 
Причина обращения: