问个start执行时序的问题

 

本人写代码还行,但是对start函数里面的一些执行时序理解不甚透彻

若已经有10根K线,算好一根5周期的均线,再来一根K线,这时IndicatorCounted()是不是返回10?

Bars是否等于11?

 

在最常见的指标开头编写方式:

int limit, i;

int counted_bars=IndicatorCounted();

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for (i=0;i<limit;i++)

在 for 之前加下面一行 Print 打印出结果, 在MT4"显示"->"终端"->"EA交易"里即可看到你要的输出答案. 因为指标里的 start() 在指标启动时就会被触发第一次, 接下来触发要靠价格跳动, 在第一次触发时, limit 会等于 Bars, 因为IndicatorCounted()是 0, 所以指标会将全部K棒数据都计算一遍. 到来第二次之后 limit 就会变成 2, 所以 for 回圈在第二次触发后会变成 for (i=0; i<2; i++), 也就是 Bars 与 IndicatorCounted() 会一直维持差1的特性, 因为 counted_bars 有作了次 counted_bars --;. 你自己写的答案应该是正确的.

Print("Bars:"," ",Bars," IndicatorCounted():",IndicatorCounted()," limit:", limit);

 

Bars就是图表中所有线数,IndicatorCounted()的作用就是提高效率,先前计算过的Bar不用再计算。

想详细分析的话,可以跟log哦

printf("Bars:%d counted_bars:%d",Bars,IndicatorCounted());