iCustom取不到自定义指标的数组的最新值?

 

环境:MT4

1、自定义指标A,有一个double 缓冲数组S[];

当前图表共有10柱,给第3柱赋值S[2]=3.3;

当图表运行了一段时间,图表变成11柱,原第3柱变成了第4柱S[3],这时将第4柱S[3]清零,赋值S[3]=0.0; 

图表继续运行一段时间,图表变成12柱,原第3柱变成第5柱S[4],用Print(S[4]) ,显示S[4]=0.0;

 以上正常。

 2、有一个EA名称为MTEA,MTEA引用自定义指标A,

当图表只有10柱时,Print( iCustom(NULL,0,"A",0,2)) =3.3,正确。

当图表变成12柱时,理论上 Print( iCustom(NULL,0,"A",0,4)) =0.0,但这时Print( iCustom(NULL,0,"A",0,4))仍然等于3.3 ,为什么会这样??

(当图表运行一段时间变成11柱时,不是已经将原第3柱清零了吗,为什么仍然是3.3?)

并且更奇怪的是,当EA继续运行一段时间,图表变成20柱时,再  Print( iCustom(NULL,0,"A",0,12)) ,居然又显示为0.0了。 

 

典型的未来(repaint/redraw)。

建议修改指标逻辑,否则这种指标根本不能实际应用。

 

估计是mt4不会在每个新tick来临之时重新计算所有的buffer,要不计算量太大了。它应该只计算新的。

 

建议改写你的ea。

或者在12柱的时候,重新计算你的ea,比如 当图表变成12柱时,理论上 Print( iCustom(NULL,0,"A",0,4)),用循环重新计算1-12柱。这样计算量大了许多。

 
wangfs111222:

估计是mt4不会在每个新tick来临之时重新计算所有的buffer,要不计算量太大了。它应该只计算新的。

 

建议改写你的ea。

或者在12柱的时候,重新计算你的ea,比如 当图表变成12柱时,理论上 Print( iCustom(NULL,0,"A",0,4)),用循环重新计算1-12柱。这样计算量大了许多。

奇怪的地方就在这儿,我设计成每次有新柱时就会重新计算前面的5个柱,所以按理论上即使有错误,应该也在重算时排除了。

不管这个错误了,我要改EA。

原因: