#property copyright "2009, MetaQuotes Software Corp."#property link "https://www.mql5.com"#property version "1.00"#property indicator_separate_window#property indicator_buffers 1#property indicator_plots 1//---- plot MA#property indicator_label1 "MA"#property indicator_type1 DRAW_LINE#property indicator_color1 clrRed#property indicator_style1 STYLE_SOLID#property indicator_width1 1//--- input parametersinputbool AsSeries=true;
inputint period=15;
inputENUM_MA_METHOD smootMode=MODE_EMA;
inputENUM_APPLIED_PRICE price=PRICE_CLOSE;
inputint shift=0;
//--- indicator buffersdouble MABuffer[];
int ma_handle;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingif(AsSeries) ArraySetAsSeries(MABuffer,true);
Print("Indicator buffer is timeseries = ",ArrayGetAsSeries(MABuffer));
SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
Print("Indicator buffer after SetIndexBuffer() is timeseries = ",
ArrayGetAsSeries(MABuffer));
//--- change the oredr of accessing elements of the indicator bufferArraySetAsSeries(MABuffer,AsSeries);
IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//---
ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Copy the values of the moving average in the buffer MABufferint copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
Print("MABuffer[0] = ",MABuffer[0]);// Depending on the value AsSeries// Will receive a very old value// Or for the current unfinished bar//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
我不熟悉MT3,但我认为在MT3上运行的代码也能在MT4上运行 ......这就是MT4-->MT5的问题,也是情况不同的原因。
大多数MT4用户不会编码,如果他们在MT4上喜欢的指标在MT5上不存在,那么他们就不会使用MT5。
据我所知,MT3的代码不能在MT4上运行,语言是非常不同的。关于MT4/MT5的争论是无休止的,有很多因素导致了MT4的生存,我甚至不确定MT5是否打算完全取代MT4。
总之,关于新版本,Metaquotes说它将在ex4层面向后兼容,但在mq4层面并不真正兼容。
我快速看了一下新的元编辑器的帮助,新版本mql4看起来与旧版本的区别比我想象的要大。
据我所知,MT3的代码不能在MT4上运行,其语言非常不同。关于MT4/MT5的争论是无止境的,有很多因素导致了MT4的生存,我甚至不确定MT5是否打算完全取代MT4。
总之,关于新版本,Metaquotes说它将在ex4层面向后兼容,但在mq4层面并不真正兼容。
据我所知,MT3的代码不能在MT4上运行,其语言非常不同。关于MT4/MT5的争论是无止境的,有很多因素导致了MT4的生存,我甚至不确定MT5是否打算完全取代MT4。
总之,关于新版本,Metaquotes说它将在ex4层面向后兼容,但在mq4层面并不真正兼容。
在我看来,它应该是在mq4层面向后兼容的,包含的自定义指标 是原始的mql4版本,只是改变了init()函数的名称,它们在新的编译器中编译并在新的终端上运行,这意味着我们仍然可以使用IndicatorCounted()编码指标,如果我们想...
init()现在被称为int OnInit(void),它确实返回(INIT_SUCCEEDED)。
在我看来,它应该是在mq4层面上可以向后兼容的,包括的自定义指标是原始的mql4版本,只是改变了init()函数的名称,它们在新的编译器中编译并在新的终端上运行,这意味着我们仍然可以使用IndicatorCounted()来编写指标,如果我们想...
init()现在被称为int OnInit(void),它确实返回(INIT_SUCCEEDED)。
很抱歉,它不会向后兼容mq4级别,见第一个测试版的公告。
与旧的MQL4版本的不同之处。
改变了AND/OR逻辑操作的优先级。现在,一切都与标准的C/C++相似。
引入了缩短的逻辑表达式的评估。现在,当一个逻辑表达式在达到其终点之前被评估时,其余的后续表达式不会被评估,就像在C/C++中一样。
现在只有整数值被用于开关 运算符。以前可以使用实数值。
在变量名中不能再使用点符号了。另外,'@'、'$'和'?'符号也不能在变量名中使用。
严格了对起始 函数的要求。以前可以在启动函数中设置参数。现在,所有的init、start、deinit、OnInit、OnStart、OnTick、OnTimer 和其他入口点都应该与它们的签名完全一致。
由于关键字的扩展,诸如short、long、float、const、virtual、input、delete、new、do、char 等名称现在不能使用。
现在,导入的dll函数不能接受MQL字符串数组作为参数,就像在MQL5中一样
这些差异并不关键,可以很容易地在代码中得到纠正。作为回报,我们获得了多个MQL5的功能,提高了执行速度,并进行了更严格的质量控制。
...
init()现在被称为int OnInit(void),它确实返回(INIT_SUCCEEDED)。
我喜欢metaeditor的新功能
我认为当新版本发布时,会给论坛上的新手带来很多困惑,因为新的mql4文档是基于mql5编码的。这意味着在这个论坛和代码库中描述的很多东西都会与mql4文档相矛盾。
从新的mql4文档中设置一个指标缓冲区。(这实际上是有错误的,不会被编译)
我认为当新版本发布时,会给论坛上的新手带来很多困惑,因为新的mql4文档是基于mql5编码的。这意味着在这个论坛和代码库中描述的很多东西都会与mql4文档相矛盾。
从新的mql4文档中设置一个指标缓冲区。(这实际上是有错误的,不会被编译)
你已经在MQL5中编码了吗,Angevoyageur?