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

 

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

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

Автор:  MetaQuotes

 

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



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

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

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

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

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

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

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

  • Относительно текущего файла (без символа "\" в начале пути)
    Данный способ используется, если файлы ресурсов расположены в той же папке, что и текущий файл, или в одной из ее подпапок.
  • Относительно каталога /MQL5 клиентского терминала (в начале пути указывается символ "\")
    Данный способ используется во всех остальных случаях.
 
Когда в качестве ресурса в основной файл можно будет вставлять файлы индикаторов, вызываемые в основном файле через 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: 

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

 

Использование ресурсов в тестере должно работать ? А то не получается.Ошибка 4802.

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

#resource "\\Indicators\\Examples\\ADX.EX5"
#property tester_indicator "\\Indicators\\Examples\\ADX.EX5"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   int handle=iCustom(Symbol(),Period(),"::Indicators\\Examples\\ADX.EX5");
   if(handle!=INVALID_HANDLE)
     {
      ChartIndicatorAdd(0,1,handle);
     }
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
  
  return(rates_total);}

	          
 
Karlson:

Использование ресурсов в тестере должно работать ? А то не получается.Ошибка 4802.

А чего Вы хотели реально сделать?

У внешнего индикатора со своим собственным расчетным движком переопределить функцию расчета OnCalculate этого индикатора? Так нельзя.

 
Да.Я хотел в свой индикатор получать данные с Зигзага.А его включить ресурсом.
 

Обошел вот так.Но для проверки индикатора в тестере все равно потребуется наличие самого ЗЗ.

if(MQL5InfoInteger(MQL5_TESTING)==true) // если тестер то получаем из папки
     {
      f_h=iCustom(_Symbol,_Period,"Examples\\Zigzag",5,5,3);
     }
   else                                 // если на графике то используем встроенный
     {
      f_h=iCustom(_Symbol,_Period,"::Indicators\\Examples\\Zigzag.EX5",5,5,3);
     }

 Другой вариант ЗЗ встраивать полностью.

 

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

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

Renat, 2013.01.16 22:21

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

  • MQL5: Добавлена поддержка хранения индикаторов в ресурсах EX5. При этом индикаторы в ресурсах не смогут работать со своими собственными ресурсами.
Подскажите, пожалуйста, как можно в индикаторе, загруженном из ресурсов, создать графический объект типа OBJ_BITMAP_LABEL и наложить на него текст из TextOut?
Может только для TextOut сделать исключение - возможность работать со своими ресурсами программ загруженных из ресурсов?
Причина обращения: