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

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

公式系统工作模式的特点

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

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

    逐K线计算时,控制语句比如IF THEN ,FOR 等语句工作机制是每周期都去执行一次,因此在逐K线模式下,可以利用这种灵活的模式来设计我们的策略,比如加仓、减仓、资金管理策略等等。

    序列模式计算时,控制语句条件允许使用序列变量,由于序列模式只执行一次控制语句解析,对于序列变量,仅取最后一个数据做为条件判断。

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


两种运行模式的公式范例

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

//用于序列模式下运行的公式:
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线模式。