MQL4函数指针/函数回调解决方案

时间:2015-04-06 14:22:12

标签: algorithmic-trading mql4 forex

据我所知,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中传递函数回调?

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

否。幸运的是没有。(... ...但是MQL4语言语法蠕变*)

MQL4运行时执行引擎(MT4)具有相当脆弱的进程/线程处理,并且添加更多(更智能)的构造(超出基本的{ OnTimer() | OnTick() | OnCalculate() }事件限制的回调)构成对已经无法保证的威胁RealTime执行主要MT4职责。虽然" New" -MQL4.56789可能会提供黑客攻击,但可能会有更安全的卸载策略进行分发,让MT4传统处理程序接收"预先烘焙"来自外部处理群集的结果,而不是试图在一年多岁的圣诞树上挂起越来越多的闪烁小工具。

为了实现这种危险避免的粗暴程度,请注意原始OnTimer()使用了1秒的分辨率(是1.000.000.000 ns步骤,其中流提供商将事件标记为纳米级秒......)

*):,自 "new"-MQL4 简介以来,原版MQL4中有许多隐身模式更改 - 语言。每次更新后,我们都建议您查看"新的" - 帮助文件,因为可能有新选项和&令人讨厌的惊喜。维持MQL4代码库超过几百人*年,这确实是一次非常具有破坏性的经历。