以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  VBA运行一次需要7秒左右,导致金字塔tick数据接收存在很大延时的情况。  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=95757)

--  作者:bage
--  发布时间:2016/4/1 16:33:59
--  VBA运行一次需要7秒左右,导致金字塔tick数据接收存在很大延时的情况。
VBA中,每一次定时器轮询,连续调用19个品种的公式计算,这个公式计算的时间有点长,19个品种大概需要7秒左右的时间。

现在发现,当公式长时间计算时,品种的tick数据接收就会比其他的金字塔tick数据慢,存在的延时比较大。导致下单延时特别严重


数据接收和公式计算怎么不分开在不同的线程中运行? 
而且金字塔一直是在用一个cpu在运算,当公式计算比较复杂而且品种多的时候,金字塔完全顶不住,延时太长了,有将近10秒的时间。 有没有计划解决这些问题呢。
多线程协同运行,这个是未来方向啊。单靠一个cpu,瓶颈太严重了。

后台多核的方式,存在着有时候开、平仓不对的情况,后来也没检查出来情况。结果导致只能用vba的单核情况。

--  作者:admin
--  发布时间:2016/4/1 16:46:39
--  
不清楚你的VBA代码是如何编写调用的,建议你贴出代码以便我们给出一个对你来说合理性的优化方案
--  作者:bage
--  发布时间:2016/4/5 9:08:51
--  
这个完全就能测试出来的啊。

就是写一个公式,这个公式执行完需要1秒的时间,然后在vba的定时器中循环10个品种,都调用这个公式。

然后观察其中任意一个品种的tick接收。


--  作者:bage
--  发布时间:2016/4/5 9:11:12
--  
这个完全就能测试出来的啊。

就是写一个公式,这个公式执行完需要1秒的时间,然后在vba的定时器中循环10个品种,都调用这个公式。

然后观察其中任意一个品种的tick接收。
调用过程很简单的,就是类似于

for i=1 to iCodeCount
\'循环code,调用公式
Set Formula = marketdata.STKINDI(sCode,sMarket,sPolicy,0,iPeriod) \'取策略 
nVol=Formula.GetBufData(sHoldingZhibiao,Formula.DataSize-1) \'取指标的返回值
.....
next

--  作者:admin
--  发布时间:2016/4/5 20:57:47
--  

你描述的情况是无法解决的,并且你的这种工作模式也完全体现不了VBA的优势,你可以尝试将STKINDI参数中的加载公式数量做一下限定,然后看看运行效果能否改善