о работе функции iCustom или как скопировать буфер индикатора!

 

Добрый день! 

мне нужно вытащить данные из пользовательского индикатора и при этом не нагружать систему перерасчетом индикатора N-количество раз. 

возможно ли в MQL4 вызвать однократно функцию iCustom и скопировать содержимое буфера индикатора ? 

если да то как это сделать? 

 
Denis Naumov:

Добрый день! 

мне нужно вытащить данные из пользовательского индикатора и при этом не нагружать систему перерасчетом индикатора N-количество раз. 

возможно ли в MQL4 вызвать однократно функцию iCustom и скопировать содержимое буфера индикатора ? 

если да то как это сделать? 


Если вам надо получить значение индикатора только после закрытия свечи и открытия новой то примерно так:

datetime TM = 0;
....

void OnTick()
{
 .....
 if (TM!=Time[0])
 {
    ... iCustom();
    TM = Time[0];
 }
.....

}
 
Vitalii Ananev:


Если вам надо получить значение индикатора только после закрытия свечи и открытия новой то примерно так:


не,  iCustom  я так понял выполняет добавление индикатора на график и каждый раз его рассчитывает  для всех значений и получает нужное нам значение и выполняет этот расчет каждый тик. мне нужно выгрузить значение индикатора в csv файл и потом уже анализировать 
 
Denis Naumov:

не,  iCustom  я так понял выполняет добавление индикатора на график и каждый раз его рассчитывает  для всех значений и получает нужное нам значение и выполняет этот расчет каждый тик. мне нужно выгрузить значение индикатора в csv файл и потом уже анализировать 

Тогда исправляйте сам индикатор, что бы он не считал каждый тик. 
 
текст индикатора не доступен. он не мой 
 
индикатор рисует стрелочки на графике, есть ли какой либо способ снять информацию с экрана? 
 
Denis Naumov:
индикатор рисует стрелочки на графике, есть ли какой либо способ снять информацию с экрана? 


Индикаторные буферы у него есть? Если есть то их значения должны показываться в окне данных терминала, и их можно считать с помощью функции iCustom. Если нет то надо искать объекты на графике с помощью функции ObjectFind()

P.S. Хотя нет для функции ObjectFind() надо знать имя объекта. Если имя заранее не известно тогда только путем полного перебора всех объектов на графике и проверки их типа если тип стрелка ( OBJ_ARROW_UP или OBJ_ARROW_DOWN) то это ваш клиент.

 
Vitalii Ananev:


Индикаторные буферы у него есть? Если есть то их значения должны показываться в окне данных терминала, и их можно считать с помощью функции iCustom. Если нет то надо искать объекты на графике с помощью функции ObjectFind()

P.S. Хотя нет для функции ObjectFind() надо знать имя объекта. Если имя заранее не известно тогда только путем полного перебора всех объектов на графике и проверки их типа если тип стрелка ( OBJ_ARROW_UP или OBJ_ARROW_DOWN) то это ваш клиент.


Индикаторные буферы у него есть? Если есть то их значения должны показываться в окне данных терминала, и их можно считать с помощью функции iCustom.

можно пример кода на MQL4

 
объектов вида OBJ_ARROW_UP или OBJ_ARROW_DOWN нету 
 
Denis Naumov:


Индикаторные буферы у него есть? Если есть то их значения должны показываться в окне данных терминала, и их можно считать с помощью функции iCustom.

можно пример кода на MQL4


https://www.mql5.com/ru/docs/indicators/icustom

iCustom

Возвращает значение указанного пользовательского индикатора.

double  iCustom(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   string       name,             // папка/имя_пользовательского индикатора
   ...                            // список входных параметров индикатора
   int          mode,             // источник данных
   int          shift             // сдвиг
   );

Параметры

symbol

[in]  Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.

timeframe

[in]  Период. Может быть одним из значений перечисления ENUM_TIMEFRAMES. 0 означает период текущего графика.

name

[in]  Имя пользовательского индикатора, содержащее путь относительно корневой директории индикаторов (MQL4/Indicators/). Если индикатор находится в поддиректории, например, в MQL4/Indicators/Examples, то имя должно выглядеть соответственно, а именно – "Examples\\имя_индикатора" (обязательно указание двойного обратного слеша вместо одиночного в качестве разделителя).

...

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

mode

[in]  Индекс линии индикатора. Может принимать значения от 0 до 7 и соответствовать индексу, указанному при вызове функции SetIndexBuffer().

shift

[in]  Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

Возвращаемое значение

Численное значение указанного пользовательского индикатора. Пользовательский индикатор должен быть скомпилирован (файл с расширением EX4) и находиться в директории каталог_терминала\MQL4\\Indicators.

Пример:

  double val=iCustom(NULL,0,"SampleInd",13,1,0);

 

Параметр mode это есть номер индикаторного буфера.

Документация по MQL5: Технические индикаторы / iCustom
Документация по MQL5: Технические индикаторы / iCustom
  • www.mql5.com
Технические индикаторы / iCustom - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vitalii Ananev:


https://www.mql5.com/ru/docs/indicators/icustom

iCustom

Возвращает значение указанного пользовательского индикатора.

double  iCustom(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   string       name,             // папка/имя_пользовательского индикатора
   ...                            // список входных параметров индикатора
   int          mode,             // источник данных
   int          shift             // сдвиг
   );

Параметры

symbol

[in]  Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.

timeframe

[in]  Период. Может быть одним из значений перечисления ENUM_TIMEFRAMES. 0 означает период текущего графика.

name

[in]  Имя пользовательского индикатора, содержащее путь относительно корневой директории индикаторов (MQL4/Indicators/). Если индикатор находится в поддиректории, например, в MQL4/Indicators/Examples, то имя должно выглядеть соответственно, а именно – "Examples\\имя_индикатора" (обязательно указание двойного обратного слеша вместо одиночного в качестве разделителя).

...

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

mode

[in]  Индекс линии индикатора. Может принимать значения от 0 до 7 и соответствовать индексу, указанному при вызове функции SetIndexBuffer().

shift

[in]  Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

Возвращаемое значение

Численное значение указанного пользовательского индикатора. Пользовательский индикатор должен быть скомпилирован (файл с расширением EX4) и находиться в директории каталог_терминала\MQL4\\Indicators.

Пример:

  double val=iCustom(NULL,0,"SampleInd",13,1,0);

 


ну понятно, а все значения индикаторов не получается выгрузить в буфер?  

  double val=iCustom(NULL,0,"SampleInd",13,1,0);

Причина обращения: