金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 9326|回复: 0

【公式教学】PEL公式运行模式简介

 关闭 [复制链接]

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
发表于 2021-7-20 10:04 | 显示全部楼层 |阅读模式
1、金字塔PEL公式运行模式说明
     如下图,PEL公式系统有两种工作模式,序列计算逐K线计算     
      QQ截图20210721151211.jpg

     序列计算:公式每次刷新计算时解析公式按照序列或常数计算返回结果,整个过程只解析一次公式。
     逐K线计算:公式每次刷新计算都是从加载的第一根K线逐根解析公式,历史每个周期都会执行一次公式,返回值为数值。          

   模式示例展示:
    序列模式.gif
    逐K模式.gif

2、公式运行模式使用场景
   模式说明:逐K线计算从效率上看比序列计算要低很多,但逐K线计算在做迭代运算等语法处理上非常灵活,应用场景更丰富。
     序列计算在运行时,由于只做一次解析效率比较逐K线计算要高,推荐在多数场景下使用,一般常见的技术指标(通达信、博易大师)都采用此模式。
     逐K线计算在运行效率上比序列计算低,但是它特有的运行模式在语法上更加灵活,我们可以在每个K线周期上做迭代运算。
     在公式系统中,使用到图表交易函数Buy、Sell等必须使用逐K线计算模式。


3、控制语句在两种运行模式下的特点
      逐K线计算时,IF Cond  Then 、 For等控制语句因运行机制历史每根K都会去执行一次,因此在逐K线计算模式下,可以灵活的实现一些仓位、资金管理。这就是对应我们是图表交易策略时应用逐K线计算模式。
      逐K线计算_仅刷最后一根K线,此计算模式为逐K线计算在效率上的进化版。勾选仅刷最后一根K线后,客户端接收到最新的tick,在历史K线上不会再次逐K执行公式,只会在最新的K线上计算返回,历史K线采用上根K的计算结果。当图表对应的新K线生成后,此模式会再次逐K线计算,历史每根K都执行一次此公式。
      序列模式计算,控制语句Cond只执行一次控制语句解析,对于序列变量,仅用最后一个周期的数据作为Cond的判断条件。所以序列模式下用IF等控制语句应严格注意。
      例如REF,MA等带有统计性质的函数逐K新计算时无法直接使用在IF语句之中(序列运行模式可以),因为带变量判断的IF语句会在某些周期无法调用这些统计函数而导致计算结果出现错误。
      逐K线计算此类函数需要做如下示例转换
      RD:REF(C,5);
      IF C>RD  Then SS:1;

4、运行模式公式示例
     为了更好的说明两种运行模式的运行特点,大家可以看如下示例
     
[PEL] 复制代码
//用于序列模式下运行的公式:
INPUT: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线计算同时高效运行,公式如下:
[PEL] 复制代码
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控制,故符合控制语句取最后一个数据的特点,所以该公式同时可以在两种模式下得到正确执行。
[PEL] 复制代码
为了更能说明逐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;


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


5、总结
     新用户刚开始的时候对两种模式运行选择非常纠结,实际在通常情况下,我们实际不需要去理解两种运行模式的差异。推荐用户在序列计算下运行你的公式系统,因为这样会有很高的执行 效率,只有在序列模式下无法实现您的思想,再考虑使用逐K线计算,因为逐K线可以精细的控制每跟K线周期的动作,所以灵活性较高,可以完成多数序列计算下无法完成的事情。
     简单总结
     您如果是技术指标的话,建议直接用序列计算,尤其是从通达信、博易等手工终端上拷贝来的技术指标,直接用序列模式即可。
     您如果是图表交易策略,建议直接用逐K线计算,因为交易策略后期必然涉及仓位、资金管理等迭代运算。
     您如果是后台策略,建议用序列计算,因为后台大多数情况只计算最新K的情况,序列无法使用思路的情况下再考虑逐K。








金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-12-22 19:26 , Processed in 0.218008 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表