Особенности языка mql5, тонкости и приёмы работы - страница 179

 
Konstantin Nikitin:

Как вариант.

Не рабочий.

 
fxsaber:

Не рабочий.

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

 
Konstantin Nikitin:

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

Ему надо чтобы эксперт сработал на нерабочем графике. А мы предлагаем варианты с рабочим графиком.

 
Konstantin Nikitin:

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

  1. Открыть демо на ForexTimeFXTM-Demo01.
  2. Запустить советник на символе Brent.
  3. Переключиться на MQ-Demo.
  4. Через ПКМ меню Эксперты - посмотреть, висит советник или нет.
 
fxsaber:

  1. Открыть демо на ForexTimeFXTM-Demo01.
  2. Запустить советник на символе Brent.
  3. Переключиться на MQ-Demo.
  4. Через ПКМ меню Эксперты - посмотреть, висит советник или нет.


fxsaber:

Вообще, вызов ExpertRemove при REASON_ACCOUNT - абсолютно бессмысленная вещь.


проверил, по моему там еще все грустнее, даже критические ошибки не выгружают мой ЕА

const long login = AccountInfoInteger(ACCOUNT_LOGIN);
//+------------------------------------------------------------------+
int OnInit()
{
   Print(__FUNCTION__);
   Print("_StopFlag = ",_StopFlag);
   Print("_UninitReason = ",_UninitReason);
   Print("login = ",login);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Print(__FUNCTION__);
   Print("_StopFlag = ",_StopFlag);
   Print("_UninitReason = ",_UninitReason);
   Print("login = ",login);
   if(_StopFlag && _UninitReason == 6) {int i=1; int j = 10/--i;}
}
//+------------------------------------------------------------------+

зато глобальную область видимости полностью затирают при смене счета

2020.05.21 14:30:17.303 tst1 (EURUSD,H1) OnDeinit

2020.05.21 14:30:17.303 tst1 (EURUSD,H1) _StopFlag = 1

2020.05.21 14:30:17.303 tst1 (EURUSD,H1) _UninitReason = 6

2020.05.21 14:30:17.303 tst1 (EURUSD,H1) login = 21796970

2020.05.21 14:30:17.303 tst1 (EURUSD,H1) zero divide in 'tst1.mq5' (25,60)

2020.05.21 14:30:17.373 Experts automated trading is disabled because the account has been changed

2020.05.21 14:30:17.797 tst1 (EURUSD,H1) OnInit

2020.05.21 14:30:17.797 tst1 (EURUSD,H1) _StopFlag = 0

2020.05.21 14:30:17.797 tst1 (EURUSD,H1) _UninitReason = 0

2020.05.21 14:30:17.797 tst1 (EURUSD,H1) login = 500030706

2020.05.21 14:30:24.492 Experts automated trading is enabled

 
Igor Makanu:

проверил, по моему там еще все грустнее, даже критические ошибки не выгружают мой ЕА

зато глобальную область видимости полностью затирают при смене счета

Там все логично работает (но местами неудобно). Просто нужно въехать в механизм.

 
fxsaber:

Там все логично работает (но местами неудобно). Просто нужно въехать в механизм.

ну как бы механизм в справке, но справка не учитывает все случаи в работе - такую информацию дал админ, потом правда, подключил модератора и вдвоем вынесли вердикт - Вы бредите https://www.mql5.com/ru/forum/334269/page53#comment_16412120


дайте механизм, справка оказалась бессильна ;)

 
Igor Makanu:

дайте механизм, справка оказалась бессильна ;)

При REASON_ACCOUNT (даже если не меняется счет, а просто делается релогин) советник полностью выгружается и загружается новая копия.

По этой причине ExpertRemove в OnDeinit не действует на новую копию, т.к. касается выгружаемой.


В случае, если символ отсутствует, то загружается новая копия без какого-либо выполнения.

И проблема была выгрузить новую копию, которая висит, но не запустилась.


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

 
fxsaber:

А зачем его выгружать, если он совсем-совсем не работает?

 
Andrey Khatimlianskii:

А зачем его выгружать, если он совсем-совсем не работает?

Должен быть полный контроль.