【问题标题】:What is the difference between init() and OnInit()?init() 和 OnInit() 有什么区别?
【发布时间】:2015-03-28 20:25:35
【问题描述】:

我正在学习 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 网站,但它看起来不同,我不知道现在该去哪里。

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

【问题讨论】:

    标签: algorithmic-trading mql4 metatrader4 forex


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      观察到的差异来自哪里?

      MQL4 语言已经向另一代 MetaQuotes 编程语言(命名为 @987654322 @)。

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

      因此,您所做的观察是正确的,因为“旧”语法代码 sn-ps 驻留在许多网页上,并且“新”语法粘贴在空白/新 Indicator kbd> 模板由“新”-MQL4-IDE.

      在实践中如何处理?

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

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

      #property strict             // read MQL4-IDE Help file for more details
      

      【讨论】:

      • 感谢您的回复。那么我从您所说的内容中得到了什么,如果我错了,请纠正我:购买一本书 MQL5 并学习它而不是 MQL4?
      • 向苏格兰致敬,Jamerfjr!首先,让我原谅我不敢在没有正确了解您的所有需求和目标应用程序开发环境的情况下推荐任何东西。如果不照顾这些重要信息,我什么也说不出来。 尽管如此,困境并不存在。 MQL5 在多年沉寂之后出现了,而且业务的“服务器端”——外汇经纪商——并没有快速向 MQL5 方向发展……而且不仅上帝知道为什么……所以,以防万一您的项目认真进入生产级系统,不要犹豫,询问更多,或给我发电子邮件
      猜你喜欢
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 2021-01-23
      • 2011-05-05
      相关资源
      最近更新 更多