请问一下 EA的执行过程,有没有防止重入的办法

 
EA程序好似是价格变动一下即执行一次,如果一次执行未完毕,新的变化引发新的进程,MT4是并行执行呢,还是顺序执行? 又或是不执行直到上一次进程执行完毕?
 

See https://docs.mql4.com/cn/runtime/start

程序在附加图表之后,它开始应用init()作用运行。在客户端开始和历史数据加载,图表周期改变,由MetaEditor编译程序, 智能和客户指标的输入数据设定后,附加到图表上的智能交易和客户指标将会运行。 在账户发生改变后交易将会初始化。

每一个附加到图表上的交易必须在deinit()的作用协助下工作。 deinit()作用运行在客户端内停止,在图表中关闭 在商品或图表周期改变之前,成功重新编译程序,改变输入数据或改变账户。 在deinit()函数执行中,您可以使用 UninitializeReason()函数查看原因.deinit()函数必须在2.5 秒内执行. 如果函数没有在指定的时间段内执行,它将强制完成.脚本除外,它的运行不取决于任何外界的命令. 如果脚本工作时间过长, 可以应用外部命令结束运行 (从图表的菜单中删除脚本,在原有的图表上添加新的脚本,改变图表的商品或图表周期).在这种情况下,deinit()函数限制在2.5秒内.

新报价格的输入,start()函数将会添加到智能交易和客户指标上执行.当新报价格进入时如果start()函数没有开启运行,新的报价格会被忽略. function launched at the preceding quote was running when a new quote came, 随后,只有当新报价格进入后start()函数才会运行. 对于客户指标,由于新报价格的输入当前图表商品或期限发生改变, start()函数将会开启重新计算.在交易属性窗口打开时start()函数 停止运行.迟些在交易执行中不会打开.

从图表中拆卸程序, 改变商品或图表周期,改变账户,关闭图表,客户端的改变将会中断程序的执行.如果start()函数在给出停止命令的时刻执行, 时间限制在2.5 秒. 程序能够尝试关闭 IsStopped()函数并结束.

脚本的执行不取决于报价格的输入.在商品或图表周期发生改变时,脚本将停止运行并且中断从客户端上下载.
脚本和交易的运行在自己的界面.客户指标则是在主界面上运行. 如果客户指标中出现 iCustom() 函数, 这个指标的运行是在程序中显示的. 资料库函数在程序界面.
原因: