# 顺序结构

顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。

例如最为常用的基础技术指标MA均线系统就是顺序结构执行执行的。

//5日均线
MA1:MA(CLOSE,5);
//10日均线
MA2:MA(CLOSE,10);
//20日均线
MA3:MA(CLOSE,20);
//60日均线
MA4:MA(CLOSE,60);
1
2
3
4
5
6
7
8

# 选择结构

选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。在PEL中选择结构采用if...then...else...语句处理,可以实现单分支、双分支、多分支三种结构。其中分支结构中,若需要在条件判断后执行多条件语句,可以放置在begin...end中间,表示复合语句结构。

# 单分支

一条执行语句结构

if 条件判断 then 执行语句;

例如:获取当天第一根k的开盘价

if todaybar=1 then my_close:=close;
1

多条执行语句结构

if 条件判断 then begin

执行语句1;

执行语句2;

end

例如:获取当天第一根k的开、高、低、收四个价格

if todaybar=1 then begin
    //第一根K的开盘价
    my_open:=open;
    //第一根k的最高价
    my_high:=high;
    //第一根k的最低价
    my_low:=low;
    //第一根k的收盘价
    my_close:=close;
end
1
2
3
4
5
6
7
8
9
10

# 双分支

双分支结构

if 条件判断 then begin

执行语句块1;

end
else begin

执行语句块2;

end

例如:当k线是阳线x赋值为19,其他情况时为20

if close>open then begin
	    x:=10;
	end
else begin
	    x:=20;
    end
1
2
3
4
5
6

# 多分支

多分支结构

if 条件判断1 then begin

执行语句块1;

end
else if 条件判断2 then begin

执行语句块2;

end
else if 条件判断3 then begin

执行语句块3;

end
else begin

执行语句块4;

end

if STKLABEL='RB00' then begin
	N:=2;
end
else if STKLABEL='AG00' then begin
	N:=3;
end
else if STKLABEL='HC00' then begin
	N:=4;
end
else begin
	N:=1;
end

手数:N;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 循环结构

循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环。根据判断条件,循环结构又可细分为以下两种形式:先判断后执行的循环结构和先执行后判断的循环结构。在PEL中提供for循环、while循环、REPEAT循环。

注意

  • PEL作为专用交易的简易语言,策略开发过程成优先使用PEL的内置函数即可。开发过程中基本不会使用到循环结构的语句。例如20日最高价,通过HHV函数即可得到指定周期内的最高价。无效采用循环逐根k进行运算比较。
  • 在PEL中使用循环语句,将大大增加运算负荷,使用不当将会造成软件卡死、崩溃等现象出现。

# 当型循环

先判断条件语句是否成立,若条件成立,则执行语句块;再判断条件是否继续成立;若继续成立,则又执行此语句块,如此反复,直到某一次判断条件不成立时为止。for和while语句都属于当型循环。

for循环结构

  • 递增循环
    for 变量=开始 to 停止 do
    begin

    循环体语句;

    end

  • 递减循环
    for 变量=开始 downto 停止 do
    begin

    循环体语句;

    end

上述结构中,变量用于统计当前数量的变量,递增循环时每次循环则递增1,递减循环时每次循环则递减1,开始停止用于控制和判断变量的范围。超出范围则终止循环执行。其中的begin...end用于复合(多个执行)语句结构。

例如:循环输出10以内的正整数

//从小到大:
FOR i=1 TO 10 do
begin
    MSGOUT(ISLASTBAR=1,NUMTOSTR(i,0));
end

//从大到小:
FOR i=10 downto 1 do
begin
    MSGOUT(ISLASTBAR=1,NUMTOSTR(i,0));
end
1
2
3
4
5
6
7
8
9
10
11

while循环结构

while 条件判断 do
begin

循环体语句;

end

例如:循环输出10以内的正整数

N:=1;

WHILE N<=10 and ISLASTBAR=1 DO BEGIN
	MSGOUT(1,NUMTOSTR(N,0));
	N:=N+1;
END
1
2
3
4
5
6

# 直到型循环

先执行语句块,再判断条件是否成立,若条件不成立,则再执行语句块,如此反复,直到判断条件成立,该循环过程结束。

repeat循环结构

repeat begin

循环体语句;

end
until
条件判断

例如:循环输出10以内的正整数

N:=1;

repeat  begin
	MSGOUT(ISLASTBAR=1,NUMTOSTR(N,0));
	N:=N+1;
end
until (N>10);
1
2
3
4
5
6
7

# break和continue

break和continue区别

  • break 语句出现在一个循环体内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。
  • continue 语句出现在一个循环体内时,会跳出当前循环,然后回到循环体开始位置,再次进行循环。
执行示意图
FOR i=1 TO 10 do
begin
    if i=7 then begin
        break;
    end
    MSGOUT(ISLASTBAR=1,NUMTOSTR(i,0));
end
MSGOUT(ISLASTBAR=1,'终止');

//输出结果:1,2,3,4,5,6,终止
1
2
3
4
5
6
7
8
9
10
FOR i=1 TO 10 do
begin
    if i=7 then begin
        continue;
    end
    MSGOUT(ISLASTBAR=1,NUMTOSTR(i,0));
end
MSGOUT(ISLASTBAR=1,'终止');

//输出结果:1,2,3,4,5,6,8,9,10,,终止
1
2
3
4
5
6
7
8
9
10