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

 
Vladimir Karputov #:

В OnDeinit нужно делать ObjectsDeleteAll - удалять по префиксу (в Вашем случае префикс - это "HLine")

А в какой строчке  "HLine" писать?

 
Green handsome #:

А в какой строчке  "HLine" писать?

Что именно не ясно?

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

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

Vladimir Karputov, 2021.09.10 15:53

В OnDeinit нужно делать ObjectsDeleteAll - удалять по префиксу (в Вашем случае префикс - это "HLine")

int  ObjectsDeleteAll(
   long           chart_id,   // идентификатор графика
   const string     prefix,   // префикс имени объекта
   int       sub_window=-1,   // индекс окна
   int      object_type=-1    // тип объекта для удаления
   );


 
Vladimir Karputov #:

Что именно не ясно?


int  ObjectsDeleteAll(
   long           chart_id,   // идентификатор графика
   const string      HLine,   // префикс имени объекта
   int       sub_window=-1,   // индекс окна
   int      object_type=-1    // тип объекта для удаления
   
   );

Вот я сделал, он все равно не удаляет. 

 
void OnDeinit(const int reason)
  {
     {
      ObjectsDeleteAll(0,prefix,0);
     }
//---
   //ChartRedraw();
  }

в prefix находятся имена создания графических меток

префикс знаете что означает?

 
Fast235 #:

в prefix находятся имена создания графических меток

префикс знаете что означает?

Я вообще в MQL не разбираюсь.... думал, пару строчек подправлю и все. 

 
Green handsome #:

Я вообще в MQL не разбираюсь.... думал, пару строчек подправлю и все. 

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

 

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


Также, если загрузить на график один индикатор, то вторая копия уже не работает - не срабатывает 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 ?

Причина обращения: