通俗的讲,变量就像是丰巢快递柜的格子,我们通过指定的格子空间存取物品(数据);在金字塔的PEL中使用的变量类型,可以分成普通变量
、字符串变量
、全局变量
三种。
# 普通变量
在PEL中普通变量的定义非常简单,不需要指定变量的数据类型,直接定义变量即可使用。如下所示,定义MA1和MA2两个均线变量。
MA1:MA(CLOSE,5);
MA2:=MA(CLOSE,10);
1
2
2
通过公式观察,不难看出MA1通过冒号:
进行定义,MA2通过冒号等号:=
进行定义。两种变量定义的差别如下:
相同点
1. 两者均可以直接定义新变量。
不同点
1. 通过":="定义的变量,并不显示在k线图中。
2. 只有":="能够对已经定义的变量进行重新赋值。
- name: 相同点
desc: 1. 两者均可以直接定义新变量。</br>
bgColor: '#FFE7BA'
textColor: '#FF0000'
- name: 不同点
desc: 1. 通过":="定义的变量,并不显示在k线图中。 </br>2. 只有":="能够对已经定义的变量进行重新赋值。
bgColor: '#FFE7BA'
textColor: '#FF0000'
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
注意
- 这里的普通变量亦可统称为序列变量;序列变量都是和K线时完全对齐的,即每根k上都有一个对应的变量结果。
# 字符串变量
字符串变量可以认为是普通变量的一种,因其数据为字符串类型,所以在此处被单独说明。它的定义方式和普通变量定义方式相同。如下所示:
str:'helloWord';
code:STKLABEL;//返回当前品种的代码
1
2
2
通过观察,str和code在k线图中显示的结果并不是预期的字符串结果,为什么会有这个现象出现呢?
答
- 字符串不支持直接在k线图中显示,因为k线图只能显示变量名和数值型变量。
- 字符串显示可以通过EXPLAIN、DRAWTEXT、msgout等函数进行显示。
# 全局变量
全局变量是一种特殊变量,它的变量结果不会因为K线的改变而消失,因此全局变量的生命更长。根据作用范围的不同,可以分类三类:
- 作用于策略之内:VARIABLE 和 GLOBALVARIABLE
- 作用于整个软件:EXTGBDATA、EXTGBDATASET 和 EXTGBSTRING、EXTGBSTRINGSET
- 作用于多个软件:GETINIFILE、WRITEINIFILE 和 GETINIFILESTRING、WRITEINIFILESTRING 和 SETREGVAL、GETREGVAL
其中最为常用的是第一类作用于策略范围之内的全局变量。声明方法如下所示:
//声明全局变量A
VARIABLE:A=0;
//声明超全局变量B
GLOBALVARIABLE:B=0;
1
2
3
4
5
2
3
4
5
VARIABLE
生命周期:首根k线到最后一根k线。
初始化节点:只在首根k线上进行初始化。
GLOBALVARIABLE
生命周期:指标加载至停止运行期间。
初始化节点:只在指标加载时对超全局变量定义的语句进行一次初始化。
- name: VARIABLE
desc: 生命周期:首根k线到最后一根k线。    </br>初始化节点:只在首根k线上进行初始化。 
bgColor: '#FFE7BA'
textColor: '#FF0000'
- name: GLOBALVARIABLE
desc: 生命周期:指标加载至停止运行期间。               </br>初始化节点:只在指标加载时对超全局变量定义的语句进行一次初始化。
bgColor: '#FFE7BA'
textColor: '#FF0000'
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
第二类和第三类是作用于整个软件和多个软件的变量,更加类似于一个微型数据库,它的保存于读取均通过策略自身逻辑进行控制。相关的使用会在之后的章节中重点介绍。
# 习题
1. 定义一个变量保存收盘价,并且在k线图中显示。(收盘价的函数是close)
MY_CLOSE:close;
1
2. 尝试定义一个字符串变量str,同时将'weistock'赋值给str。
str:'weistock'
1