ShellExecuteW(...)在MetaTrader 4中只运行一次吗?

时间:2015-04-21 17:55:47

标签: algorithmic-trading metatrader4 mt4

尝试使用 MQL4 ShellExecuteW()启动 .exe

此命令只运行一次吗?

#import "shell32.dll"   // MQL4-syntax-wrapper-Bo[#import]Container
                        // v-------------- caller-side interface to DLL
        int ShellExecuteW( int    hWnd,
                           int    lpVerb,
                           string lpFile,
                           int    lpParameters,
                           int    lpDirectory,
                           int    nCmdShow
                           );
#import                 // MQL4-syntax-wrapper-Eo[#import]Container

if (  cond == true ){
      ShellExecuteW( 0, "open", "D:\\Execute.exe", "", "", 1 );
   }

1 个答案:

答案 0 :(得分:0)

答:短版

也许是的,也许不是。

A:更深一点[TLDR]

<强>事实: MT4终端的流程控制/流程管理并不优越,但是它允许您集成多条控制线来控制内部(和外部......不仅通过ShellExecuteW(...) ...)发生的事情。 MT4终端。

MT4终端支持每个图表的以下流程(通过内置线程):

  1. { 0 | 1 }出现一个名为MQL4的单例实例 - ExpertAdvisor
  2. { 0 | 1 }出现一个名为MQL4的单例实例 - 脚本
  3. { 0 | 1 ... n }出现功能受限的实例MQL4- TechnicalIndicator
  4. 这些实例的性质在几个方面有所不同,但是在与您的问题最接近的关系中,每个过程都有一个强制部分和一组任意部分。

    在最初的 MQL4 (可能已经注意到,因为Build 7xx MQL4语言语法越来越接近MQL5,因此有时被标记为MQL4.5:o ))

    //\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
    //
    // MQL4 code ----------------------------------------------------------<BoF>------
    
    // MQL4 code compiler directives' section -----------------------<BoS>
    
    #import ...                // MQL4-syntax-wrapper-Bo[#import]Container
            ..
            .
    #import                    // MQL4-syntax-wrapper-Eo[#import]Container
    
    // MQL4 code compiler directives' section -----------------------<EoS>
    
    // ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    //
    // MQL4 code section ---------------------------- init() / start() / deinit()
    //
    
    int init(){    // this part is being run just once,
                   //                        right upon an instance activation
       }
    
    int start(){   // this part is being run just once, for an MQL4-Script
                   //                        right upon an instance activation
                   //                    run upon an FX-MarketEvent is being observed
                   //                             in an MQL4-ExpertAdvisor
                   //                             or
                   //                             in an MQL4-TechnicalIndicator
    
    
       }
    ...
    ..
    .
    //
    // MQL4 code ---------------------------------------------------------<EoF>------
    //
    //\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
    

    因此,部署代码的确切位置(重新)使用通用DLL服务(#import - 编译时对齐和动态链接(重用)决定要求调用外部进程的次数。


    Nota Bene

    有很多更智能的方法可以将MT4终端与外部进程或远程进程(Clouds&amp; Grids)集成,而不仅仅是基于DLL的另一个盲人&amp;聋人无法管理<localhost>过程。

    通常,需要在流程之间进行流程控制和双向通信。

    不要犹豫再问。

    MT4(带一些额外的工具)可以做到。