控制流与语句

前一章用 := 和函数式写法已经能完成大部分公式。但当你需要写交易策略——根据持仓状态走不同分支、批量遍历股票池——就得用控制流语句。 本章讲 PEL 的 IF 条件、FOR/WHILE 循环、跳出语句和注释。

IF 条件分支

PEL 支持语句式的 IF...THEN...ELSE 结构,适合复杂的多步逻辑:

{ 简单条件 }
IF CLOSE > OPEN THEN
    阳线数 := 阳线数 + 1;

{ 带 ELSE 的分支 }
IF HOLDING > 0 THEN BEGIN
    SELL(CLOSE < 止损线, 1, MARKET);   { 多头止损 }
END
ELSE BEGIN
    BUY(CROSS(MA5, MA20), 1, MARKET);  { 空仓时择机开多 }
END

要点:

  • IF 条件 THEN 语句; 是最简形式,条件成立才执行。
  • 多条语句要用 BEGIN ... END 包起来。
  • ELSE 必须紧跟在上一个 END 后面,表示条件不成立时的分支。
  • 条件也可以嵌套,实现多级判断。

简单的「条件取值」用函数式 IF(条件, A, B) 更简洁(如 IF(C>O, C, O)),复杂的多步动作用语句式 IF...THEN...BEGIN...END

FOR 循环

当需要重复执行某段逻辑(如遍历 N 根 K 线、批量处理品种),用 FOR

{ 求 10 根 K 线收盘价的累加 }
VARIABLE:累计:=0;
FOR I = 1 TO 10 DO BEGIN
    累计 := 累计 + REF(CLOSE, I-1);
END
均价: 累计 / 10;
  • FOR 变量 = 起始 TO 结束 DO BEGIN ... END,变量每次 +1。
  • 也可用 DOWNTO 让变量每次 -1。
  • 循环变量在循环体内用 REF 等函数配合,可以访问历史数据。

WHILE 与 REPEAT 循环

{ WHILE:先判断后执行 }
VARIABLE:N:=0;
WHILE CLOSE[N] > OPEN[N] DO BEGIN
    N := N + 1;
END

{ REPEAT:先执行后判断(至少执行一次) }
VARIABLE:M:=0;
REPEAT
    M := M + 1;
UNTIL CLOSE[M] <= OPEN[M];
  • WHILE 条件 DO BEGIN ... END:条件成立就一直循环。
  • REPEAT ... UNTIL 条件;:执行到条件成立为止。

循环要小心死循环——确保条件最终会变假,或用 BREAK 主动跳出。

跳出与跳过:BREAK / CONTINUE / EXIT

语句含义
BREAK跳出当前循环
CONTINUE跳过本次循环剩余部分,进入下一轮
EXIT直接结束整个公式的执行(常用于「只处理最后一根 K 线」的场景)

EXIT 在程序化策略里很常用——有些操作(如查询真实持仓、撤单)只该在最新 K 线执行一次:

IF NOT(ISLASTBAR) THEN EXIT;     { 非最新 K 线就退出,后面代码只在最新 K 线跑 }
{ 此处写只在最新 K 线执行的后台逻辑 }

注释

PEL 支持两种注释:

// 这是行注释,// 之后到行尾都被忽略

{ 这是块注释,可以跨行,大括号包起来 }

注释不参与计算,用来解释代码逻辑。养成写注释的习惯,策略复杂时尤其重要。

小结

  • IF...THEN...ELSE(配 BEGIN...END)做条件分支。
  • FOR...TO...DO 做计数循环,WHILE/REPEAT 做条件循环。
  • BREAK/CONTINUE 控制循环,EXIT 提前结束整段公式。
  • 注释用 //{ }

掌握控制流,你就能写出带状态的完整交易策略。接下来认识 PEL 的函数库,从 行情函数 开始。