有人可以解释一下,shift
函数的两个iMA
参数之间的区别是什么?
根据MQL4
文件:
ma_shift
- 移动平均线转移。指标线偏移与时间范围的图表相关。
shift
- 从指标缓冲区获取的值的索引(相对于当前柱的转移给定的前期数)
标准MA指标采用哪些参数?
double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
对于打包的标准指标'移动平均线','移位'字段修改'ma_shift'参数。
对于打包的自定义指标'移动平均线','MA_Shift'字段修改'ma_shift'参数。
两个指标中的任何内容都不允许您修改最后一个“shift”参数。
在图形上,对于标准指标“移动平均线”,更改“移位”字段会将MA线向右移动(带有+ ve数字)并向左移动(带有-ve数字)移动整数值定义的周期数。
Mishvat = 0:
Mishvat = 4:
Machfat = -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'参数是一个总体确定器,用于计算哪些周期,并且单独的jaw_shift,teeth_shift,lips_shift是独立参数,用于以图形方式移动绘制的线。
“ma_shift
”是显示的“线”的图形转换。这仅与显示数组值有关。与EA
s编码没什么关系。
“shift
”是元素的值,用于计算。默认情况下,shift的值为零(零条(最后一个条))。 MQL4
酒吧的任何变化均来自最后一个酒吧。
例:
你比较两个SMA
。一个是20个周期/ 0个班次,另一个是10个周期/ 4个班次。 SMA
s之间的每次比较都将在阵列中最后一个柱上的20个周期SMA
和阵列中的10个周期SMA
4个周期之间进行。
在数量上......
让我们说最后一个酒吧的20个SMA
是1.1000
。
让我们说10 SMA
如下:
1.1050
在0 bar(最后一个酒吧)
1.1000
1 bar(前一个酒吧)
1.0950
2 bar(两个酒吧后面)
1.0900
在3个酒吧(三个酒吧后面)
结果:
20SMA( shift0 ) > 10SMA( shift0 )
=> NO
是20SMA( shift0 ) > 10SMA( shift3 )
=>是的
综上所述。 MA_shift
是线向前/向后的移动。 shift
是一个向后移动的barvalue(从0 /最后一个栏)。
意思是,4班代表MA
值4巴回来。出于算法构造的目的,此选项仅在编码中可用。 ma_shift
与EA
s无关,因为当计算机计算MA
十字架时,它使用数组值,而不是线本身。
祝你好运!