mql5语言的特点、微妙之处以及技巧 - 页 179

 
Konstantin Nikitin:

作为一种选择。

不工作。

 
fxsaber:

不工作。

似乎已经重新加载了终端专家仍然。当我改变账户时,我从图表中删除了它...我唯一要玩的是专家顾问的每个变体的全局名称。有可能将其添加到char的名称中。我没有去管它。

 
Konstantin Nikitin:

我想我的终端机超载了,专家就留下来了。当我改变账户时,我从图表中删除了它...我唯一要玩的是专家顾问的每个变体的全局名称。我可以把它添加到char的名称中。我没有去管它。

它需要专家顾问在一个不工作的图表上工作。我们还提供工作时间表的选择。

 
Konstantin Nikitin:

我想我的终端机超载了,专家就留下来了。当我改变账户时,我从图表中删除了它...我唯一要玩的是专家顾问的每个变体的全局名称。我可以把它添加到char的名称中。我没有去管它。

  1. 在ForexTimeFXTM-Demo01上打开演示。
  2. 在布伦特符号上运行专家顾问。
  3. 切换到MQ-Demo。
  4. 使用专家菜单中的PKM来查看专家顾问是否在运行。
 
fxsaber:

  1. 在ForexTimeFXTM-Demo01上打开演示。
  2. 在布伦特符号上运行专家顾问。
  3. 切换到MQ-Demo。
  4. 使用专家菜单中的PCM来查看专家顾问是否被挂起。


fxsaber:

一般来说,在REASON_ACCOUNT上调用ExpertRemove 是一件绝对没有意义的事情。


检查了一下,我认为更可悲的是,即使是关键性的错误也不会卸载我的EA

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) 在'tst1.mq5' (25,60)中除零。

2020.05.21 14:30:17.373 专家 自动交易被禁用,因为账户已被更改。

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 专家 自动交易已启用

 
Igor Makanu:

检查了一下,我觉得更可悲的是,即使是关键性的错误也没有卸载我的EA

但当我改变账户时,全局范围会被完全抹去。

那里的一切工作都是合乎逻辑的(但有些地方很别扭)。你只需要了解这个机制。

 
fxsaber:

那里的一切工作都是合乎逻辑的(但在某些地方很别扭)。你只需要了解这个机制。

好吧,机制在帮助中,但帮助并没有考虑到工作中的所有情况--这个信息是由管理员提供的,但后来版主也参与进来,他们两人得出了裁决--你有妄想症https://www.mql5.com/ru/forum/334269/page53#comment_16412120


给予机制,帮助无力;)

 
Igor Makanu:

给予机制,帮助是无力的;)

REASON_ACCOUNT(即使账户没有改变,只是重新登录),EA被完全卸载,并加载一个新的副本。

由于这个原因,OnDeinit中的ExpertRemove对新的副本没有影响,因为它涉及到未加载的副本。


如果符号缺失,新的副本将被加载而不被执行。

而问题是要卸载一个新的副本,这个副本是挂着的,但没有运行。


一个悬挂的副本意味着如果有一个切换到另一个有符号的账户,EA将启动。

 
fxsaber:

如果它根本不工作,为什么要把它卸下来?

 
Andrey Khatimlianskii:

而且,如果它根本不工作,为什么要把它卸下来?

应该有充分的控制。