一个完整的Q语言策略程序由两个可选择使用模块三个必需模块构成:
1.两个可选择使用的模块
2.三个必需的模块
在Q语言中,变量可分为一般编程语言通用的“常规变量”和程序化交易专用的“特殊变量”,以下就是两类变量以及其定义和使用方法做简要介绍。
在使用变量之前,需要对变量进行声明和赋予初值。Q语言是一种弱类型的程序语言,变量类型不需要特别进行声明,变量声明和赋予初值可同步进行,变量类型由所赋予的初值的数据类型决定。变量名称可采用大写字母(A-Z)、小写字母(a-z)、下划线(_)以及数字(0-9)等,但首字母不能为数字。变量名称的长度基本没有限制。
示例:变量声明和变量类型的确定
语句 | 释义 |
i=5 | 将i声明为整数(int)型变量,并赋予初值5。 |
Price=[0.1] | 将Price声明为长度为1的双精度型的动态列表变量,并赋予初值0.1。 |
Price=[0.1]*10 | 将Price声明为长度为10的双精度型的动态列表变量,并把数值中每个元素的初值设为0.1。 |
SecuCode=”600519” | 将SecuCode声明为字符串型变量,并赋予初值”600519”。 |
SellFlag = {"600519": 0} | 将SellFlag声明为包含一个键(字符串型)及对应值(整数型)的字典型变量 |
语句 | 释义 |
i=5 | 将i声明为整数(int)型变量,并赋予初值5。 |
Price=[0.1] | 将Price声明为长度为1的双精度型的动态列表变量,并赋予初值0.1。 |
Price=[0.1]*10 | 将Price声明为长度为10的双精度型的动态列表变量,并把数值中每个元素的初值设为0.1。 |
SecuCode=”600519” | 将SecuCode声明为字符串型变量,并赋予初值”600519”。 |
SellFlag = {"600519": 0} | 将SellFlag声明为包含一个键(字符串型)及对应值(整数型)的字典型变量 |
(1) 基本类型
Q语言支持long int(长、短整型)、double(双精度浮点型)、string(字符串)、bool(布尔型)及DateTime(日期类型)等5种基本的数据类型,如下所示:
类型名称 | 注释 | 值域 | 范例 |
long int | 长、短整型 | ±5.0 e−323~±1.79 e308 | 0,1,10… |
double | 双精度浮点数 | 3.1415926789 | |
string | 字符串 | ‘abcdefg’ “a str” | |
bool | 布尔型 | 为True或False | True, False |
DateTime | 日期时间类型 | 2012/1/1 23:01:01 |
DateTime类型为系统定义的一种类型,可通过构造函数DateTime定义,包括下表所列出的一些属性和方法。
DateTime的属性 | |||||
属性 | 含义 | 属性 | 含义 | ||
1 | Date | 日期 | 8 | Month | 月份数 |
2 | Day | 月份天数 | 9 | Now | 现在时间 |
3 | DayOfWeek | 周几 | 10 | Second | 秒数 |
4 | DayOfYear | 一年的第几天 | 11 | Ticks | 百纳秒数 |
5 | Hour | 小时 | 12 | TimeOfDay | 一天的时间 |
6 | Millisecond | 毫秒 | 13 | Today | 今天的日期 |
7 | Minute | 分钟 | 14 | Year | 年份 |
DateTime的方法 | |||||
方法 | 含义 | 方法 | 含义 | ||
1 | AddDays | 增加天数 | 10 | CompareTo | 和指定日期比较 |
2 | AddHours | 增加小时数 | 11 | DaysInMonth | 当月天数 |
3 | AddMilliseconds | 增加毫秒数 | 12 | Equals | 指示是否等于指定日期值 |
4 | AddMinutes | 增加分钟数 | 13 | IsDaylightSavingTime | 指示是否在当前时区的夏时制范围内 |
5 | AddMonths | 增加月份数 | 14 | IsLeapYear | 是否是闰年 |
6 | AddSeconds | 增加秒数 | 15 | Parse | 从字符串中得到日期 |
7 | AddTicks | 增加Tick数 | 16 | Subtract | 减去 |
8 | AddYears | 增加年数 | 17 | ToString | 转化为字符串 |
9 | Compare | 比较两个日期 |
(2) 列表类型
相关联的一些同类型的数据可以以列表的形式来组织。在Q语言中,用户可以定义各种列表结构,包括:整型、双精度型、字符(串)型以及布尔逻辑型等基本类型;也可以是Q语言定义的结构变量类型;还可以是用户自定义的数据类型。
Q语言简化了列表定义的方式,采用简洁的直接赋值的方式进行定义及初值的设定,形式如下所示:
定义方式1 | Listname = [init_value]*Length |
定义方式2 | Listname = [init_value1, init_value2, …, init_valueN] |
其中,Listname表示列表名称,init_valueN为赋予每个列表元素的初值,Length为列表的长度(即列表包含元素的个数)。列表元素的类型由其初值的类型确定,“*Length”为可选;如果不设定,表示列表的长度为1。
更多示例如下所示:
语句 | 释义 |
Price = [0.0] | 定义长度为1的列表变量Price,并给元素赋予初值0.0。 |
PriceH = [0.0]*10 | 定义长度为10的列表变量PriceH,并给每个元素赋予初值0.0。 |
PriceC = [1.0, 1.1, 1.15] | 定义长度为3 的列表变量PriceC,并给元素分别赋予初值1.0、1.1、和1.15。 |
CharArray = [‘A’,’B’] | 定义长度为2 的字符列表变量CharArray,并给元素分别赋予初值’A’和’B’。 |
StrArray = [“no”,”yes”] | 定义长度为2 的字符串列表变量StrArray,并给元素分别赋予初值”no”和”yes”。 |
LogArray = [True,False] | 定义长度为2 的逻辑型列表变量LogArray,并给元素分别赋予初值True和False。 |
列表的取值操作通过“[]”符号完成,如下表所示:
操作类型 | 释义 |
Listname[0] | 取出列表的第1个(索引为0的)值 |
Listname[1:4] | 取出列表从第2个到第5个之间的所有值 |
Listname[-1] | 取出列表的倒数第1个值 |
Listname[-3:] | 取出列表从倒数第3个到倒数第1个的所有值 |
Listname[3:] | 取出列表从第4个到最后一个的所有值 |
Listname[:3] | 取出列表从第1个到第4个的所有值 |
Listname[:] | 取出列表的所有值 |
对列表变量的编辑操作主要包括添加(append)、插入(insert)、移除(remove)、排序(sort)、反转(reverse)、弹出(pop)、清空(clear),如下表所示:
操作类型 | 释义 | |
Listname. append(value) | 在列表列表的末尾处加入值value | |
Listname. insert(i, value) | 在列表列表索引为i的地方插入值value | |
Listname. remove(value) | 移除列表列表中第一个值为value的元素 | |
Listname.sort() | 对列表中元素的元素进行排序 | |
Listname.reverse() | 对列表中元素的元素进行反转 | |
Listname.pop(i) | 弹出列表中索引为i的元素并返回 | |
Listname.clear() | 清空列表中的所有元素 |
适用于列表的其他操作如下表所示:
操作类型 | 释义 |
Listname.index(value) | 查找列表中第一个值为value的元素并返回其索引 |
Listname.count(value) | 返回列表中出现value的次数 |
(3) 字典类型
Q语言中,字典(Dictionary)是由键(Key)和值(Value)一一对应所形成的基本单元的集合。
同样地,Q语言简化了字典定义的方式,采用更加简洁的直接赋值的方式进行定义及初值的设定。形式如下:
<定义字典变量> | dictname = {key1:value1, key2:value2, … , keyN:valueN} |
其中,dictname为构造的字典的名称,keyN为键N的名称,为字符串,valueN为键N对应的值;键keyN和值valueN均可为任意的数据类型,其值分别由定义时给定的值的类型确定。在定义好字典类后,我们可以通过访问字典的键获得该键对应的值。
字典的操作实例:
语句 | 释义 |
ExternPara = {"LSRto": 0.02, "SSRto": 0.02} | 定义ExternPara字典 |
ExternPara["LSRto"] = 0.05 | 改变字典指定键的值 |
类型名称 | 注释 | 值域 | 范例 |
long int | 长、短整型 | ±5.0 e−323~±1.79 e308 | 0,1,10… |
double | 双精度浮点数 | 3.1415926789 | |
string | 字符串 | ‘abcdefg’ “a str” | |
bool | 布尔型 | 为True或False | True, False |
DateTime | 日期时间类型 | 2012/1/1 23:01:01 |