工作模式
# 序列模式和逐 K 线模式
投研版编辑器工作有两种模式,即序列和逐K线两种模式。序列模式公式系统每次刷新时解析公式按照序列或者常数计算返回结果,整个执行过程只解析一遍公式系统,我们前面所讲的控制语句的用法都是基于序列模式下运行的。逐K线模式为从第1个K线直到最后一个K线逐个解析公式系统,每根K线都会解析整个公式系统一遍,返回值也只有数值类型这一种,故这种模式运行时效率要比序列模式低,但此种模式下由于是逐根周期执行运算的, 故我们可以在编写公式时使用各种更加灵活的控制语法。
# 控制语句在两种不同模式下的运行特点
逐K线计算时,控制语句比如IF THEN ,FOR 等语句工作机制是每周期都去执行一次,因此在逐K线模式下,可以利用这种灵活的模式来设计我们的策略,比如加仓、减仓、资金管理策略等等
序列模式计算时,控制语句条件允许使用序列变量,由于序列模式只执行一次控制语句解析,对于序列变量,仅取最后一个数据做为条件判断。
如:前面我们在序列模式下无法正常工作的公式
fc:=close;
fo:=open;
if fc>fo then //这里的 fc、fo 是序列变量,因此只取最后一个周期的条件做为判断依据
xx:=1
else
xx:=0;
2
3
4
5
6
但是在逐K线模式下,该公式是可以正常工作的。因为逐K线每根K线都得到了执行,故不需要向序列运行那样在后面用FOR循环重新赋值一遍了。
为了更能说明两种模式下的公式运行特点,特制作一个计算移动平均线的公式,如下:
//用于序列模式下运行的公式:
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;
2
3
4
5
6
7
8
9
10
11
12
13
14
上述公式使用序列模式运行,但是如果在逐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;
2
3
4
5
6
7
8
9
10
11
12
13
14
上述公式中增加了 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;
2
3
4
5
6
7
8
这样的公式即保证了效率,也可以使编写公式的复杂程度大大降低,提高了公式的可读性。另外,逐 K 线模式下运行的代码,还可以配合 EXIT 指令,控制语句的执行流程,达到各种复杂的 逻辑运算要求。
# 关于模型运行时这两种模式的选择
我们在模型运行时尤其是新手用户往往面对如何选择这两种运行模式纠结,在通常情况下,我们推荐用户在序列模式下运行你的公式系统,因为这样会有很高的执行效率,只有在序列模式下无法表达编写出你的策略时,再考虑使用逐 K 线模式,因为逐 K 线可以精细的控制每跟 K线周期的动作,所以灵活性较高,可以完成多数序列模式下无法完成的事情。
建议如下:在普通技术指标,选股指标,简单的图表程式化交易,以及公式中涉及到BACKSET、REFX 等未来函数调用等,推荐使用序列模式;用户需要精细控制 K 线周期的操作时例如资金头寸管理、止损操作等,推荐使用逐 K 线模式。简单一句话,如果是指标交易,那么使用序列模式,算法交易,使用逐 K 线模式。