新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1315

 
Aleksey Mavrin:

在MT4中有这样的事情,我不知道当OnInit在账户变更后被触发时,账户号码 还没有来得及在环境中更新,还是有其他的bug,我决定计时器

如果重新加载运行着EA的终端,很多事情都会出错。

我认为,如果代码不是为测试人员编写的,那么所有的初始化最好在第一次打勾时进行--那么99.9%的东西都会被正确初始化。

 
Igor Makanu:

如果运行中的EA的终端过载,很多事情都会出错。

我认为,如果代码不是为测试人员编写的,那么所有的初始化最好在第一次打勾时进行--那么99.9%的东西都会被正确初始化。

我同意,但可能有0.1%))

 
Igor Makanu:

如果运行中的EA的终端过载,很多事情都会出错。

我认为,如果代码不是为测试人员编写的,那么最好是在第一次打勾时初始化所有的东西--那么99.9%的东西都会被正确初始化。

最好是在第一次打勾时进行所有的初始化 - 然后99.9%的东西都会被正确初始化...怎么样

 
ponochka:

最好是在第一次打勾时进行所有的初始化 - 然后99.9%的东西都会被正确初始化......怎么样

void OnTick()
{
   static bool first_run = true;
   if(first_run)
   {
      MyOnInit();
      first_run = false;
   }
 
Igor Makanu:

你可以直接这样做,避免使用 "我的 "类型的垫片

int OnInit()
  {
   ...
    account=AccountNumber();
   ...
  }

void OnTick()
{
  static bool first_run = true;
   if(first_run)
   {
     if(account==0) { // Если терминал не успел получить данные с сервера
      OnInit(); // пробуем снова всё инициализировать
      return;
     }
      first_run = false;
   }
 
Vitaly Muzichenko:

你可以直接通过避免 "我的 "形式的填充来做到这一点

这不是填充物,是结构化的代码

你的例子是一个懒得多写几个字母和得到不系统的代码的例子--这里至少有2次会在运行EA时调用OnInit(),而不是事实,这将是必要的,或者说没有违反之前写的内容--你看到的问题的水平,对吗? ))

 
Igor Makanu:

这不是一个垫子,是结构化的代码

你的例子是一个懒得多写几个字母和得到非结构化代码的例子--这里至少有2次会在启动EA时调用OnInit(),而不是有必要的事实,或者说不会破坏之前写的东西--你看到的问题的水平,对吗? ))

first_run = true;

你还需要在初始化时检查Init,也许那里已经是 "零 "了。

否则,是的,我同意。


P.S. 我不同意,如果你设法连接到服务器并从它那里获得实际数据,它就不会被调用2次。

 
Igor Makanu:

不起作用,因为文档中写到OnTick()在指标中不起作用!这一点是很重要的。

 
ponochka:

不起作用,因为文档说OnTick()在指标中不起作用!

好吧,这就是极限 :(

将OnTick()改为

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[])
  {
而我要去另一个分支。
 
Vitaly Muzichenko:

好吧,这就是极限 :(

我在上面写了,关于问题的水平;)

而你开始在OnTick/OnInit中寻找初始化的优化--那里的一切都比较简单,你需要保护所找到的代码与相同的朋友分享 ))))

原因: