Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1360

 
Fast235 #:
в один файл и упаковывается все

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

Например, Индикатор работает с OnCalculate() и не может работать с OnTrade(). Как можно это все в один ехе? Научите!

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Выполнение программ - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Dmitriy VC #:

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

можете продолжать дальше так думать)

 
Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Выполнение программ - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
[Удален]  

Вот индикатор:

#property version   "1.00"
#property strict
#property indicator_chart_window

int OnInit()
   {
   
   return(INIT_SUCCEEDED);
   }

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[])
   {
   printf("preved medved!");
   return(rates_total);
   }

Вот эксперт:

#property version   "1.00"
#property strict
#resource "\\Indicators\\Res_Ind.ex4"

int OnInit()
   {
   return(INIT_SUCCEEDED);
   }

void OnDeinit(const int reason)
   {
   
   }

void OnTick()
   {
   double val=iCustom(Symbol(),0,"::Indicators\\Res_Ind.ex4",0,0);
   }

Вот всё в одном файле:

Четвёрка правда, но в пятёрке также.
Файлы:
Res_Exp.ex4  12 kb
[Удален]  
А отдельно 2 файла в Маркете не разместить. Такова политика.
 
Aleksei Stepanenko #:

Вот индикатор:

Вот эксперт:

Вот всё в одном файле:

Четвёрка правда, но в пятёрке также.

У вас скомпилирован только файл Эксперта.

Попробуйте, хотя-бы простым графическим объектом наполнить индикатор, чтобы он вызывался Экспертом. Затем после компиляции, переименуйте или удалите Res_Ind.ex4, как бы отправили на Маркет только файл Эксперта. Клиент получит неработающую программу.

 
Aleksei Stepanenko #:
А отдельно 2 файла в Маркете не разместить. Такова политика.
О чем и речь...
 
Dmitriy VC #:

У вас скомпилирован только файл Эксперта.

Попробуйте, хотя-бы простым графическим объектом наполнить индикатор, чтобы он вызывался Экспертом. Затем после компиляции, переименуйте или удалите Res_Ind.ex4, как бы отправили на Маркет только файл Эксперта. Клиент получит неработающую программу.

Да нельзя-же быть таким упёртым… Сказано, что индикатор подключенный ресурсом включается в исполняемый файл советника, значит так и есть.

А вот тот факт, что ваш индикатор рисует графические объекты, а советник должен их читать, это большая проблема. Графические объекты доступны только при тестировании с визуализацией, а автовалидатор тестирует без оного, соответственно свойств объектов не видит…

 
Alexey Viktorov #:

Сказано, что индикатор подключенный ресурсом включается в исполняемый файл советника, значит так и есть.

Индикатор в отдельном окне

//+------------------------------------------------------------------+
//|                                                          win.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {

   IndicatorSetString(INDICATOR_SHORTNAME,"win");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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 value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Компилируем Индикатор -->  win.ex5.

Эксперт с этим Индикатором в ресурсе

//+------------------------------------------------------------------+
//|                                                          exp.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#resource "\\Indicators\\win.ex5"
char      number    = -1;
int       handle    = INVALID_HANDLE;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

   if(number<0)
     {
      handle=iCustom(_Symbol,_Period,"win.ex5");
      number=char(ChartGetInteger(0,CHART_WINDOWS_TOTAL));

      if(handle!=INVALID_HANDLE)
        {
         ChartIndicatorAdd(0,number,handle);
        }
     }

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(reason==REASON_REMOVE)
     {
      ChartIndicatorDelete(0,int(ChartWindowFind(0,"win")),"win");
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+

Компилируем Эксперта -->  exp.ex5.

Запускаем Эксперта, на графике есть окно индикатора.

Публикуем в Маркете один файл эксперта exp.ex5 (фактически удаляем файл индикатора win.ex5)

Запускаем Эксперта, на графике нет окна индикатора.

Восстанавливаем удаленный файл win.ex5.

Запускаем Эксперта, на графике есть окно индикатора.


Вывод: код Индикатора не включается в код Эксперта. Для нормальной работы Эксперта с ресурсным Индикатором необходим исполняемый файл Индикатора указанного в ресурсе.


Повторю свой вопрос:

как опубликовать в Маркете, когда имеется Эксперт с кастомным Индикатором, библиотекой, т.е. для нормальной работы Эксперта нужно больше чем один файл?

Файлы:
win.mq5  2 kb
exp.mq5  4 kb
 
Dmitriy VC #:

Индикатор в отдельном окне

Компилируем Индикатор -->  win.ex5.

Эксперт с этим Индикатором в ресурсе

Компилируем Эксперта -->  exp.ex5.

Запускаем Эксперта, на графике есть окно индикатора.

Публикуем в Маркете один файл эксперта exp.ex5 (фактически удаляем файл индикатора win.ex5)

Запускаем Эксперта, на графике нет окна индикатора.

Восстанавливаем удаленный файл win.ex5.

Запускаем Эксперта, на графике есть окно индикатора.


Вывод: код Индикатора не включается в код Эксперта. Для нормальной работы Эксперта с ресурсным Индикатором необходим исполняемый файл Индикатора указанного в ресурсе.


Повторю свой вопрос:

как опубликовать в Маркете, когда имеется Эксперт с кастомным Индикатором, библиотекой, т.е. для нормальной работы Эксперта нужно больше чем один файл?

Сколько раз вам дали ссылку на документацию? Почитать мама не разрешает?

      handle=iCustom(_Symbol,_Period,"win.ex5"); // Это делается не так!!!!

Прочтите наконец-то…