运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。在PEL中运算符大致可以分为5种类型:算术运算符、连接运算符、关系运算符、赋值运算符和逻辑运算符。

# 算术运算符

算术运算符即算术运算符号。是完成基本的算术运算符号,就是用来处理四则运算的符号,即+-*/,其中乘除运算符优先级高于加减运算符。

//收盘价与开盘价相加
AA:CLOSE+OPEN

//最高价与最低价相减
BB:HIGH-LOW

//收盘价乘以系数0.3
CC:CLOSE*0.3

//收盘价与开盘价的平均值
DD:(CLOSE+OPEN)/2
1
2
3
4
5
6
7
8
9
10
11

其他算术操作

在PEL中其他算术运算符都是通过函数提供的,使用时可以查阅函数手册获取使用方法。数学函数

# 关系运算符

在PEL中关系运算符,有6种关系,分别为小于、大于、小于等于、大于等于、等于、不等于。主要用于条件判断中,例如close>open等等。

关系运算符

关系运算符无论多少个组合,最终结果返回值都是0或者1

运算符 名称 结果
< 小于 表达式1 < 表达式2,成立为1,否者为0
> 大于 表达式1 > 表达式2,成立为1,否者为0
<= 小于等于 表达式1 <= 表达式2,成立为1,否者为0
>= 大于等于 表达式1 >= 表达式2,成立为1,否者为0
= 等于 表达式1 = 表达式2,成立为1,否者为0
<> 不等于 表达式1 <> 表达式2,成立为1,否者为0
//判断10是否小于5,结果是不小于,所以cond的结果是0
condx:10 < 5;

//判断10是否大于5,结果是不小于,所以cond的结果是1
condy:10 > 5;
1
2
3
4
5

# 逻辑运算符

在形式逻辑中,逻辑运算符或逻辑联结词把语句连接成更复杂的语句。通俗解释多个条件语句组合成一个复合型语句。在PEL中的逻辑运算分别为逻辑与(and 或 &&)、逻辑或(or 或 ||)、逻辑非。其中逻辑与的优先级高于逻辑或。

运算符 名称 结果
and (&&) 逻辑与 条件1 and 条件2 ,都成立时为1,否者为0
or (||) 逻辑或 条件1 or 条件2,其中一个成立即为1,否者为0
not 逻辑非 not(条件1),条件1成立时为0,否者为1
//5日均线大于10日均线并且10日均线大于20日均线
condx:ma(close,5)>ma(close,10) and ma(close,10)>ma(close,20);

//5日均线大于10日均线或者10日均线大于20日均线
condy:ma(close,5)>ma(close,10) or ma(close,10)>ma(close,20);
1
2
3
4
5

# 练习

请试着分析该句代码的结果:1 or 0 and 0 and 0;

答案:
【1】,因为or的优先级低于and,所以执行过程如下:
= 1 or (0 and 0 and 0)
= 1 or 1
= 1

判断X是否在10到20之间;

答案:
分析:X在10到20之间,那么X大于10并且小于20,即数学表达式:10 < X < 20 在PEL中实现时,应该采用and逻辑运算符: 10 < X and X < 20;

使用技巧

当条件中混合使用and、or的时候,建议通过括号,明确区分标识其优先级,既能避免逻辑错误,又可以降低代码维护时的阅读成本。
例如上面疑难问题中的例子,

  • 如果希望or先执行时:(1 or 0) and 0 and 0;

# 赋值运算符

在PEL中,赋值运算符有两种,分别是::=;两者之间作用基本相同,但是在含义和图表显示上有一定区别。

  • 含义差异
    • :只用在变量第一次的位置,起到声明定义并赋值的作用。
    • :=如果用在变量第一次出现的位置,其作用等同于:,但是若后面语句中需要对已经定义的变量进行修改,只能采用:=的方式。
  • 显示差异
    • :定义的变量在图表上是可以显示变量值以及指标线等图形信息。对于策略中比较重要的变量,可以实时输出在图表中,便于观察。
    • :=定义的变量在图表中不显示变量值,以及指标线等图形信息。一般可用于隐藏非重要变量结果和指标线,从而保持k线图的整洁。
A//声明定义一个变量AA,并赋值为5,
A:5;
//错误语句,因为AA在上一行位置已经被声明过。
AA:10;

//声明定义一个变量BB,并赋值为10
BB:=20;
//对BB进行从新赋值
BB:=30;
1
2
3
4
5
6
7
8
9

# 连接运算符

在PEL中连接运算符只用于字符串拼接,可使用的字符串拼接符号&

MNAME:=MARKETLABEL&STKLABEL;
//字符串无法在图表中直接展示,要通过输出函数或者其他显示文本函数处理。
EXPLAIN(1,MNAME);
1
2
3

# 运算符优先级

在表达式中,优先级高的先于优先级低的进行运算。

优先级 运算符 名称
1 () 圆括号
2 *
2 /
3 +
3 -
4 < 小于
4 > 大于
4 <= 小于等于
4 >= 大于等于
4 = 等于
4 <> 不等于
5 not 逻辑非
6 and (&&) 逻辑与
7 or (||) 逻辑或