【问题标题】:MQL4 Function pointer / function callback solutionMQL4 函数指针/函数回调解决方案
【发布时间】:2015-04-06 14:22:12
【问题描述】:

据我所知,MQL4 中不存在函数指针。

作为一种解决方法,我使用:

// included for both caller as callee side
class Callback{
   public: virtual void callback(){ return; }
}

然后在传递回调的源中:

class mycb : Callback{
   public: virtual void callback(){
     // call to whatever function needs to be called back in this source
   }mcbi;

现在mcbi可以按如下方式传递:

 afunction(){
    fie_to_receive_callback((Callback *)mycbi);
 }      

接收者可以回调为:

 fie_to_receive_callback(mycb *mcbi){
    mcbi.callback(); // call the callback function
  }

有没有更简单的方法在 mql4 中传递函数回调?

【问题讨论】:

    标签: algorithmic-trading mql4 forex


    【解决方案1】:

    其实有一种方法,在 MQL4 中使用函数指针。 这是一个例子:

    typedef int(*MyFuncType)(int,int);
    
    int addition (int a, int b)
    { return (a+b); }
    
    int subtraction (int a, int b)
    { return (a-b); }
    
    int operation (int x, int y, MyFuncType myfunc)
    {
       int g;
       g = myfunc(x,y);
       return (g);
    }
    
    int OnInit()
    {
       int m,n;
       m = operation (7, 5, addition);
       n = operation (20, m, subtraction);
       Print(n);
       return(INIT_FAILED);  //just to close the expert
    }
    

    【讨论】:

      【解决方案2】:

      没有。幸运的是没有。(……然而 MQL4 语言语法令人毛骨悚然 *)

      MQL4 运行时执行引擎 (MT4) 具有相当脆弱的进程/线程处理和添加更多(和更智能)的构造(超出基本的{ OnTimer() | OnTick() | OnCalculate() } 事件绑定回调)对已经没有保证的实时执行构成了相当大的威胁。主要的 MT4 职责。虽然“新”-MQL4.56789 可能会提供黑客这样做,但可能有更安全的卸载策略来分发并让 MT4 遗留处理程序从外部处理集群接收“预烘焙”结果,而不是尝试在一岁可怜的圣诞树上挂越来越多的小玩意儿。

      要了解这种避免危险的方法是多么粗暴,请注意原始 OnTimer() 使用 1 秒分辨率(是的 1.000.000.000 ns 世界上的步骤,其中流提供者以纳秒为单位标记事件...... )

      * ):是的,自从"new"-MQL4引入后,原来的MQL4-语言有很多隐身模式的变化。每次更新后,最好查看“新”帮助文件,因为可能会有新选项和令人讨厌的惊喜。维护一个拥有数百人*年以上的MQL4 代码库,这确实是一次非常具有破坏性的经历。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-19
        • 2018-10-16
        • 2021-03-01
        相关资源
        最近更新 更多