9

Can somebody explain me what is the difference between both shift parameters of the iMA function on an example?
According to the MQL4 documentation:

ma_shift - Moving Average shift. Indicators line offset relate to the chart by timeframe.

shift - Index of the value taken from the indicator buffer ( shift relative to the current bar the given amount of periods ago )

Which parameters are taken by the standard MA indicator?

4

2 回答 2

19
double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

对于打包的标准指标“移动平均线”,“Shift”字段修改了“ma_shift”参数。

指标

对于打包的自定义指标“移动平均线”,“MA_Shift”字段修改了“ma_shift”参数。

自定义指标

这两个指标中的任何内容都不允许您修改最后一个“shift”参数。

比较


从图形上看,对于标准指标“移动平均线”,更改“移位”字段会使 MA 线向右(带有 +ve 数字)和向左(带有 -ve 数字)移动整数值定义的周期数。

ma_shift = 0: 默认

ma_shift = 4: ma_shift +4

ma_shift = -4: ma_shift -4

代码方面,当轮询 iMA() 并将 ma_shift 设置为 4 时,例如

double iMA("EURUSD", PERIOD_H1, 8, 4, MODE_SMA, PRICE_CLOSE, 0)

您将获得 4 个周期的移动平均值。


这是一个简单的文本指示器,显示 iMA() 值,其中 period、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' 参数移动用于计算的周期,并且只能是 +ve 数字。-ve 数字将请求未来不存在的期间。您可以尝试在上面的文本指示器中输入 -ve 数字以查看您得到的结果。(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”参数是计算周期的总体决定因素,并且单独的颚移位、牙齿移位、嘴唇移位是独立的参数以图形方式移动绘制的线条。

于 2013-10-03T09:56:38.903 回答
3

ma_shift”是显示的“线”的图形偏移。这仅与显示数组值有关。与 coding 没有太大关系EA

" shift" 是元素的值,被计算在内。默认情况下,偏移值为零(零柱(最后一个柱))。小节中的任何变化MQL4都是从最后一个小节向后移动。

例子
你比较两个SMA。一种是20个周期/0班,另一种是10个周期/4班。s之间的每次比较SMA都将SMA在数组中最后一个柱的 20 个周期和数组中的 10 个周期SMA4 个周期之间进行。
在数字中...
假设SMA最后一个栏中的 20 是1.1000
假设 10SMA如下:
1.1050在 0 bar(最后一个 bar)
1.1000上 1 bar(前一个 bar)
1.0950上 2 bar(两个 bar 后面)
1.0900on 3 bar(三个 bar 后面)

结果:
20SMA( shift0 ) > 10SMA( shift0 )=> 否
20SMA( shift0 ) > 10SMA( shift3 )=> 是

总之。这MA_shift是线向前/向后移动。这shift是一个 barvalue 向后移动(从 0/最后一个 bar)。

意思是,一个 4 的移位代表MA值 4 个小节后退。出于算法构造的目的,此选项仅在编码中可用。与sma_shift无关EA,因为当计算机计算MA交叉时,它使用数组值,而不是线本身。

祝你好运!

于 2016-01-29T22:16:26.907 回答