我正在制作一个自定义指标,显示某种货币收盘价的变化。
for ( i = limit; i >= 0; i-- ) {
totaleur = 0;
for ( x = i; x < i + 1; x++ ) {
totaleur = ( ( iClose( "EURUSD", 0, x )
- iClose( "EURUSD", 0, x - 1 )
)
/ iClose( "EURUSD", 0, x - 1 )
);
}
ExtMapBuffer1[i] = totaleur;
return(0);
}
在这种情况下,指标仅显示每次观察的价格变化。
如何让它显示观察中的变化以及之前的观察结果?
答案 0 :(得分:1)
如果你需要N个先前观察的总和 - 你需要这样的东西:
for(i=limit; i>=0; i--) {
double totaleur = 0;
for(x=i; x<i+N; x++) {
totaleur += ((iClose("EURUSD", 0, x)- iClose("EURUSD", 0, x-1))/iClose("EURUSD", 0, x-1));
}
ExtMapBuffer1[i]=totaleur;
}
当你有return(0);
内部循环时 - 指示符将停在那里并且不会使用下一个参数运行该循环 - 所以要小心它
答案 1 :(得分:1)
要实现几个重点,以实现目标:
return(0)
在代码执行区return(0);
之外移动命令 {...}
来自前进( i
减少) for( i = limit ;...; i--){...}
代码执行块将让指针在(i)
中前进,因为自定义指标使用渐进的,不连续的,每个部分的增量(及时),评估(参考自定义指标 iCustom(...)
调用接口参数的MQL4文档)
建议的表达式提供了 N
的和,每条相对差异,而不是 {{的总和1}} 绝对差异除以N
条上的净价格变化。
虽然这可能有效,但关键是,预期的模型是否正确以相加差异(不同的,可变的个体基数的百分比变化),或者总和ob绝对差异是否应该仅在最后循环除以一个,共同的基数 - 第一个和最后一个点之间的净价差(在N
- 柱基础上),这通常是一个定量建模实践,当一个有噪声的信号受某些便宜的平滑技术。
如果外部 N
循环允许 for ( i = limit; i >= 0; i-- )
变为零,
内部 i
因此允许 for ( x = i; ... )
,
x == 0
成为问题,
其中
指令 x - 1 < 0
请求访问尚不存在的值(对TimeSeries向量具有负索引)。
iClose( _Symbol, PERIOD_CURRENT, x - 1 )
正如您可能已经注意到的那样,代码只允许内部 for ( i = limit; // SET:_______________________ START at BAR[i == limit]
i >= 0; // PRE: PRE-CONDITION i >= 0
i-- // UPD: POST-UPDATE i-- STEP FORWARD IN TIME
) { // ___________________________________________________________
totaleur = 0; // ZEROISED
for ( x = i; // SET:_________________ START at BAR[x = (i)]
x < i + 1; // PRE: PRE-CONDITION x < (i)+1
x++ // UPD: POST-UPDATE x++ +1 STEP ( ONCE )
) { // _____________________________________________________
totaleur = ( ( iClose( "EURUSD", 0, x )
- iClose( "EURUSD", 0, x - 1 )
)
/ iClose( "EURUSD", 0, x - 1 )
);
} // LOOP KEPT STORING ANY INTERIM VALUE FOR EACH x INTO THE SAME <var>
ExtMapBuffer1[i] = totaleur;
return(0); //___________________________________DO NOT PREMATURELY RET/EXIT RIGHT FROM THE 1st LOOP
}