欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 解盘函数EXPLAIN有严重的性能问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3338人关注过本帖树形打印复制链接

主题:解盘函数EXPLAIN有严重的性能问题

帅哥哟,离线,有人找我吗?
liujam
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:20 积分:0 威望:0 精华:0 注册:2014/11/2 10:22:42
解盘函数EXPLAIN有严重的性能问题  发帖心情 Post By:2014/11/2 12:14:50 [显示全部帖子]

不好意思,用了严重两个字,因为标题要亮才行。

我是比较传统的用户,依赖技术指标在实盘中的指导,所以自编的公式里面,有大量的解盘信息。我编好的公式也会给一些年纪比较大的老年人朋友做操作参考,所以电脑解盘功非常实用和重要。

我使用金字塔有一段时间了,感觉还是非常不错的,就是解盘函数EXPLAIN的性能问题非常突出,需要进行改善,要不然开盘时间基本无法使用(我以前使用的是另一款软件,最近才迁移到金字塔)。

下面是临时写的一个测试代码:

INPUT:N(10,1,50,1);

MA1:EMA(C,N);
MA2:EMA(C,N*2);
MA3:EMA(C,N*4);
MA4:EMA(C,N*5);
MA5:EMA(C,N*6);

EXPLAIN(C>REF(C,1),'MA1值: '+ NUMTOSTR(MA1,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA2值: '+ NUMTOSTR(MA2,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA3值: '+ NUMTOSTR(MA3,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA4值: '+ NUMTOSTR(MA4,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA5值: '+ NUMTOSTR(MA5,3)),COLORWHITE;
EXPLAIN(C<REF(C,1),'MA6值: '+ NUMTOSTR(MA1+MA5,3)),COLORWHITE;

EXPLAIN(C>REF(C,1),'MA1值: '+ NUMTOSTR(MA1,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA2值: '+ NUMTOSTR(MA2,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA3值: '+ NUMTOSTR(MA3,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA4值: '+ NUMTOSTR(MA4,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA5值: '+ NUMTOSTR(MA5,3)),COLORWHITE;
EXPLAIN(C<REF(C,1),'MA6值: '+ NUMTOSTR(MA1+MA5,3)),COLORWHITE;

EXPLAIN(C>REF(C,1),'MA1值: '+ NUMTOSTR(MA1,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA2值: '+ NUMTOSTR(MA2,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA3值: '+ NUMTOSTR(MA3,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA4值: '+ NUMTOSTR(MA4,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA5值: '+ NUMTOSTR(MA5,3)),COLORWHITE;
EXPLAIN(C<REF(C,1),'MA6值: '+ NUMTOSTR(MA1+MA5,3)),COLORWHITE;


软件运行环境如下:
1.日线周期下副图指标中调用;
2.日线周期下载入K线2400根;(图标数据使用设置->勾选"限制该窗格中数据使用量为[2400]根K线");
3.测试品种:螺纹纲连续+向前复权模式;

图片点击可在新窗口打开查看此主题相关图片如下:cut.png
图片点击可在新窗口打开查看

电脑硬件环境如下:
1.CPU I5 4200U(4核);
2.内存 DDR3 8G;
3.硬盘 SSD 128G;

主要存在的问题就是我说的性能问题,只要是开盘时间,或者是调节参数时,都会发现异常卡顿!

图片点击可在新窗口打开查看此主题相关图片如下:cut2.gif
图片点击可在新窗口打开查看

我个人尝试与建议的解决方案:

1、严格控制K线载入的数量,可以有效解决CPU过高的卡顿问题。但这只是治标不治本,毕竟日K线默认显示最近3-5年会比较方便些,缩短至几十根有点太少了;

2、从公式中删除调解盘函数EXPLAIN的代码,公式会飞速起来,毫无卡顿。但这样就失去解盘了。

3、改进解盘函数的性能。这是我推荐的方式,我发现整个公式卡顿,是解盘函数EXPLAIN导致的,而且我发现,只要是在EXPLAIN中使用了字符串转换函数NUMTOSTR就会非常卡。我之前使用的那款软件,没有任何卡顿,是因为其针对字符串与数值输出,提供了两个解盘输出函数,一个是输出字符串的Explain函数,一个是输出数值的ExplainEx函数,ExplainEx的用法如下:

函数: ExplainEx
别名:

显示解盘数值

所属类别:

解盘函数

参数数量:

5

运行模式:

逐根/逐行

说明:

在[解]中输出带数值的解盘。

用法:

EXPLAINEX(COND,TEXT,NUMBER,PRECISION,SKIPLINES)
在COND条件满足时在[解]中输出数值解说。
PRECISION为小数显示位数,SKIPLINES为空出几行显示下一个解盘
例如:
EXPLAINEX(HIGH>=HHV(HIGH,20), '20天新高价:',HIGH,2,1)
表示在创20天新高时在[解]中输出数值解说。


希望金字塔能增加此函数,那就太感谢了!!!


下面是我副图公式的截图,因为需要用到解盘功能即时显示开仓、持仓、浮动盈亏等信息,这样才非常直观,如果用不了解盘,那就太可惜了。

图片点击可在新窗口打开查看此主题相关图片如下:cut4.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
liujam
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:20 积分:0 威望:0 精华:0 注册:2014/11/2 10:22:42
  发帖心情 Post By:2014/11/2 14:22:54 [显示全部帖子]

顺带提个小小建议,自定义配色风格时,盘口中的字体不能调节,始终是微软雅黑与12pt。我喜好宋体+9pt,但因盘口无法调节,显得和整体效果很不协调。

目前的如图:

图片点击可在新窗口打开查看此主题相关图片如下:cut5.gif
图片点击可在新窗口打开查看

期望的效果:

图片点击可在新窗口打开查看此主题相关图片如下:cut6.gif
图片点击可在新窗口打开查看



 回到顶部
帅哥哟,离线,有人找我吗?
liujam
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:20 积分:0 威望:0 精华:0 注册:2014/11/2 10:22:42
  发帖心情 Post By:2014/11/2 14:54:39 [显示全部帖子]

非常感谢这么快响应与回复,我试过您的建议,发现在上面的测试代码中,有了非常显著的改善。

不过由于在我实际使用的公式中,存在一些FOR循环语句,以及大量IF语句,如果改成逐根模式,一来是原有的公式代码为了适应逐根模式需要大量重写;二来我曾经也尝试过将部分公式改成逐根模式,但所包含代码中的解盘部分还是引起了响应缓慢的问题,只是相比逐行模式有一定的改善,但改善程度很有限。

我会自己不断的再尝试有无进一步改善的可能,但还是期望在解盘函数上开发人员能做些改进,提高效率。正常情况来说,我在主贴中的代码,不应该引起这么大的CPU占用与卡顿情况。(只要删除解盘函数,速度马上正常,CPU也能马上降下来)

 回到顶部
帅哥哟,离线,有人找我吗?
liujam
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:20 积分:0 威望:0 精华:0 注册:2014/11/2 10:22:42
  发帖心情 Post By:2014/11/2 15:02:49 [显示全部帖子]

我基本可以确定是EXPLAIN中使用了字符串转换函数NUMTOSTR导致的CPU占用问题,盘中我的CPU会一直100%下不来,整机都陷入卡顿状态,症状类似公式中存在有死循环,但实际上公式的编写是没有问题的,就如主贴中的代码,开发人员有空可以在盘中载入我主贴中的公式试一下。

 回到顶部
帅哥哟,离线,有人找我吗?
liujam
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:20 积分:0 威望:0 精华:0 注册:2014/11/2 10:22:42
  发帖心情 Post By:2014/11/2 17:26:17 [显示全部帖子]

这里再反馈一个小BUG,就是在解盘中,当通过键盘的左右“← →”箭头定位历史K线时,解盘中的信息并不会马上更新,而是需要停顿2秒后才会更新(如果是快速移动键盘左右箭头时,就非常明显发现问题了,有些天的解盘信息是完全不显示的)。而移动鼠标定位历史K线时,解盘信息反应非常迅速,并没有这个问题。

测试代码如下:

CC:C,Linethick1;
EXPLAIN(1,'当日收盘价: '+NumToStr(C,0)),COLORWHITE;


[此贴子已经被作者于2014/11/2 17:26:49编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
liujam
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:20 积分:0 威望:0 精华:0 注册:2014/11/2 10:22:42
  发帖心情 Post By:2014/11/2 17:43:35 [显示全部帖子]

谢谢netfox的建议,程序化交易是很好,只是我的副图公式主要是有些亲戚朋友在用,还有些是退休后的街坊邻居,他们的年纪比较大了,要他们搞程序化不太现实,以他们的习惯,还是用副图指标,看着指标出信号了,然后再下单会比较合适些。还有一个原因是,因为都是跨日的趋势交易,有时1~2个月才有一次开平仓的操作,天天开着自动交易,有点浪费电费。

我制作的副图公式,其实已经同程序化交易的评测系统类似,副图中明确给出了信息,在解盘中给也给出了明确的开仓价位、持仓周期、浮动盈亏、平仓价位等,也有盈亏统计和查看收益曲线的功能。不同的是,需要公式给出信号,然后手工跟着下单,半自动的。

交易信号如图:

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

查看收益曲线:

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看





 回到顶部
帅哥哟,离线,有人找我吗?
liujam
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:20 积分:0 威望:0 精华:0 注册:2014/11/2 10:22:42
  发帖心情 Post By:2014/11/2 19:09:10 [显示全部帖子]

非常感谢!!使用CONST强制转换后,果然CPU占用降下来了,问题解决了,感谢您周末仍在工作,一万个赞!

 回到顶部
帅哥哟,离线,有人找我吗?
liujam
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:20 积分:0 威望:0 精华:0 注册:2014/11/2 10:22:42
  发帖心情 Post By:2014/11/2 19:45:01 [显示全部帖子]

刚又发现了个新问题,使用CONST之后,调节参数时确实不再占用CPU,但是解盘中的数值并不会随鼠标定位历史K线时产生变动了,数值全都是某一个固定的数值,测试代码如下:

INPUT:N(10,1,50,1);

MA1:EMA(C,N);
MA2:EMA(C,N*2);
MA3:EMA(C,N*4);
MA4:EMA(C,N*5);
MA5:EMA(C,N*6);

MYMA1:=CONST(MA1);
MYMA2:=CONST(MA1);
MYMA3:=CONST(MA1);
MYMA4:=CONST(MA1);
MYMA5:=CONST(MA1);
MYMA6:=CONST(MA1+MA5);

EXPLAIN(C>REF(C,1),'MA1值: '+ NUMTOSTR(MYMA1,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA2值: '+ NUMTOSTR(MYMA2,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA3值: '+ NUMTOSTR(MYMA3,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA4值: '+ NUMTOSTR(MYMA4,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA5值: '+ NUMTOSTR(MYMA5,3)),COLORWHITE;
EXPLAIN(C<REF(C,1),'MA6值: '+ NUMTOSTR(MYMA6,3)),COLORWHITE;

EXPLAIN(C>REF(C,1),'MA1值: '+ NUMTOSTR(MYMA1,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA2值: '+ NUMTOSTR(MYMA2,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA3值: '+ NUMTOSTR(MYMA3,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA4值: '+ NUMTOSTR(MYMA4,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA5值: '+ NUMTOSTR(MYMA5,3)),COLORWHITE;
EXPLAIN(C<REF(C,1),'MA6值: '+ NUMTOSTR(MYMA6,3)),COLORWHITE;

EXPLAIN(C>REF(C,1),'MA1值: '+ NUMTOSTR(MYMA1,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA2值: '+ NUMTOSTR(MYMA2,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA3值: '+ NUMTOSTR(MYMA3,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA4值: '+ NUMTOSTR(MYMA4,3)),COLORWHITE;
EXPLAIN(C>REF(C,1),'MA5值: '+ NUMTOSTR(MYMA5,3)),COLORWHITE;
EXPLAIN(C<REF(C,1),'MA6值: '+ NUMTOSTR(MYMA6,3)),COLORWHITE;

对于盘后分析,调节参数时对CPU的占用是有改善的,但可以料想盘中的解盘中的数值并不随历史K线或行情动态变化,这个问题还是希望能再跟进一下,非常感谢!




 回到顶部
帅哥哟,离线,有人找我吗?
liujam
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:20 积分:0 威望:0 精华:0 注册:2014/11/2 10:22:42
  发帖心情 Post By:2014/11/2 19:55:05 [显示全部帖子]

好的,明白了。我刚测试了一下,暂时这样用问题不大,只要CPU能降下来就好:)

不过,如果有可能,下一次做版本更新时,是否考虑增加EXPLAINEX函数,或许能完美解决这个问题。

飞狐函数:EXPLAINEX(COND,TEXT,NUMBER,PRECISION,SKIPLINES)
在COND条件满足时在[解]中输出数值解说。
PRECISION为小数显示位数,SKIPLINES为空出几行显示下一个解盘
例如:
EXPLAINEX(HIGH>=HHV(HIGH,20), '20天新高价:',HIGH,2,1)表示在创20天新高时在[解]中输出数值解说。


期待能更新,祝您周末愉快,再次感谢您的及时回复.


 回到顶部