Q语言

Q语言

目录导航

一Q语言特点

  1. 面向对象,可以自定义类;
  2. 区分大小写;
  3. 以一行代表一条完整的语句;
  4. 以Tab缩进实现结构化控制,使得程序可读性更强;
  5. 是弱数据类型的编程语言,能够实现变量、参数类型的智能化处理。

二代码结构

一个完整的Q语言策略程序由两个可选择使用模块三个必需模块构成:

1.两个可选择使用的模块

  • “引用”模块:在此模块可以声明想要引用的外部函数或类。
  • “外部参数”模块:在此模块中可定义全局性的静态变量,一般把策略的参数定义在此模块中。

2.三个必需的模块

  • Init()模块:仅在策略准备时运行一次。在该模块中,用户可定义全局变量,并对其进行赋初值。
  • Start()模块:由实时行情或后验数据流驱动循环调用,引擎每接受到一个新的数据就运行一次。策略编写者的策略思想主要在该模块中实现。每次执行完成后,在Start()模块中定义的局部变量会被释放,但在Init()模块中定义的全局变量以及在“外部参数”模块中定义的参数会保留,进入下一次Start()循环。
  • UnInit()模块:为程序全部执行完成结束后调用,为系统默认调用,一般地用户不需要在此模块中编写代码。

在Q语言中,变量可分为一般编程语言通用的“常规变量”和程序化交易专用的“特殊变量”,以下就是两类变量以及其定义和使用方法做简要介绍。

1变量声明

在使用变量之前,需要对变量进行声明和赋予初值。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声明为包含一个键(字符串型)及对应值(整数型)的字典型变量

2常规变量

语句 释义
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声明为包含一个键(字符串型)及对应值(整数型)的字典型变量

3特殊变量

(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定义,包括下表所列出的一些属性和方法。

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[:] 取出列表的所有值
  1. 编辑操作

对列表变量的编辑操作主要包括添加(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() 清空列表中的所有元素
  1. 其他操作

适用于列表的其他操作如下表所示:

操作类型 释义
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 改变字典指定键的值

4作用域

类型名称 注释 值域 范例
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

相关百科
返回顶部
产品求购 求购