double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
对于打包的标准指标“移动平均线”,“Shift”字段修改了“ma_shift”参数。
![Indicator](https://istack.dev59.com/ehHvI.webp)
对于打包的自定义指标'Moving Averages','MA_Shift'字段修改'ma_shift'参数。
![Custom Indicator](https://istack.dev59.com/jWbXD.webp)
两个指标都无法修改最后一个“shift”参数。
![comparison](https://istack.dev59.com/k9FN0.webp)
Graphically,对于标准指标“移动平均线”,更改“Shift”字段会将MA线向右移动(使用+ve数字),并将其向左移动(使用-ve数字)由整数值定义的周期数。
ma_shift = 0:
![default](https://istack.dev59.com/FPPmY.webp)
ma_shift = 4:
![ma_shift +4](https://istack.dev59.com/cNeSG.webp)
ma_shift = -4:
![ma_shift -4](https://istack.dev59.com/HCfRi.webp)
在代码方面,当调用iMA()并将ma_shift设置为4时,例如:
double iMA("EURUSD", PERIOD_H1, 8, 4, MODE_SMA, PRICE_CLOSE, 0)
您将获得4个周期以前的移动平均值。
这是一个简单的文本指示器,显示iMA()值,其中周期、ma_shift和shift参数可编辑。尝试一下,并与“移动平均”指标(打开数据窗口)进行验证。
#property indicator_chart_window
extern int period = 8;
extern int ma_shift = 0;
extern int shift = 0;
void start(){
string A1=StringConcatenate("Stat: ", DoubleToStr(MA(),5));
Comment(A1);
return (0);
}
double MA(){
return(iMA(NULL, 0, period, ma_shift, 0, 0, shift));
}
iMA()函数中的最后一个“shift”参数用于移动计算所使用的周期,并且只能是正数。负数将请求未来不存在的周期。您可以尝试在上面的文本指示器中放入负数以查看结果。(0.00000) 如上所述,指标不允许编辑此参数,因为它们实际上是相同的。
double iMA("EURUSD", PERIOD_H1, 8, 4, MODE_SMA, PRICE_CLOSE, 0)
同上
double iMA("EURUSD", PERIOD_H1, 8, 0, MODE_SMA, PRICE_CLOSE, 4)
所以它为什么存在?很可能是为了与其他指标进行标准化,例如
http://docs.mql4.com/indicators/iAlligator,其中“shift”参数是确定要从哪个时间段计算的总体决定因素,而单独的jaw_shift、teeth_shift、lips_shift则是用于图形移动绘制的独立参数。