我正在学习MQL4。在他们的参考网站上,创建自定义指标的过程如下:
#property indicator_chart_window
int init(){
return(0);
}
int deinit(){
ObjectsDeleteAll();
return(0);
}
int start(){
return(0);
}
但是当我从MetaEditor内部创建一个新的Indicator时,我得到了另一种语法,如下所示:
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网站,但它看起来不同,我不知道现在转到哪里。
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:1)
MQL4
语言已经移动(某个地方关于MetaTrader4终端LiveUpdate版本Build 572 .. 6xx)a"半步"另一代MetaQuotes编程语言(名为MQL5
)。
尽管MQL4
语言已经跨越多年,并且在概念和执行方面都是成熟稳定的,但是" new" -MQL4引入了一些东西,传统的" MQL4语言(和代码执行环境)尚未准备好使用。
所以,您所做的观察是正确的,因为旧的" -syntax代码片段驻留在许多网页上,并且是一个新的" -syntax,粘贴在空白处/ new 指标模板由" new" - MQL4
- IDE。
您的"新" -syntax将适用于任何后Build-572 + MetaTrader4终端。你不必担心"不兼容"案例,其中"新"由于MetaTrader4服务器具有内部设置,因此代码将与旧的" -terminal冲突,该内部设置指示服务器愿意允许连接和服务的最老的" - 允许的终端。事实上,这意味着您将更新能够连接/运行连接到代理端的Build-572 MetaTrader4终端,其中" new" -code可能会与"旧的" -syntax规则。
无论如何,为了MQL4
语法消除歧义,有一个编译器指令可用:
#property strict // read MQL4-IDE Help file for more details
答案 1 :(得分:1)
构建600后,MQL4有一些变化。
OnInit()
是Init-event处理程序。您仍然可以使用Init()
,因为它是向后兼容的。 OnInit()
是较新的做法。
部分在线文档已过时且尚未更新。 此链接提供有关更改的信息:http://docs.mql4.com/mql4changes