用debugfile记录时间发现程序资源占用最多的地方在于stkindi跨周期调用指标数据,大概每次调用或读取一次要占用1-5ms时间,品种多了,指标多了,耗时就显得太多了。比如20个品种,每个品种5个指标公式,每个指标公式下边有5个不同参数,相当于每个计时器周期调用指标次数为20*5*5=500次,每次平均4ms的话就得占用2s时间了。比如以下为调用ema指标公式,读取3个不同参数的指标
set bema = marketdata.STKINDI(scode,smarket,"ema",0,bperiod,,zbcount)
bema5_0 = bema.GetBufData("ema5",zbcount-1)
bema12_0 = bema.GetBufData("ema12",zbcount-1)
bema36_0 = bema.GetBufData("ema36",zbcount-1)
2个问题:
1.为什么这里占用资源这么多,是因为公司要遍历每根k线进行计算吗?
2.如何提高指标调用的效率,减少资源占用,除了使用自定义数据之外,因为自定义数据如果是要逐个品种逐个周期逐个参数去重新定义的话,要定义超过200个数据。。。工程量实在太大。
目前除了自定义数据能彻底解决速度问题外,再没有更简单有效的方法了。
你只能考虑优化你的公式代码,以及缩短计算数据来解决,相关参考 http://www.weistock.com/bbs/dispbbs.asp?boardid=16&Id=74267