Обсуждение статьи "Использование ресурсов в MQL5"

 

Опубликована статья Использование ресурсов в MQL5:

Программы на MQL5 позволяют не только автоматизировать рутинные вычисления, но и создавать полноценную графическую оболочку. Возможности по созданию по-настоящему интерактивных элементов управления стали практически такими же широкими, как и в классических языках программирования. Если вы хотите писать полноценные самостоятельные программы на MQL5, используйте в них ресурсы. Такие программы легче поддерживать и распространять.

Автор:  MetaQuotes

 

Теперь включать ресурсы в свои программы на MQL5 еще проще, для этого в редакторе MetaEditor 5 добавлена специальная штатная команда "Вставить ресурс" :



Вставка ресурсов

Для облегчения использования файлов ресурсов в разрабатываемых приложениях в меню "Сервис" предусмотрена команда "Вставить ресурсы Вставить ресурсы". Данная команда позволяет вставить в текущий файл объявление файлов ресурсов, выбранных из указанной папки, при помощи директивы #resource.

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

  • Файлы ресурсов могут быть расположены только внутри каталога /MQL5 клиентского терминала. Файлы вне этой папки не могут быть использованы.
  • В качестве файлов ресурсов могут быть использованы только файлы *.wav и *.bmp.

После этого в начало текущего файла будут добавлены соответствующие директивы вида:

#resource "\Images\example.bmp"
или
#resource "resources\example.bmp"

Путь к файлам ресурсов может быть указан двумя способами:

  • Относительно текущего файла (без символа "\" в начале пути)
    Данный способ используется, если файлы ресурсов расположены в той же папке, что и текущий файл, или в одной из ее подпапок.
  • Относительно каталога /MQL5 клиентского терминала (в начале пути указывается символ "\")
    Данный способ используется во всех остальных случаях.
 

Теперь включать ресурсы в ваши MQL5-программы стало еще проще. Для этого в MetaEditor 5 появилась специальная команда Insert Resources.


Resources Inserting

Для облегчения использования ресурсных файлов в разрабатываемых приложениях в меню "Инструменты" реализована команда "Ресурсы для вставки Insert Resources". Эта команда позволяет объявить файлы ресурсов из выбранной папки в текущем файле с помощью директивы #resource.

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

  • Файлы ресурсов могут находиться только в каталоге /MQL5 клиентского терминала. Файлы вне этой директории использовать нельзя.
  • В качестве файлов ресурсов могут быть использованы только файлы *.wav и *.bmp.

После выполнения указанных действий в начало файла будут добавлены соответствующие директивы. Например:

#resource "\Images\example.bmp"
или
#resource "resources\example.bmp"

Путь к файлам ресурсов может быть указан двумя способами:

  • Относительно текущего файла (без символа "\" в начале пути)
    Этот способ используется в том случае, если файлы ресурсов находятся в той же директории, что и текущий файл, или в одной из его подпапок.
  • Относительно каталога /MQL5 клиентского терминала (в начале пути указан символ "\")
    Этот способ используется во всех остальных случаях.
 

MetaTrader 5 Client Terminal build 730
MQL5: Added support for storing indicators in EX5 resources. 

#resource "Examples\Fractals.ex5"

Не мог бы кто-нибудь привести пример использования индикатора.

 
Когда в качестве ресурса в основной файл можно будет вставлять файлы индикаторов, вызываемые в основном файле через iCustom()? В папках терминала накопилось столько мусора, что уже даже не понятно что и к чему относится. Это небезопасно. Хочется научиться собирать один проект в один ex5 файл.
 
MoneyJinn:
Когда в качестве ресурса в основной файл можно будет вставлять файлы индикаторов, вызываемые в основном файле через iCustom()? В папках терминала накопилось столько мусора, что уже даже не понятно что и к чему относится. Это небезопасно. Хочется научиться собирать один проект в один ex5 файл.

Это было добавлено в 730 билде еще 24 ноября 2012:

  • MQL5: Добавлена поддержка хранения индикаторов в ресурсах EX5. При этом индикаторы в ресурсах не смогут работать со своими собственными ресурсами.


Вот простой пример. Сначала скомпилируйте стандарный индикатор CHO по указанному пути, затем этого эксперта, а потом бросьте его на чарт.

#resource "\\Indicators\\Examples\\CHO.EX5"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   int handle=iCustom(Symbol(),Period(),"::Indicators\\Examples\\CHO.EX5");
   if(handle!=INVALID_HANDLE)
     {
      Print("Indicator created!");
      IndicatorRelease(handle);
     }
//---
   return(0);
  }
void OnDeinit(const int reason)
  {
  }
void OnTick()
  {
  }

Обратите внимание на правильный выбор путей, модификатор области :: и правильное употребление слешей.

Мы специально сделали возможность упаковывать индикаторы в ресурсы, чтобы можно было делать самодостаточные и полноценные продукты.

 
Renat:

Это было добавлено в 730 билде еще 24 ноября 2012:

  • MQL5: Добавлена поддержка хранения индикаторов в ресурсах EX5. При этом индикаторы в ресурсах не смогут работать со своими собственными ресурсами.

...

Как это я пропустил этот момент? Сижу и жду этой возможности, а она уже давно есть. Спасибо. ))
 
Renat: 

Спасибо. Это то, что нужно.

 
Можно ли включать ресурсы в продукты ex4 (mt4)? Или эта функция "ресурсы" является исключительно функцией ex5 (mt5)?
 
FinGeR:

Не мог бы кто-нибудь привести пример использования индикатора.

Пример: https://www.mql5.com/ru/forum/3409#comment_408123

#resource "\\Indicators\\Examples\\CHO.EX5"
//+------------------------------------------------------------------+
//| Функция инициализации эксперта|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   int handle=iCustom(Symbol(),Period(),"::Indicators\\Examples\\CHO.EX5");
   if(handle!=INVALID_HANDLE)
     {
      Print("Indicator created!");
      IndicatorRelease(handle);
     }
//---
   return(0);
  }
void OnDeinit(const int reason)
  {
  }
void OnTick()
  {
  }
Обсуждение статьи "Использование ресурсов в MQL5"
  • www.mql5.com
Программы на MQL5 позволяют не только автоматизировать рутинные вычисления, но и создавать полноценную графическую оболочку.
 
4evermaat:
можно ли включать ресурсы в продукты ex4 (mt4)? Или эта функция "ресурсы" - исключительно функция ex5 (mt5)?
Только для MQL5.