加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]通过设置提高金字塔软件的运行效率(Z)

(2013-05-16 09:01:32)
标签:

转载

分类: 转帖
收藏备查

以下所有功能介绍仅对2.0以上版本有效

 

方法1:限制数据数量

   金字塔是面向高端用户的高端分析工具,所有品种的行情数据都保存至本地计算机,这样做的目的是可以快速的进行大量的品种的横向统计计算和相互之间的数据引用。所以默认安装时金字塔将会尽大可能的允许用户保存尽可能长的历史数据,但是历史数据如果保存过长,将会给公式系统的运算带来很大的负担,解决方法就是在运行时限制数据的使用数量,方法如下:

Ctrl+O 选项-》维护选项卡,如图:

http://www.weistock.com/image/005.jpg

上图红色部分两个选项,默认安装后的数字是960周期,960周期对于绝大多数情况下的公式运算量是可以满足的,如果用户的公式系统需要更多的历史数据,只要改动上面的设置即可。

图形显示:该设置主要用于图表上显示,第一次显示图表时初始使用的数据量使用该设置,如果用户按↓键增加图形显示量时,如果超过默认的960数量,系统会自动从硬盘中自动扩充该大小。

内存保留:该部分主要是非图形显示的数量控制选项,例如选股、后台预警交易、指标排序、横向统计等。内存保留系统不会自动扩充大小,需要用户自行调整该选项。

 

方法2:通过降低刷新频率和当日显示来提高速度

http://www.weistock.com/image/026.jpg

http://www.weistock.com/image/027.jpg

 

报表刷新时间:报价表(动态显示牌)的刷新时间默认为500毫秒一次,如果系统已经比较卡占用CPU资源较大,那么建义提高此选项设置。

指标排序更新:报价表上的用户自定义指标数据栏的刷新时间,默认300秒一次,如果希望盘中即时刷新而降低该频率将会导致CPU的占用陡然增大。

盘中延迟刷新这是个重要的选项,图表K线图上的指标不是每来一笔TICK都会刷新的,为了提高软件的效率,默认为1.5秒刷新一次,此数值设置过小将会显著提高CPU的占用,如果用户设计的指标比较复杂或者图形使用的数据过多导致系统运行速度缓慢,那么可以将此选项设置高一些,这样可以让软件运行的顺畅一些。

K线图和分时图仅用当日数据:如果在分笔、多秒或者1分钟数据周期下,不涉及到昨日的历史数据,那么建义勾选此选项。

图表程式化交易中的高频选项:勾选此选项后,盘中延迟刷新设置 将会失效,系统每来一笔TICK,将会对图表做一次刷新,如果你的公式或数据量比较大,那么将会显著加重系统负担。

 

 

方法3:通过调整公式系统的属性

http://www.weistock.com/image/006.jpg

 

通过上图的红色部分,有两个地方可以进行调整,下面我们将分别介绍

运行模式:2.0版之后的金字塔支持序列和逐周期两种模式,其中序列模式是运行效率最高的一种,逐周期模式只建议在一些特殊场合使用,比如带全局变量的需要逐周期运行的算法,如使用BUY等新交易系统的情况下等等。普通技术指标,ENTERLONG,TBUY后台自动交易等公式,建议用户在序列模式下运行,效率会得到大幅提升。在此提醒用户注意:很多用户为了方便,将用于后台自动交易公式,BUY,TBUY等交易混在一个公式里使用,在初期调试编写过程中这样是可以的,但是如果一旦模型确立编写调试完毕后,请将只能用于图表逐周期模式下的BUY指令去掉,在序列模式下运行我们的后台自动交易公式。否则就只能以逐周期模式运行,既降低了效率,又在后台执行中执行了没有必要的BUY指令,进一步增加了无谓的计算量。但是有特殊目的的算法除外,比如用户想通过BUY指令的虚拟持仓优点来控制实际下单量等等高级用法。

快速按钮:对于需要固定数量的图表公式,或者需要固定数量就可以计算得到最后一个周期的用于后台交易或者选股的公式来说,使用该选项无疑是最能提高效率的一种了,对于图表限制,可以使公式系统的数据计算不必依赖图表显示的多少,对于后台交易,由于我们通常只需要最后一个周期的数据,只要我们在公式编写时,知道一个正确计算最后周期的信号即可。

 

方法4:通过公式编写技巧

一个简单的例子:

ENTERLONG:CROSS(C,MA(5,10));

EXITLONG:CROSS(MA(5,10),C);

通过上面的语句,我们看到了,MA(5,10)其实是被连续使用了两次,这样的重复执行函数调用,必然会带来不必要的运算开支。改进方法如下:

MA5:=MA(5,10);

ENTERLONG:CROSS(C,MA5);

EXITLONG:CROSS(MA5,C);

通过中间变量MA5,保存函数调用结果,通过重复使用内部变量MA5,达到提高效率的目的。

 

通过IF控制语句

通过使用IF ... THEN 控制语句,对于公式的条件进行判断,如果发现需要必要条件时再来进入到内部进行计算,否则就不执行了。

IF 条件达到 THEN

  BEGIN

   //执行条件内语句

  END

 

http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=3286

金字塔公式系统工作模式简介

    金字塔公式系统工作两种模式,即序列和逐K线两种模式。序列模式公式系统每次刷新时解析公式按照序列或者常数计算返回结果,整个执行过程只解析一遍公式系统。逐K线模式为从第1周期逐个周期解析公式系统,每个周期都会解析整个公式系统一遍,返回值也只有数值类型这一种,故之中模式运行时效率要比序列模式低,但此中模式语法处理上比较灵活。

公式系统工作模式的特点

    序列模式计算时,由于只解析一次,故效率要比逐K线计算要高,推荐在多数情况下使用,此种模式还兼容飞狐、大智慧、博弈大师等主流分析软件的公式系统。
    逐K线执行模式虽然效率要比序列模式低,但是他的执行语法更加灵活,可以执行到我们在每个周期上做到的各种操作,TB就是这种模式运行的,BUY等新交易系统只能在逐K线计算模式下运行。像例如REF,MA等带有统计性质的函数逐K线运行时无法直接使用在IF语句之中(序列运行模式可以),因为带变量判断的IF语句会在某些周期无法调用这些统计函数而导致计算结果出现错误,关于逐K线模式下统计函数如何工作在控制语句之中用户可以参考帮助。

控制语句在两种不同模式下的运行特点

    逐K线计算时,控制语句比如IF THEN ,FOR 等语句工作机制是每周期都去执行一次,因此在逐K线模式下,可以利用这种灵活的模式来设计我们的策略,比如加仓、减仓、资金管理策略等等。
    序列模式计算时,控制语句条件允许使用序列变量,由于序列模式只执行一次控制语句解析,对于序列变量,仅取最后一个数据做为条件判断。

两种运行模式的公式范例

    为了更能说明金字塔两种模式下的公式运行特点,特制作一个计算移动平均线的公式,如下:

//用于序列模式下运行的公式:
I
NPUT:N(5,2,500);      //参数申明
RUNMODE:1;              //运行于序列模式
VARIABLE:I=0,S=0;//变量申明
VAR1:=C;
FOR J=1 TO DATACOUNT DO BEGIN
 S:=S+VAR1[J];
 IF J>=N THEN BEGIN
  IF J>N THEN
    S:=S-VAR1[J-N];
  MA1[J]:S/N;        //实现MA(C,N)
  I:=0;
 END;
END;
 
上述公式使用序列模式运行,但是如果在逐K线模式下运行上述公式就会变得异常缓慢,由于金字塔逐K线模式在每个周期上都要执行一遍这样的循环,效率自然就变得非常低了。鉴于金字塔的特点,如果将上述公式改进一下,则可以高效的在序列和逐K线模式同时高效运行,公式如下:

 
INPUT:N(5,2,500);      //参数申明
VARIABLE:I=0,S=0;     //全局变量申明
VAR1:=C; //金字塔下放在这里的变量为序列赋值

//为了加快运算速度,只有最后一个周期时才循环计算
IF NOT(ISLASTBAR) THEN EXIT;
FOR J=1 TO DATACOUNT DO BEGIN
 S:=S+VAR1[J];
 IF J>=N THEN BEGIN
  IF J>N THEN
    S:=S-VAR1[J-N];
  MA1[J]:S/N;        //实现MA(C,N)
  I:=0;
 END;
END; 

上述公式中增加了 IF NOT(ISLASTBAR) 判断是否最后一个周期的指令,在逐K线模式下,由于是判断到最后一个周期才执行的下面循环,故效率是非常高的。对于序列模式,由于同样使用了ISLASTBAR控制,故符合控制语句取最后一个数据的特点,所以该公式同时可以在两种模式下得到正确执行。
 
 

为了更能说明逐K线的运行特点,计算移动平均线的公式还可以这样写
INPUT:N(5,2,500);      //参数申明
RUNMODE:0;            //工作于逐K线模式
IF BARPOS <= N THEN //从计算周期开始计算
 EXIT;
 
MA1:C;
FOR J=1 TO N-1 DO
 MA1:=MA1+CLOSE[BARPOS-J];
MA1:=MA1/N;


这样的公式即保证了效率,也可以使编写公式的复杂程度大大降低,提高了公式的可读性。

 

关于模型运行时这两种模式的选择

    我们在模型运行时尤其是新手用户往往面对如何选择这两种运行模式纠结,在通常情况下,我们推荐用户在序列模式下运行你的公式系统,因为这样会有很高的执行效率,只有在序列模式下无法表达编写出你的策略时,再考虑使用逐K线模式,因为逐K线可以精细的控制每跟K线周期的动作,所以灵活性较高,可以完成多数序列模式下无法完成的事情。
建义如下:在普通技术指标,选股指标,简单的图表程式化交易,以及公式中涉及到BACKSET、REFX等未来函数调用等,推荐使用序列模式;用户需要精细控制K线周期的操作时例如资金头寸管理、止损操作等,推荐使用逐K线模式。简单一句话,如果是指标交易,那么使用序列模式,算法交易,使用逐K线模式。

 

http://www.weistock.com/runmode.htm
6在分笔上图表交易 在达到万笔以上后 速度反应严重滞后 如何解决 我的机器4核的2.4g
Post By:2010-10-27 13:26:21

如果把先前计算 记录 每次只调用 当前计算期内数据如500笔 如何写?
 Post By:2010-10-27 13:06:10

 瓶颈应不在CPU。内存大小,磁盘IO这些是关键。内存上到4g,磁盘上7200转,大缓冲的。
 Post By:2010-10-27 15:07:36 

按方法2 3设置 后无效  所以 我想原因如下 因为现在的模式好像是每成交一笔 公式就从第一笔开始循环一次 但是我的计算只是应用最近的500笔左右的数据 判断条件是否成立 但是其中又有据500笔连续给变量赋值 比如 1-500笔 条件成立 cc=c     。。。。。。。9000-9500  条件成立 cc=c  如何做才能只做9000-9500  的循环判断 就能完成判读 从而提高执行效率

具体程序结构如下

VARIABLE:ccp

if barpos=1 then ccp:=c

 

a:=ma(tr+ccp,500)

 

b:=hhv(c,barpos)

if a and b then

begin

kaiduo

ccp:=c

end

 

if c and b then

begin

kaikong

ccp:=c

end

如何改为 500笔 做一循环 ccp 如何传递 b:=hhv(c,barpos)如何处理  请斑竹赐教 

Post By:2010-10-27 15:16:20

过了500后,用barpos和barpos-500控制
Post By:2010-10-27 16:29:03

然后再使用“快速”按钮限定500周期。 用buy 等图表显示 只是计算最后500出开仓信号   没有连续性
Post By:2010-10-27 16:14:51

建议使用序列模式工作,然后再使用“快速”按钮限定500周期。

如果这样以后还慢,那就是其他地方问题了,比如你是不是还保留着昨天的分笔数据等等

http://www.weistock.com/bbs/dispbbs.asp?BoardID=4&replyID=15247&ID=3496&skin=1

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有