以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  关于后台交易,序列模式跟逐K模式速度上的问题  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=79543)

--  作者:roadpeace
--  发布时间:2015/6/9 11:18:44
--  关于后台交易,序列模式跟逐K模式速度上的问题
同一段代码,测试了一下几种情况:
a、序列模式
b、逐K模式,仅刷最后一根K
c、逐K模式,不选仅刷最后一根K

内存3000根K线
本人i5 cpu(4核4线程)cpu占用情况:
a、K线中cpu占用10~15左右,K线末占用貌似不飙升
b、K线中cpu占用4~6左右,K线末占用飙升到18+
c、K线中cpu占用不停上下跳(大概1秒内就可以上下跳)或者很低--7左右,或者25+,K线末占用貌似不飙升



1、能解释一下这几种模式为什么cpu占用会这样吗?
2、不是说用序列模式会快很多吗,但是根据我测试好像并不是这样(就算K线末那一下,好像也快得不算多)。当然如果和没勾“仅刷最后一根K”相比,当然是快很多的

--  作者:忘记密码
--  发布时间:2015/6/9 11:22:16
--  
b、逐K模式,仅刷最后一根K
 
应该是这个 又实用又快

--  作者:wenarm
--  发布时间:2015/6/9 12:00:25
--  

图表不支持序列模式的。逐k模式是每来一笔行情,就从图标的第一根K线再重新算起。选择仅刷最后一根,k线未走完时只计算最后一根。当新的K线生成时才从头刷新计算

 

 


--  作者:roadpeace
--  发布时间:2015/6/9 12:04:45
--  
漏了说一句,以上是后台模式测的
--  作者:yukizzc
--  发布时间:2015/6/9 12:19:41
--  

你通过判断cpu占用来认为速度是没有意义的,就好比飞机耗油量比汽车大所汽车速度慢??

你要测这个的话,自己加载个几年的1分钟数据,然后弄个条件if barpos=1 then debugfile()

然后对比下记录里的间隔。

 


--  作者:roadpeace
--  发布时间:2015/6/9 14:07:40
--  
上面这个 if barpos=1 then debugfile()
是不是有问题?好像debugfile最后一根K才有效吧



--  作者:roadpeace
--  发布时间:2015/6/9 14:14:42
--  
我当然知道序列比逐K线不勾“仅刷最后一根K”快很多。

我的疑问是,
后台交易,序列模式,好像并没比逐K勾了“仅刷最后一根K”快多少
因为“仅刷最后”,在K线里面好像是不作大量运算的,只在多一根K线的时候突然大量运算
而序列模式,好像每一秒都在计算。
两种模式的计算时机,貌似是完全不同的,所以我才有这样的疑问

仅刷最后一根K的官方说明:
仅刷最后一根K线,当选中逐K线计算模式,并勾选本选项,在图表上加载本公式。当客户端接收到最新一笔行情数据后,在历史 K线上不再重新执行本公式,而只是在最后一根K线上重新计算一次公式(本质是:只在第一次加载公式时在每根历史K线上完整的计算一遍公式,其后就只在最后 一根K线上做完整计算了,历史K线上产生的信号一直保留不再随行情更新而变化。)。通过这种方式提高执行效率,避免当行情更新时系统在每根历史K线上都需 要做大量重复计算而消耗CPU处理时间。

--  作者:roadpeace
--  发布时间:2015/6/9 14:15:59
--  
补充一下,所有测试我都是“轮询 ,1秒”
--  作者:roadpeace
--  发布时间:2015/6/9 14:17:32
--  
序列我想应该是快的,但是快多少我不是很清楚
由于序列对于有加减仓的话代码处理起来就没那么方便,如果并没快太多的话,权衡一下未必会使用序列模式

--  作者:yukizzc
--  发布时间:2015/6/9 14:28:16
--  

另外对于你后台程序直接用序列就行了遇到提示用逐k,你要看代码执行速度可以自己勾上交易日志然后看下里面两次执行完毕之间差。

 

用代码测效率可以下面这样,或者模式说明里也有例子您自己都可以坐下测试看哪种的运行快。单纯看cpu占用多不多没有意义哦。有些客户还嫌软件不能百分比把cpu拿来使用呢

if barpos=1 or islastbar then debugfile2(\'c:\\aa.txt\',\'%.0f\',1,1);
nn:openminutes(time);