3

我正在学习 MQL4。在他们的参考网站上,创建自定义指标如下:

#property indicator_chart_window

int init(){
    return(0);
}

int deinit(){
    ObjectsDeleteAll();
    return(0);
}

int start(){

    return(0); 
}

但是当我从 MetaEditor 中创建一个新指标时,我得到了另一种语法,如下所示:

int OnInit()
 { 
 //--- indicator buffers mapping

 //---
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
            const int prev_calculated,
            const datetime &time[],
            const double &open[],
            const double &high[],
            const double &low[],
            const double &close[],
            const long &tick_volume[],
            const long &volume[],
            const int &spread[])
 { 
//---

//--- return value of prev_calculated for next call
return(rates_total);
}

为什么不一样?

有没有网页链接,或者有人可以参考我的书?从我读到的最好的地方是 MQL4 网站,但它看起来不同,我不知道现在该去哪里。

任何帮助将不胜感激。提前致谢。

4

2 回答 2

2

在构建 600 之后,MQL4 发生了一些变化。这OnInit()是初始化事件处理程序。您仍然可以使用Init(),因为它向后兼容。OnInit()是较新的做法。

一些在线文档已过时,尚未更新。此链接提供有关更改的信息:http: //docs.mql4.com/mql4changes

于 2015-03-29T21:47:43.910 回答
2

观察到的差异来自哪里?

一种MQL4语言(关于 MetaTrader4 终端 LiveUpdate 版本 Build 572 .. 6xx 的某个地方)向另一代 MetaQuotes 编程语言(名为 an )移动了“半步” MQL5

虽然MQL4语言已经跨越多年,并且在概念和执行上都是成熟和稳定的,但“新”-MQL4 引入了一些东西,“传统”MQL4 语言(和代码执行环境)还没有准备好使用。

因此,您所做的观察是正确的,因为许多网页上存在“旧”-语法代码片段和“新” Indicator-语法,由“新”--IDE 粘贴在空白/新模板MQL4中。

在实践中如何处理?

您的“新”语法将适用于任何 572+ 后的 MetaTrader4 终端。您不必担心“不兼容”的情况,其中“新”代码会与“旧”终端冲突,因为 MetaTrader4 服务器有一个内部设置,它指示服务器愿意允许的“最旧”允许终端连接和服务。事实上,这意味着您将能够连接/运行连接到经纪商端的 Pre-Build-572 MetaTrader4 终端,其中“新”代码可能与“旧”语法规则发生冲突。

无论如何,为了MQL4消除语法歧义,有一个可用的编译器指令:

#property strict             // read MQL4-IDE Help file for more details
于 2015-03-28T23:49:55.320 回答