运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。在PEL中运算符大致可以分为5种类型:算术运算符、连接运算符、关系运算符、赋值运算符和逻辑运算符。
# 算术运算符
算术运算符即算术运算符号。是完成基本的算术运算符号,就是用来处理四则运算的符号,即+
、-
、*
、/
,其中乘除运算符优先级高于加减运算符。
//收盘价与开盘价相加
AA:CLOSE+OPEN
//最高价与最低价相减
BB:HIGH-LOW
//收盘价乘以系数0.3
CC:CLOSE*0.3
//收盘价与开盘价的平均值
DD:(CLOSE+OPEN)/2
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;
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);
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;
2
3
4
5
6
7
8
9
# 连接运算符
在PEL中连接运算符只用于字符串拼接,可使用的字符串拼接符号&
。
MNAME:=MARKETLABEL&STKLABEL;
//字符串无法在图表中直接展示,要通过输出函数或者其他显示文本函数处理。
EXPLAIN(1,MNAME);
2
3
# 运算符优先级
在表达式中,优先级高的先于优先级低的进行运算。
优先级 | 运算符 | 名称 |
---|---|---|
1 | () | 圆括号 |
2 | * | 乘 |
2 | / | 除 |
3 | + | 加 |
3 | - | 减 |
4 | < | 小于 |
4 | > | 大于 |
4 | <= | 小于等于 |
4 | >= | 大于等于 |
4 | = | 等于 |
4 | <> | 不等于 |
5 | not | 逻辑非 |
6 | and (&&) | 逻辑与 |
7 | or (||) | 逻辑或 |