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

 

С чем связано, что не отображает короткое имя в подокне в левом верхнем углу?


Также, если загрузить на график один индикатор, то вторая копия уже не работает - не срабатывает OnInit() = ничего и не принтует. Но если изменить "Входные параметры" на другие - работает

#property indicator_separate_window

#property indicator_plots 0

input int MASlow = 21; // Период медленной МА
input int MAFast = 8;  // Период быстрой МА

//+------------------------------------------------------------------+
string prog_name,short_name;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit(void)
{
  prog_name=MQLInfoString(MQL_PROGRAM_NAME);
  short_name="=Set ("+(string)MASlow+"/"+(string)MAFast+")";
  IndicatorSetString(INDICATOR_SHORTNAME,short_name);
  Print("INIT_SUCCEEDED");
  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);
}

---

Что не так, в мт4 этот код работает.

 
Vitaly Muzichenko #:

С чем связано, что не отображает короткое имя в подокне в левом верхнем углу?


Также, если загрузить на график один индикатор, то вторая копия уже не работает - не срабатывает OnInit() = ничего и не принтует. Но если изменить "Входные параметры" на другие - работает

---

Что не так, в мт4 этот код работает.

Может просто потому, что слишком коротко обрублен? Ни отображения, ни буферов… Зачем вторую копию такого индикатора делать, вот терминал и своевольничает…

 
Vitaly Muzichenko #:

С чем связано, что не отображает короткое имя в подокне в левом верхнем углу?


Также, если загрузить на график один индикатор, то вторая копия уже не работает - не срабатывает OnInit() = ничего и не принтует. Но если изменить "Входные параметры" на другие - работает

---

Что не так, в мт4 этот код работает.

чего то не хватает - наверное какого то property , тоже сталкивался с этим, но вот набросал индикатор, все ОК

#property copyright "Copyright 2021, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- indicator buffers
double         Label1Buffer[];
input int MASlow = 21; // Период медленной МА
input int MAFast = 8;  // Период быстрой МА
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
   string short_name = MQLInfoString(MQL_PROGRAM_NAME) + "=Set (" + (string)MASlow + "/" + (string)MAFast + ")";
   IndicatorSetString(INDICATOR_SHORTNAME, short_name);
   SetIndexBuffer(0, Label1Buffer, INDICATOR_DATA);
//---
   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[])
{
   for(int i = prev_calculated == 0 ? 0 : prev_calculated - 1; i < rates_total; i++)
   {
      Label1Buffer[i] = close[i];
   }
   return(rates_total);
}
//+------------------------------------------------------------------+

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

 
Igor Makanu #:

чего то не хватает - наверное какого то property , тоже сталкивался с этим, но вот набросал индикатор, все ОК

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

Данные отображает, но откуда, если не сработала функция OnInit()? Бросаем на график копию, и может случайно сработать OnInit(), но если ещё копию - то всё, даже нет принта. Но если изменить входные параметры - тогда работает.

#property copyright "Copyright 2021, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2


input int MASlow = 21; // Период медленной МА
input int MAFast = 8;  // Период быстрой МА

//+------------------------------------------------------------------+
int wndNum;
string short_name;
double Label1Buffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
  short_name="Set ("+(string)MASlow+"/"+(string)MAFast+")";
  IndicatorSetString(INDICATOR_SHORTNAME,short_name);
  wndNum=ChartWindowFind();
  Print("INIT SUCCEEDED: "+(string)wndNum);
  SetIndexBuffer(0, Label1Buffer, INDICATOR_DATA);
//---
  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[])
{
   for(int i = prev_calculated == 0 ? 0 : prev_calculated - 1; i < rates_total; i++)
   {
      Label1Buffer[i] = close[i];
   }
   return(rates_total);
}

---

Какой выход, почему не срабатывает OnInit ?

 

Добавил в код, не печатает вторая и последующие копии индикаторов

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[])
{
  OnInit();
   for(int i = prev_calculated == 0 ? 0 : prev_calculated - 1; i < rates_total; i++)
   {
      Label1Buffer[i] = close[i];
   }
   return(rates_total);
}

---

Что сделано:

Установил 3 копии индикатора, скомпилировал файл и получил принт с первой копии

2021.09.12 18:30:40.975 Create_button (BTCUSD,M30)      INIT SUCCEEDED: 1
 
Vitaly Muzichenko #:

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

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

 
Igor Makanu #:

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

Как можно сделать, чтобы запускал не меняя входные параметры, может чего добавить с define?

Нужно установить несколько копий, это такая задача, к сожалению

 
Vitaly Muzichenko #:

Как можно сделать, чтобы запускал не меняя входные параметры, может чего добавить с define?

Нужно установить несколько копий, это такая задача, к сожалению

Введите фейковый параметр. И присваивайте ему 1,  2, 3 ...

 
Vitaly Muzichenko #:

Как можно сделать, чтобы запускал не меняя входные параметры, может чего добавить с define?

Нужно установить несколько копий, это такая задача, к сожалению

видел и проверял как сделать два подокна с помощью редактирования шаблона - одно подокно сверху над чартом, второе в подвале

попробуйте сохранить шаблон с Вашим индикатором, а вдруг и тут получится такой фокус с шаблонами - добавьте копию индикатора  в текст шаблона

 
Igor Makanu #:

видел и проверял как сделать два подокна с помощью редактирования шаблона - одно подокно сверху над чартом, второе в подвале

попробуйте сохранить шаблон с Вашим индикатором, а вдруг и тут получится такой фокус с шаблонами - добавьте копию индикатора  в текст шаблона

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