Как удалить глобальную переменную терминала при закрытии графика?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
utock
148
utock  
Добрый день, возможно ли как то удалить глобальную переменную терминала при закрытии графика в индикаторе?
Dmitry Fedoseev
57656
Dmitry Fedoseev  
Если на этом графике висит индикатор или эксперт.
utock
148
utock  
Dmitry Fedoseev:
Если на этом графике висит индикатор или эксперт.

я ставлю удаление этой переменной в индикаторе, и при удалении этого индикатора с графика всё ОК, переменная убирается.

НО!!! ввопрос в другом! если я не просто удалю индикатор с графика, а просто закрою вкладку с графиком например
открыт евро - доллар, на нём есть индикатор , я закрываю вкладку а эта переменная остаётся, и собственно вопрос
возможно ли сделать так, что если закрыть вкладку тогда переменная тоже закроется, это же всё что можно сделать в индикаторе
это просто удаление его с графика при удалении индикатора(с графика)

Спасибо!

Taras Slobodyanik
38398
Taras Slobodyanik  

1) Есть временные переменные, которые удаляются сами при перезагрузке терминала.

2) Нужно генерировать уникальное имя переменной для каждой копии индикатора-чарта, тогда проблем не будет.

Edgar Akhmadeev
2615
Edgar Akhmadeev  
Повесить на этот же график простейший эксперт, который при закрытии его графика, в OnDeinit удалит переменную.
Dmitry Fedoseev
57656
Dmitry Fedoseev  
utock:

я ставлю удаление этой переменной в индикаторе, и при удалении этого индикатора с графика всё ОК, переменная убирается.

НО!!! ввопрос в другом! если я не просто удалю индикатор с графика, а просто закрою вкладку с графиком например
открыт евро - доллар, на нём есть индикатор , я закрываю вкладку а эта переменная остаётся, и собственно вопрос
возможно ли сделать так, что если закрыть вкладку тогда переменная тоже закроется, это же всё что можно сделать в индикаторе
это просто удаление его с графика при удалении индикатора(с графика)

Спасибо!

Если на графике висит индикатор и если закрыть график, то у индикатора будет вызвана функция OnDeinit()

utock
148
utock  
Dmitry Fedoseev:

Если на графике висит индикатор и если закрыть график, то у индикатора будет вызвана функция OnDeinit()

Пожалуйста посмотрите код:

Такая проблема индикатор создаёт переменную "val". Когда я кидаю индикатор на график эта переменная создаётся, если же просто удалить индикатор с графика!! тогда и переменная удалится, а если закрыть график тогда переменная останется. Пожалуйста исправьте код если это возможно, чтобы даже при закрытии графика переменная val удалялась Спасибо

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


input string mus="ok.wav";
static bool bPlayS=true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(GlobalVariableCheck("val")==True){  
   if(Period()==1440 ) PlaySound("alert.wav");bPlayS=False;
   if(Period()==240 ) PlaySound("alert.wav");bPlayS=False;
   if(Period()==60 ) PlaySound("alert.wav");bPlayS=False;
   if(Period()==30 ) PlaySound("alert.wav");bPlayS=False;
   if(Period()==15 ) PlaySound("alert.wav");bPlayS=False;
   if(Period()==5 ) PlaySound("alert.wav");bPlayS=False;
   if(Period()==1 ) PlaySound("alert.wav");bPlayS=False;
   } 
   if(GlobalVariableCheck("val")==False) {PlaySound(mus);GlobalVariableSet("val",1);}
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   
   if(reason==1) GlobalVariableDel("val");
   Comment("\n Total: ",GlobalVariablesTotal());
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---

   Comment("\n Total: ",GlobalVariablesTotal());
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
utock
148
utock  
Ребят если возможно такое исправьте пожалуйста
Alexey Viktorov
27987
Alexey Viktorov  
utock:
Ребят если возможно такое исправьте пожалуйста

Обратите внимание на эту таблицу

REASON_PROGRAM

0

Эксперт прекратил свою работу, вызвав функцию ExpertRemove()

REASON_REMOVE

1

Программа удалена с графика

REASON_RECOMPILE

2

Программа перекомпилирована

REASON_CHARTCHANGE

3

Символ или период графика был изменен

REASON_CHARTCLOSE

4

График закрыт

REASON_PARAMETERS

5

Входные параметры были изменены пользователем

REASON_ACCOUNT

6

Активирован другой счет либо произошло переподключение к торговому серверу вследствие изменения настроек счета

REASON_TEMPLATE

7

Применен другой шаблон графика

REASON_INITFAILED

8

Обработчик OnInit() вернул ненулевое значение

REASON_CLOSE

9

Терминал был закрыт


и на эту строку вашего кода

   if(reason==1) GlobalVariableDel("val");

Но, если я правильно помню начало вашей проблемы, то лучше условие поставить так

   if(reason != REASON_CHARTCHANGE) GlobalVariableDel("val");
utock
148
utock  
Alexey Viktorov:

Обратите внимание на эту таблицу

REASON_PROGRAM

0

Эксперт прекратил свою работу, вызвав функцию ExpertRemove()

REASON_REMOVE

1

Программа удалена с графика

REASON_RECOMPILE

2

Программа перекомпилирована

REASON_CHARTCHANGE

3

Символ или период графика был изменен

REASON_CHARTCLOSE

4

График закрыт

REASON_PARAMETERS

5

Входные параметры были изменены пользователем

REASON_ACCOUNT

6

Активирован другой счет либо произошло переподключение к торговому серверу вследствие изменения настроек счета

REASON_TEMPLATE

7

Применен другой шаблон графика

REASON_INITFAILED

8

Обработчик OnInit() вернул ненулевое значение

REASON_CLOSE

9

Терминал был закрыт


и на эту строку вашего кода

Но, если я правильно помню начало вашей проблемы, то лучше условие поставить так

спасибо за ответ, а можно ли как то использовать 1  4   9

как то так, поправьте пожалуйста

   if(reason==1 && 4 && 9) GlobalVariableDel("val"); 

Vitaly Muzichenko
14108
Vitaly Muzichenko  
utock:

спасибо за ответ, а можно ли как то использовать 1  4   9

как то так, поправьте пожалуйста

   if(reason==1 && 4 && 9) GlobalVariableDel("val"); 

 if(reason==1 || reason==4 || reason==9) GlobalVariableDel("val"); // это ИЛИ
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий