q在计算机语言中的数字是几,Q语言(动态编程语言)_百度百科

Q语言

(动态编程语言)

语音

编辑

锁定

上传视频

Q是一个数据语言,目前被限定为一个数据定义语言(DDL)。Q采用JSON/XML模式,其配备了一个专用的用于定义数据的类型系统,和一个称为“信息合约”的理论,用于程序和数据交换语言之间的互操作。Q语言是专为量化投资和程序化交易开发的动态编程语言,兼具C++语言的灵活性和EasyLanguage语言的易用性,支持证券、期货、上海黄金交易所、渤海商品交易所所有指。标的历史数据、实时行情、程序化交易;支持恒生、金仕达、顶点、金证、易盛、CTP、国外FIX等几乎所有的交易接口;同时还支持C++,C#、JAVA、MATLAB、R等多种语言的调用。

中文名

Q语言

外文名

QLanguage属    于

计算机编程

语    言

动态编程语言

领    域

为量化投资和程序化交易开发

Q语言一、Q语言特点

编辑

语音

面向对象,可以自定义类;

区分大小写;

以一行代表一条完整的语句;

以Tab缩进实现结构化控制,使得程序可读性更强;

是弱数据类型的编程语言,能够实现变量、参数类型的智能化处理。

Q语言二、代码结构

编辑

语音

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

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

“引用”模块:在此模块可以声明想要引用的外部函数或类。

“外部参数”模块:在此模块中可定义全局性的静态变量,一般把策略的参数定义在此模块中。

2.三个必需的模块

Init()模块:仅在策略准备时运行一次。在该模块中,用户可定义全局变量,并对其进行赋初值。

Start()模块:由实时行情或后验数据流驱动循环调用,引擎每接受到一个新的数据就运行一次。策略编写者的策略思想主要在该模块中实现。每次执行完成后,在Start()模块中定义的局部变量会被释放,但在Init()模块中定义的全局变量以及在“外部参数”模块中定义的参数会保留,进入下一次Start()循环。

UnInit()模块:为程序全部执行完成结束后调用,为系统默认调用,一般地用户不需要在此模块中编写代码。

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

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

Q语言2. 常规变量

(1) 基本类型

Q语言支持long int(长、短整型)、double(双精度浮点型)、string(字符串)、bool(布尔型)及DateTime(日期类型)等5种基本的数据类型,如下所示:

类型名称注释值域范例

long int长、短整型±5.0 e−323~±1.79 e3080,1,10…

double双精度浮点数3.1415926789

string字符串‘abcdefg’ “a str”

bool布尔型为True或FalseTrue, False

DateTime日期时间类型2012/1/1 23:01:01DateTime的使用

DateTime类型为系统定义的一种类型,可通过构造函数DateTime定义,包括下表所列出的一些属性和方法。

DateTime的属性

属性含义属性含义

1Date8Month月份数

2Day月份天数9Now现在时间

3DayOfWeek周几10Second秒数

4DayOfYear一年的第几天11Ticks百纳秒数

5Hour小时12TimeOfDay一天的时间

6Millisecond毫秒13Today今天的日期

7Minute分钟14Year年份

DateTime的方法

方法含义方法含义

1AddDays增加天数10CompareTo和指定日期比较

2AddHours增加小时数11DaysInMonth当月天数

3AddMilliseconds增加毫秒数12Equals指示是否等于指定日期值

4AddMinutes增加分钟数13IsDaylightSavingTime指示是否在当前时区的夏时制范围内

5AddMonths增加月份数14IsLeapYear是否是闰年

6AddSeconds增加秒数15Parse从字符串中得到日期

7AddTicks增加Tick数16Subtract减去

8AddYears增加年数17ToString转化为字符串

9Compare比较两个日期

(2) 列表类型

相关联的一些同类型的数据可以以列表的形式来组织。在Q语言中,用户可以定义各种列表结构,包括:整型、双精度型、字符(串)型以及布尔逻辑型等基本类型;也可以是Q语言定义的结构变量类型;还可以是用户自定义的数据类型。

Q语言简化了列表定义的方式,采用简洁的直接赋值的方式进行定义及初值的设定,形式如下所示:

定义方式1Listname = [init_value]*Length

定义方式2Listname = [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改变字典指定键的值

Q语言3. 特殊变量

根据程序化交易的特点,在开发策略代码时,可以直接调用系统内置的特殊变量来简化编码,提高开发效率。

(1) 系统变量

持仓相关变量:变量名称释义

Pos.LongPosition多头持仓手数。如果有3手多头持仓,则Pos.LongPosition = 3

Pos.ShortPosition空头持仓手数。如果有2手空头持仓,则Pos.ShortPosition = 2

Pos.MarketPosition持仓状态。可取三种值,1,-1,0。如果多头持仓>空头持仓,该值为1;若多头持仓

Pos.LastEntryBar上一次开仓所在Bar的全局索引。如果上一次开仓所在的Bar的索引值为168,则Pos.LastEntryBar = 168

Pos.LastExitBar上一次平仓所在Bar的全局索引。如果上一次平仓所在的Bar的索引值为56,则Pos.LastExitBar = 56

Pos.LastEntryPrice上一次开仓的价格。如果上一次开仓时trade.T_Buy()函数中输入的价格是Price,则Pos.LastEntryPrice = Price

Pos.LongAvgEntryPrice多头持仓均价。如果有3手多头持仓,开仓价格分别为2300、2450、2400,则多头持仓均价为(2300+2450+2400)/3 = 2383.33

Pos.ShortAvgEntryPrice空头持仓均价。如果有3手空头持仓,开仓价格分别为2300、2450、2400,则空头持仓均价为(2300+2450+2400)/3 = 2383.33Bar相关变量:变量名称释义

Bar.Count当前Bar的全局索引。按照从左到右的顺序,全局第一根Bar的索引值为1,第二根Bar的索引值为2,以此类推。

例如,从左向右数,当前Bar为第230根Bar,则Bar.Count = 230

以下两种写法是一致的:

BarCount=Bar.Count

BarCount=quotation.Q_BarCount(strSecuCode,BarCountMode.GLOBAL,StrategyInfo.DefaultTimeFrame)

Bar.CountIntra当前Bar在当前交易日的索引。按照从左到右的顺序,当前Bar所在交易日的第一根Bar的索引值为1,第二根Bar的索引值为2,以此类推。

Bar.CountDay当前的日Bar的索引。按照从左到右的顺序,第一根日Bar的索引值为1,第二根Bar的索引值为2,以此类推。

Bar.Time当前Bar的时间。

例如,当前Bar的时间为14:35,则Bar.Time = 1435

以下两种写法是一致的:

Time = Bar.Time

Time=quotation.Q_BarTime(strSecuCode,StrategyInfo.DefaultTimeFrame)

Bar.Date当前Bar的日期。

例如,当前Bar的日期为2013年8月28日,则Bar.Date = 20130828

以下两种写法是一致的:

Date = Bar.Date

Date=quotation.Q_Date_Bar(strSecuCode,StrategyInfo.DefaultTimeFrame)系统相关变量:变量名称释义

Sys.Time获取系统时间。

例如,系统时间为20:23,则Sys.Time = 2023

Sys.Date获取系统日期。

例如,系统日期为2013年8月1日,则Sys.Date = 20130801资金相关变量:变量名称释义

Cap.Init初始资金

Cap.Margin可用保证金品种相关变量:变量名称释义

Contract.Code合约代码

Contract.MarginRatio合约保证金比例

Contract.PriceTick合约最小变动价格

Contract.TradingUnit合约交易单位

(2) 行情变量

变量名称释义

Open获取Bar open数据序列信息

High获取Bar high数据序列信息

Low获取Bar low数据序列信息

Close获取Bar close数据序列信息

Vol获取Bar volumn数据序列信息

OpenInt获取Bar openint数据序列信息

OpenD获取DayBar open数据序列信息

HighD获取DayBar high数据序列信息

LowD获取DayBar low数据序列信息

CloseD获取DayBar close数据序列信息

VolD获取DayBar volumn数据序列信息

OpenIntD获取DayBar openint数据序列信息

BarList获取Bar数据序列信息。序号0为最新Bar。返回值为一个BarInfo类型的变量,参见BarInfo。

以下两种写法是一致的:

List =Bar.List

List = quotation.Q_Barlist (strSecuCode,StrategyInfo.DefaultTimeFrame)

(3) 外部参数

在“外部参数”模块中可定义全局性的静态变量,一般在整个代码中仅仅对其调用,不再进行修改,所以策略的参数可以很便利的使用“外部参数”进行定义。

示例如下:

Line 1:Ex:

Line 2:ExTime = 1455

Line 3:StartTime = 905

Line 4:EndTime = 1305

Line 5:ATRLength=7

Line 6:M=15

Line 7:N=0.15

Line 8:TrailStop=7

Line 9:EndEx

(4) 其他变量

枚举类型

Q语言提供了一些在策略开发中常用的枚举类型,各种类型的名称、取值、含义及使用范例如下表所示:

类型名称值注释使用范例

SecuType

(表示证券类型)NULL默认空类型用SecuType.STOCK表示证券类型为股票;用SecuType.BOND_FUTURE表示证券类型为债券期货

COMMON所有类型

STOCK股票

FUTURE期货

BOND债券

OPTIONS期权

GOLD贵金属

COMMODITY商品

FOREIGN_EXCHANGE外汇

INDEX_FUTURE指数期货

COMMODITY_FUTURE商品期货

BOND_FUTURE债券期货

TimeFrame

(表示K线类型)TICKTick 数据用TimeFrame.TICK表示K线数据为Tick数据;用TimeFrame.DAY表示K线数据为日数据

MIN_11 分钟 Bar

MIN_55 分钟 Bar

MIN_1010 分钟 Bar

MIN_1515 分钟 Bar

MIN_3030 分钟 Bar

MIN_6060 分钟 Bar

DAY一日 Bar

WEEK一周 Bar

MONTH一月 Bar

SEANSON一季度 Bar

YEAR一年 Bar

BarCountMode

(表示Bar计数模式类型)INTRADAY日内 Bar 计数BarCountMode.INTRADAY

BarCountMode.GLOBAL

GLOBAL全局 Bar 计数

StrategyType

(表示策略类型)INDICATOR指标StrategyType.INDICATOR

StrategyType.TRADINGSYSTEM

TRADINGSYSTEM交易系统

OffsetFlag

(表示开平标志)OPEN开仓OffsetFlag.OPEN,

OffsetFlag.CLOSE

CLOSE平仓

FORCECLOSE强平

CLOSETODAY平今

TradeDirection

(表示买卖方向)BUY买TradeDirection.BUY

TradeDirection.SELL

SELL卖

OrderType

(表示委托类型)MARKETORDER市价OrderType.MARKETORDER

OrderType.LIMITORDER结构类型

结构型的数据变量将一组相关的信息变量组织为一个单一的变量实体,其中各个信息变量的数据类型既可以是基本的数据类型,也可以是自定义的数据类型。Q语言定义了两类结构变量类型BarInfo和TickInfo,分别记录行情数据Tick数据信息和Bar数据信息,如表3和表4所示。其中,Tick数据信息是行情的最精确单位,是交易时间的最小颗粒;我国期货市场是500 毫秒推送一个Tick,股票市场是5~6 秒推送一个Tick。在一定时间段内的Tick 序列就构成了一根K 线,在Q语言中单根K线就称为一个Bar。

和枚举类型一样,除系统自带的结构变量类型之外,Q语言还不开放开发者自定义的结构类型变量。用户可以采用字典、类的方法实现结构变量的定义。

TickInfo结构类型属性介绍:

属性名称属性类型属性注释

SecuTypeSecuType标的类型

SecuCodestring标的代码

SecuNamestring标的名称

TradingDateDateTime交易日期

TradingTimeDateTime交易时间

LatestPricedouble最新价

TurnoverVolumedouble成交量 / 手数

TurnoverValuedouble成交金额

TurnoverWeightdouble成交重量

PriceChangeRatiodouble价格涨跌幅

PriceChangeddouble价格涨跌值

UpperLimitPricedouble涨停价格

LowerLimitPricedouble跌停价格

PreClosePricedouble前收盘价

PreSettlementPricedouble前结算价

PreOpenInterestdouble前持仓量

SettlementPricedouble结算价

OpenInterestdouble持仓量

SuspendTagbool停牌标志

BarTimeFrameTimeFrameBar 时间窗

OpenPricedoubleBar 开盘价

HighPricedoubleBar 最高价

LowPricedoubleBar 最低价

ClosePricedoubleBar 收盘价

AveragePricedouble均价

PriceUpDownint涨跌:1 涨 -1 跌 0 平

BidPrice1double买一价

BidPrice2double买二价

BidPrice3double买三价

BidPrice4double买四价

BidPrice5double买五价

AskPrice1double卖一价

AskPrice2double卖二价

AskPrice3double卖三价

AskPrice4double卖四价

AskPrice5double卖五价

BidVolume1double买一量

BidVolume2double买二量

BidVolume3double买三量

BidVolume4double买四量

BidVolume5double买五量

AskVolume1double卖一量

AskVolume2double卖二量

AskVolume3double卖三量

AskVolume4double卖四量

AskVolume5double卖五量

BarInfo结构类型属性介绍:

属性名称属性类型属性注释

SecuTypeSecuType标的类型

SecuCodestring标的代码

SecuNamestring标的名称

TradingDateDateTime交易日期

TradingTimeDateTime交易时间

LatestPricedouble最新价

TurnoverVolumedouble成交量/手数

TurnoverValuedouble成交金额

TurnoverWeightdouble成交重量

PriceChangeRatiodouble价格涨跌幅

PriceChangeddouble价格涨跌值

UpperLimitPricedouble涨停价格

LowerLimitPricedouble跌停价格

PreClosePricedouble前收盘价

PreSettlementPricedouble前结算价

PreOpenInterestdouble前持仓量

SettlementPricedouble结算价

OpenInterestdouble持仓量

SuspendTagbool停牌标志

BarTimeFrameTimeFrameBar 时间窗

OpenPricedoubleBar 开盘价

HighPricedoubleBar 最高价

LowPricedoubleBar 最低价

ClosePricedoubleBar 收盘价

Q语言4. 作用域

Q语言按照模块结构来组织程序,一个完整的模块包括函数、类、控制结构等,模块之间可以是并列关系,也可以是包含关系。

变量的作用域是指变量在各模块中的使用范围。按照作用域的范围,Q语言中变量可分为全局变量(global)和局部变量(local)。在量邦天语中

全局变量的声明在“Init()”中完成,在此模块中声明的变量自动默认为全局变量;每轮“Start()”模块运行时它都存在并一直保留至程序结束,期间可以对其进行操作。

在“Start()”模块内部声明的变量都是局部变量,作用域仅限于当轮运行的“Start()”模块;在当轮“Start()”模块运行过程中,局部变量必须先声明之后才可调用。

如下例所示:

示例:变量的作用域

Line 1:def Init():

Line 2:Volume=100.0

Line 3:BuyFlag=True

Line 4:CumValue=0.0

Line 5:return "初始化成功"

Line 6:def Start(strSecuCode):

Line 7:addval = 5.12

Line 8:if BuyFlag==True :

Line 9:temp = 0.1 * Volume

Line 10:CumValue = CumValue + addval + temp

Line 11:return

Line 12:def UnInit():

Line 13:return

第1~13行构成了一个比较完整的Q语言程序。

第1~5行定义了程序的Init()模块,初始化模块。

第2~4行声明了三个全局变量:Volume(double型)、BuyFlag(Bool逻辑型)和CumValue(double型)。

第6~11行定义了程序的Start()模块,循环主体模块。

第7行定义了一个局部变量:addval (double型),该局部变量的作用域仅局限于当轮运行的“Start()”模块中。

第9行也定义了一个局部变量temp,特别注意:即使一个局部变量是在“Start()”模块的子模块内被定义的,它的作用域仍然是整个当轮运行的“Start()”模块,所以temp可以在if语句之外(语句10)中被调用(即便它是在if语句内被定义的)。

第12~13行定义了程序的UnInit()模块,结束化模块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值