Функция iCustom

 
Коллеги, кто-то реально пользовался функцией iCustom для обращения к пользовательскому индикатору? Проблема похоже с указанием пути к индикатору. iCustom упорно возвращает Invalid Hndle.
Как правильно обратиться к индикатору, в какую папку его нужно положить?
 
В папку к индикаторам.
 
Oksana Berenko:
В папку к индикаторам.
Не правильно, Оксана... Как вопрос во всех темах, так и ответ надо давать "ВО ВСЕ ПАПКИ СРАЗУ" быстрее получится.
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

iCustom

Vasiliy Sokolov, 2016.07.04 13:42

Здесь телепатов нет. Приведите Ваш код обращения к индикатору через iCustom. Также уточните о какой платформе идет речь.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

iCustom

Alexey Viktorov, 2016.07.04 13:48

Попробую по-телепатить...

В mql5 делается попытка обратиться к пользовательскому индикатору так-же как в mql4.

Ну если телепат из меня никакой, то уж извиняйте...


 
Перенесено: Vasiliy Sokolov:
По всей видимости нет, т.к. пациент говорит, цитирую:  "упорно возвращает Invalid Hndle". Т.е. сознательно работает именно с хендлом. Возможно чтение сонника нам поможет.<
 
Перенесено: Ihor Herasko:

Раз Invalid Handle, то речь идет именно об МТ5. Поставьте после вызова iCustom:

Print("Не удалось получить Handle. Ошибка №", GetLastError());

 и посмотрите, в чем именно дело.

 
Oleg Shenker:
Коллеги, кто-то реально пользовался функцией iCustom для обращения к пользовательскому индикатору? Проблема похоже с указанием пути к индикатору. iCustom упорно возвращает Invalid Hndle.
Как правильно обратиться к индикатору, в какую папку его нужно положить?

Главное меню - Файл - Открыть каталог данных, дальше: MQL5 - Indicators. После копирования файла, если исходник, его надо откомпилировать - открыть в редакторе и нажать на кнопку "компилировать".

Имя файла для в ставки в iCustom() лучше копировать мышкой, расширение не нужно. 

 

Извиняюсь, что не указал детали сразу.

В функции OnInit() советника запрашиваю хендл индикатора, к буферам которого в дальнейшем хочу обращаться.

Запрос выглядит так:

int OnInit()
  {
//--- get indicator handle
   FL_Handle = iCustom( NULL, 0, "\\FractalsLevelModified", 20);
   if(FL_Handle <= 0) return(-1);
   Comment("Recieved Indicator Handle " + (string)FL_Handle);

   
//---
   return(INIT_SUCCEEDED);
  } 

 

Индикатор имеет единственный параметр? который я указываю. Сам индикатор компилируется  и отлично работает. Все рисует как положено.

Пробовал копировать скомпилированный файл индикатора и в папку C:\Program Files\MetaTrader 5\MQL5\Indicators, эта папка изначально пустая, и в папку 

C:\Users\UserName\AppData\Roaming\MetaQuotes\Terminal\9DF863192B2256668BB7189BB5EA0122\MQL5\Indicators (в которой лежат все откомпилированные файлы). Функция все равно возвращает Negative Handle.

В чем может быть проблема? 

 
Да, платформа MQL5.
 
Dmitry Fedoseev:

Главное меню - Файл - Открыть каталог данных, дальше: MQL5 - Indicators. После копирования файла, если исходник, его надо откомпилировать - открыть в редакторе и нажать на кнопку "компилировать".

Имя файла для в ставки в iCustom() лучше копировать мышкой, расширение не нужно. 

Спасибо. А нужно прописывать весь путь C:\Users\UserName\AppData\Roaming\MetaQuotes\Terminal\9DF863192B2256668BB7189BB5EA0122\MQL5\Indicators? Или достаточно просто указать Indicators\\FileName?
 
Oleg Shenker:

Извиняюсь, что не указал детали сразу.

В функции OnInit() советника запрашиваю хендл индикатора, к буферам которого в дальнейшем хочу обращаться.

Запрос выглядит так:

 

Индикатор имеет единственный параметр? который я указываю. Сам индикатор компилируется  и отлично работает. Все рисует как положено.

Пробовал копировать скомпилированный файл индикатора и в папку C:\Program Files\MetaTrader 5\MQL5\Indicators, эта папка изначально пустая, и в папку 

C:\Users\UserName\AppData\Roaming\MetaQuotes\Terminal\9DF863192B2256668BB7189BB5EA0122\MQL5\Indicators (в которой лежат все откомпилированные файлы). Функция все равно возвращает Negative Handle.

В чем может быть проблема? 

из справки

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

Возвращает хэндл указанного технического индикатора, в случае неудачи возвращает INVALID_HANDLE. Для освобождения памяти компьютера от неиспользуемого больше индикатора служит функция IndicatorRelease(), которой передается хэндл этого индикатора.

Для проверки на успешность создания нужно выполнять операцию сравнения с  INVALID_HANDLE, убрать слеши, путь, расширение указывать необязательно

Примерно так

 

int OnInit()   { //--- get indicator handle
   FL_Handle = iCustom( NULL, 0, "FractalsLevelModified", 20);
   if(FL_Handle == INVALID_HANDLE ) return(-1);
   Comment("Recieved Indicator Handle " + (string)FL_Handle);

   
//---
   return(INIT_SUCCEEDED);
  }  
Причина обращения: