控制流与语句
前一章用 := 和函数式写法已经能完成大部分公式。但当你需要写交易策略——根据持仓状态走不同分支、批量遍历股票池——就得用控制流语句。
本章讲 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 的函数库,从 行情函数 开始。