OnTick 是每次价格跳动都会触发,如果你发现写在里面,跑复盘会变慢,如果这个指标调用只需要在每个 K 刚开的时候计算一次,可以在 OnTick 函数里改用
新增一个全局参数 ,宣告在所有函数外面:
datetime dtLast=0;
在 OnTick 函数里面
if(dtLast!=iTime(Symbol(),时间周期,0))
{
dtLast=iTime(Symbol(),时间周期,0);//这样就只会在时间周期那个K一开的时候进来这里一次
//然后把放在这里
Custom=iCustom(.....);
//
顺便还释放掉指标调用 handle,不然 mt5 指标保留给指标调用数组的内存还是不小的
IndicatorRelease(Custom);
}
看这样的改写是否可以改善你那里复盘缓慢的问题。如果不是要每次新开K只作一次计算判断,那就没有其它好方法了。
OnTick 是每次价格跳动都会触发,如果你发现写在里面,跑复盘会变慢,如果这个指标调用只需要在每个 K 刚开的时候计算一次,可以在 OnTick 函数里改用
新增一个全局参数 ,宣告在所有函数外面:
datetime dtLast=0;
在 OnTick 函数里面
if(dtLast!=iTime(Symbol(),时间周期,0))
{
dtLast=iTime(Symbol(),时间周期,0);//这样就只会在时间周期那个K一开的时候进来这里一次
//然后把放在这里
Custom=iCustom(.....);
//
顺便还释放掉指标调用 handle,不然 mt5 指标保留给指标调用数组的内存还是不小的
IndicatorRelease(Custom);
}
看这样的改写是否可以改善你那里复盘缓慢的问题。如果不是要每次新开K只作一次计算判断,那就没有其它好方法了。
非常感谢您有很好的解答,在回测上速度有比较好很多,可惜还是有差距
甚至写成"类"来调用,回测执行时,速度还是很慢,有没有解决的方法?