自动草稿

想让MQL4流程运转出来,就要对它展开校对(按校对按键或F5键)。在流程校对过程中不容许出现任何严重错误(容许有警示重要信息,但一定要对它展开对症下药)。校对获得成功后,Sonbhadra在适当的产品目录terminal_dir\experts,terminal_dir\experts\indicators,或terminal_dir\experts\scripts中,手动建立两个扩充名叫.EX4的可继续执行文档,多于建立了适当的.EX4文档,MQL4流程(EA,JAVA,自订分项)就可以够被使用者运转出来。

使用者通过滑鼠能将智能化买卖、自订分项和JAVA从应用流程导航系统询问处拖拽到适当的图象上(拖拽技术),它会附带到已关上的下述图象上。MQL4流程多于在应用流程已开启的基础上就可以运转。

要暂停智能化买卖运转,要从图象的语句工具栏中删掉它(智能化买卖系统-中止)。投入使用智能化买卖按键状况Sonbhadra直接影响智能化买卖的运转。

要使自订分项暂停运转,应该将它从图象中删掉。

自订分项和智能化买卖一直运转着,直至使用者从图象中明晰地删掉它年末。相关附带的智能化买卖和自订分项的重要信息在应用流程开启之时留存于应用流程内。

在JAVA己经顺利完成操作方式后、现阶段图象被停用或其状况己经发生发生改变、或当应用流程受阻运转时,JAVA都只继续执行一次各项任务,并被手动删掉掉。由于不留存运转状况重要信息,当应用流程再度重新开启时JAVA并不手动运转。

在同一图象内,智能化买卖、JAVA和更多数量的分项能同时运转。

Back to Top

流程运转

流程附带到图象后,它立刻开始与init()表达式协作运转。在应用流程开始运转和历史经验(仅与智能化买卖相关,而与分项毫无关系)被另外读取后、当汇率对和图象全天发生改变了、在MetaEditor里重新校对后、或者从智能化买卖或自订分项的增设询问处发生改变了输出模块,附带到图象上的智能化买卖和自订分项中的init()表达式Sonbhadra运转。当原始数据发生改变时,智能化买卖反之亦然也会被调用。

每两个附带到图象上的流程能借助于deinit()表达式顺利完成善后处理。当应用流程停机、图象被停用、在汇率对或图象全天发生改变之前、流程重校对获得成功、发生改变了输出模块或原始数据发生改变了,deinit()表达式单厢运转。在deinit()表达式继续执行期间,使用者能使用UninitializeReason()表达式查阅未调用获得成功的原因。

deinit()表达式要在2.5秒内继续执行完毕,如果表达式在这段时问内没有顺利完成它的工作,它Sonbhadra被强制结束。JAVA是这一条规则的例外,由于它能正常地自主顺利完成它的工作,它的运转不取决于任何外界的命令。如果两个JAVA工作时间过长(例如,永无止境的死循环),使用者能应用外部命令结束它的运转(从图象的语句工具栏中删掉JAVA、在原有的图象上添加新的JAVA、发生改变图象的汇率对或全天)。 在这种情况下,deinit()表达式反之亦然被限制在2.5秒内。

在收到新报价时,智能化买卖和自订分项中start()表达式Sonbhadra被继续执行。当新报价进入时,如果start()表达式还在忙着处理前面的报价,智能化买卖会忽略新报价而不予处理。在start()表达式运转期间,所有新收的报价单厢被一跳而过,直至现阶段start()表达式运转顺利完成年末。从那后,仅在收到源源不断的新报价时,start()表达式才一会运转。对于自订的分项,由于收到了新报价,现阶段图象汇率对或全天发生了变化,start()表达式Sonbhadra重新运转。start()表达式是否运转还取决于投入使用/禁用智能化买卖按键状况,当投入使用/禁用智能化买卖按键处于禁用状况时,start()表达式不会运转,但是,当通过该按键切换到禁用状况时,不会受阻现阶段start()表达式运转。在智能化买卖属性询问处关上时,start()表达式将暂停运转,在其继续执行期间也不会被关上。

从图象中卸载流程、发生改变汇率对或图象全天、原始数据发生了变化、停用图象、应用流程停机,都Sonbhadra受阻流程的继续执行。如果这些受阻流程继续执行的指令到来的时候,start()表达式此刻还在运转,那留给它的工作时间依然被限制在2.5秒之内。流程知道用内置IsStopped()表达式试着把它停用并正确地结束它的工作。

JAVA的继续执行不依赖收到的报价。在汇率对或图象全天发生发生改变时,JAVA将顺利完成它的工作并从应用流程上卸载下来。

JAVA和智能化买卖运转在自己的线程里,自订分项则工作在主接口线程上。但是,如果两个自订分项被iCustom()表达式调用,这个分项就运转在调用它的流程线程中,库(导入)表达式也反之亦然工作在调用流程的线程里。

Back to Top

导入表达式调用

为了在mql4流程继续执行期间导入表达式,采用了所谓的滞后联编。这就意味着,导入表达式被调用前,不会被读取适当的模块(EX4或DLL)。 MQL4和DLL库在调用模块线程下运转。

这里不推荐使用全路径模块名 Drive:\Directory\FileName.Ext 读取模块。MQL4库是从 terminal_dir\experts\libraries 文档夹中载入进来。如果库中未找到,Sonbhadra尝试从terminal_dir\experts 文档夹下读取。

系统动态链接库(DLL)按照操作方式系统规则读取。如果两个DLL已经读取过(例如,被其他智能化买卖系统,或从同时开启的另两个应用流程流程读取),则将直接引用已读取过的库,否则,搜索会按照以下顺序展开:

1. terminal_dir\experts\libraries 产品目录 。

2. terminal_dir 产品目录,应用流程流程开启的产品目录。

3. 现阶段产品目录。

4. windows_dir\SYSTEM32 系统产品目录 (或是Win98下 windows_dir\SYSTEM 产品目录 )。

5. windows_dir 产品目录,即操作方式系统安装的产品目录。

6. 系统环境变量PATH中列出的产品目录。

如果两个DLL运转时调用了另两个DLL,而后者又不可用,那么前者就不会被读取。

与系统库不同,自订库(MQL4)是每个调用模块各自单独读取,而不管是否被其它模块独立地读取过。例如,调用.ex4模块能从lib1.ex4和lib2.ex4库中调用表达式,反过来,lib1.ex4库也能从lib2.ex4库中调用表达式。在这种情况下,两个以上lib1.ex4副本和两份lib2.ex4副本被读取,根本不考虑所有的调用都来自同一调用.ex4模块。

从DLL导入到MQL4流程的表达式要符合Windows API表达式的链接规则。为了确保在流程源码里符合这样的规定,我们用C或C 语言编程时使用关键字_stdcall予以表明,表示是用微软公司校对器校对。上述链接规定有以下特点:

为了将表达式模块以适当的方式置入堆栈,调用表达式(这种情况下,是两个MQL4流程)要看得见被调用表达式的原型(来自DLL导入表达式);

调用表达式(这种情况下,是两个MQL4流程)以逆序方式将模块置入堆栈,也就是说,从右到左;它就是以这种顺序让导入表达式读取传递给它的模块;

模块通过值传递,除那些明晰表明通过引用传递之外;

在读取传递给它的模块后,导入表达式本身Sonbhadra自行清除堆栈。

在描述导入表达式原型时,由于所有的模块要明晰地传递给导入表达式,所以模块的默认值是无用的。

如果调用导入表达式失败(智能化买卖增设不容许DLL导入,或是由于一些原因导致无法读取适当的库),智能化买卖会暂停运转并把相关重要信息输出到智能化买卖暂停日志。另外,智能化买卖多于在重新调用后就可以开启。重新校对或关上智能化买卖属性表并按OK键,其结果就是智能化买卖系统重新调用。

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!