策略编程语言用户编程手册.docx
- 文档编号:8954936
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:122
- 大小:578.82KB
策略编程语言用户编程手册.docx
《策略编程语言用户编程手册.docx》由会员分享,可在线阅读,更多相关《策略编程语言用户编程手册.docx(122页珍藏版)》请在冰点文库上搜索。
策略编程语言用户编程手册
《图标》DTS2.0策略编程语言用户编程手册
Author:
DTS研发部门Version 2.08
RevisionHistory
Date
Version
Description
Author
Approver
2008/11/19
2.00
Initialversion.
Aaron.Peng
2011/3/16
2.0.1
增加3.3.3.3.5内部修正命令
3.5.2.2 注册要收听的价格
3.5.2.5查找价格
更新3.5.4.2_OnEventOrderResponse回调
Jack.shi
Peter.cao
2011/4/2
2.0.2
更新3.5.3.3_OnEventPosition回调
Jack.shi
Peter.cao
2011/5/27
2.0.3
更新2.1.3的3.API接口关键字
2.3.1.1nil类型和逻辑判断,针对于指针变量作了说明
增加3.3.3.2.3DTSMicroTime
3.3.3.3.4发送Order(下单、撤单)命令,增加了单个Order下单的说明
更新3.3.3.3.5内部修正命令
更新3.5.2.5查找价格
更新3.5.4.2_OnEventOrderResponse回调
更新3.5.5.1DTSMessageRecordAccess类型
3.6系统工具函数,增加3.6.5~3.6.10部分
xuebin.li
Peter.cao
2011/6/20
2.0.4
增加批量撤单接口3.3.3.3.3,3.3.3.3.6
Yousong.Zhang
Peter.cao
2011/6/30
2.0.5
增加matlab的接口说明3.7,增加简单加密的说明3.6.9,3.6.10。
Jack.shi
Peter.cao
2011/8/10
2.0.6
增加市场逐笔行情信息3.5.3
6.1修改ClosePriceInputFlag的说明
增加DTSQUEUEPRICEFIELD一览6.2
Lin.gong
Jack.shi
2011/9/15
2.0.7
增加2.3.1.2sys_find的说明
更新3.7的matlab图只显示半个
6.1增加ETFIOPV说明,修改VWAPEVEPrice说明
更新6.3DTSNewOrderAccessfield一览
更新6.4DTSCancelOrderAccessfield一览
xiang.shu
Jack.shi
2011/9/19
2.0.8
增加PriceCondition的说明
Jack.shi
1.DTS策略编程语言简介
DTS系统策略编程语言是针对DTS程式化套利系统编写套利策略的策略编程语言,提供灵活的,具有一般性的编程语言接口,可以为DTS系统编写高效的策略服务程序。
DTS策略编程语言综合了Lua和基于C++的DTS系统API接口,最终将脚本翻译成C++服务器程序编译执行,具有灵活高效的特点。
DTS策略编程语言由基本DTSScript和DTS系统API两部分组成,DTSScript提供了基本用户编程逻辑的编写接口,DTSAPI提供了Server编程框架和用户策略逻辑对DTS后台系统数据的访问和使用接口。
本手册讨论这种语言的基本组成,语法特点和具体使用方法,同时介绍DTS客户端系统附带的LuaEditor的基本功能和使用技巧。
DTS策略编程平台及其原理
DTS策略编程平台主要由DTSClient下带的DTSScriptEditor(LuaEditor)为客户端,配合StrategyControlServer(SCS)为服务器端组成。
用户编写的策略通过Client端自带的Event打包解包库(EventCommunicator),打包成事件(Event)发送给SCS,由SCS内的ScriptTranslator(L2C)翻译成C++源代码后由GNU编译成策略服务器程序(SS)。
启动时,由客户端发送启动Event给SCS控制启动SS,并告知客户端SS端口及ip地址,由客户端直接Socket链接SS获取策略服务;停止时,也由客户端发送停止Event给SCS控制结束SS服务。
由于SS是直接编译运行的,所以拥有效率高的特点;同时每个客户有自己的策略服务器,故每个服务器程序负载不会很重,所以又有稳定,快速的优点。
策略在系统平台上的生命周期和运行过程
策略生命周期
要完整地编写一个能用的策略服务器,需要以下几个步骤:
1.在ScriptEditor中编写完整的策略脚本。
2.语法检查通过。
3.提交SVN(通过SCS)成功。
4.发布成功(编译成功)。
当策略被发布成功后,用户可以在自己的策略管理界面上看到相应的策略;用户可以选择加载需要的策略版本,并且运行此策略;策略一旦运行,就开始提供既定的服务直到用户停止此策略。
策略的生命周期:
系统通讯和Event
DTS系统内部各个组成部件间的通讯都是建立在事件(Event)处理上的,SCS,Client及SS之间信息的互换都是通过Event来完成的。
所有的Event都是统一格式存放的,由包含在Client和Server端程序中的EventCommunicatorLib进行编码/解码。
我们可以把Event看作是可以自定义字段的Message。
事件定义
所有用户事件都是可以在脚本中定义的。
以下例程定义了一个最简单的事件,
_DefineEventObjectTestEvent_AS_Output
_DefFld("TestField",_String,12);
_End
这个Event被定义为包含一个名叫“TestField”的字段,字段类型为String类型,长度为12。
事件定义和处理被做为一种DTSAPI的特性将在第3章节中详细介绍。
输入输出事件
做为策略编程语言,DTSScript写好的脚本最终会被编译成策略服务器程序(SS);相对SS来说是输入的Event被认为是输入事件,例如Client向SS传送的参数可以被认为是一个In事件;相反的,SS发送出去的事件被认为是Out事件,如上面的例程就是定义了一个Out事件,填写完整这个TestEvent后,SS可以创建一个Out事件的实例并且通过API将这个实例发送给所有监听这个事件的客户端(可能是DTSClient端或者另外一个SS)。
Bufferflag
由于系统中所有的通讯都被认为是事件处理,也就是说所有的Server,Client和Server之间都是基于一方发送Out事件,一方接收事件并触发回调来达到交换信息的目的,这样,为了可以使不同时间连接上来的客户端可以收到完整的Event流,Event被设计成带有一个Buffer标志,BufferFlag一共有3种值,0代表没有Buffer,即后来连接上来的Client不会接收到连接上来之前Server已经发送过的Event;1代表list类型的Buffer,即后来连接上来的Client能够收到符合条件的自Server启动以来发送过的所有这种类型的Event,并且是按事件顺序排列的;2代表map类型的Event,即后来连接上来的Client能够收到所有以某个字段为Key的Server已经发送过的Event,重复Key的Event只保留最新的一个。
有了这2种buffer,像诸如HDS(HistoricalDataSever)这种需要保留历史数据的服务器也可以用策略来描述了。
事件回调
对于接收别的Server或Client发送的事件一方的Server或Client,只需要知道接收的是来自哪里的什么Event就可以了:
_RegisterEventObject(PortfolioID="P2007091319484800001",StrageyID="2007091319484800001",EventID="TbtPEvent",condition="IssueCode#issueCode1,issueCode2,issueCode3")
使用_RegisterEventObject命令可以注册与什么策略服务器连接,并取得什么Event。
当连接建立后,每当那个策略服务器向外发送既定的Event,接收方就会收到一条Event的回调:
_OnEventDefined(TbtPEventevt)
…--用户逻辑
_End
收到Event回调后,接收方就通过_OnEventDefined接口回调函数执行既定的用户逻辑。
策略参数和参数变化回调
在DTS2.0系统中,所有的系统间交互都是通过Event完成的,所以策略服务器的输入参数实际上也是一种特殊的Event。
输入参数Event做为一种特殊Event,被设计为是同时拥有Input和OutPut属性的Event,做为InputEvent(客户端向SS发送参数值),其BufferFlag为0,SS只需要最新的参数;而做为OutputEvent(SS返回给客户端的Ack),其BufferFlag为2,Key是一个永远为1的值,这样可以保留最新一个Ack也能被Client收到,防止Client重启后参数不同步的情况。
所有定义的参数都会在策略服务器中对应一个同名同类型的全局变量,脚本中可以直接使用这些参数,同时当参数值变化时,Client端发送来的参数变化也会被同步到这些全局变量中。
可以通过_DefineStrategyParameters关键字定义一组策略Server的参数,并通过_OnEventParameterChanged(DTSParameterparameter)回调来处理从客户端发送过来的参数变化:
_DefineStrategyParameters
_StringissueCode1
_StringissueCode2
_StringissueCode3
_Numberfactor1
_Numberfactor2
_Numberfactor3
_Numberconstant
_StringperiodType
_StringperiodCount
_End
_OnEventParameterChanged(DTSParameterparameter)
…--用户处理逻辑
_End
运行策略
当策略被发布好以后,DTSClient中的策略管理页面也就有了相应的策略列表:
在需要启动此策略的模型中添加此策略:
启动策略:
停止策略:
2.DTSScript编程基础
DTSScript基本语法格式
语言字符要求
DTSScript中的名字(变量名,函数名,Table的字段名等标识符)可以由任意字母,数字和下划线组成,但是不能以数字开头,由于DTSAPI(将在第3章详细介绍)关键字以”_”开头,所以应尽量避免使用”_”做为名称的起始符号,以避免和系统关键字相互冲突。
DTSScript是严格区分大小写的,比如Text和text是不同的变量名,可以用来代表不同的2个变量。
DTSScript中的字符串可以是以一对单引号(’)引起或者一对双引号(”)引起的一串字符,内容里可以支持任意字符,包括中文,系统传输和翻译中不会改变字符的编码方式,但是为了终端显示和避免编码解码方式不同带来的麻烦,建议统一使用utf-8编码方式(注意不要使用带signal的UTF-8编码,头标记会被认为是非法字符)。
对于‘_’开头的函数,一般认为是系统保留的函数名,建议尽量避免使用。
对于“DTS”开头的词,一般认为是系统API数据类型,请不要使用其命名一般变量和函数等。
名字,函数调用和关键字,算符等之间以空白分隔,空白可以是任意的空白,不限数量和种类,包括空格(''),TAB('\t'),分割符('\f')和分行/回车('\r\n','\r','\n')。
DTSScript各个段(声明,结构,语句等)间可以以分号(';')分隔,也可以以上述的空白分隔。
但是有一种情况必须用分号分隔:
locala--1
b=“b”--2
_Stringstr=b--3
由于DTSAPI允许定义带类型限定(如上例第3行,限定str为_String类型)的变量,而某些自定义类型名也可能使用名字(Identifier),所以对上例中1,2行中的a和b中的a,Script翻译器不能确定其是b的类型限定名还是一个变量定义,所以这种情况下,ab间必须加一个分号分隔2个语句:
locala;--1
b=“b”--2
_Stringstr=b--3
DTSScript支持各种数字表述方式,包括整数,负数(-),小数(带小数点’.’),16进制数(0x)和科学计数法表示的数值:
33.03.1416314.16e-20.31416E10xff0x56
程序注释
DTSScript采用Lua的程序注释形式,分为行注释和块注释2种:
DTSScript使用’--‘来表示行注释,例如:
a='alo\n123\"'--Assign‘alo\n123\"’toa
DTSScript采用’--[[‘‘]]’对来表示块注释,例如:
--[[DTSScriptComment
CopyRightDragonSoft]]
关键字
DTSScript关键字分为一般关键字,运算符和系统API关键字3部分。
关键字不能当作名字(标识符)使用。
拥有系统给定的含义。
DTSScript一般关键字有:
关键字
含义
关键字
含义
关键字
含义
关键字
含义
and
逻辑与
break
跳出循环
do
块开始
else
非条件
end
块结束
false
布尔假
for
For循环
function
函数声明
in
Tablein
local
本地声明
nil
空
not
逻辑否
repeat
Repeat
return
返回
then
Then
true
真
while
While
elseif
elseif
if
条件语句
or
逻辑或
until
Repeat
注意:
1.nil表示DTSScript的空,与NULL意义相近但不是NULL。
2.elseif为连写的elseif,和其他语言不同,不能写成分开的elseif。
DTSScript运算符和关键符号:
关键符号
含义
关键符号
含义
关键符号
含义
HUGE_VAL
最大数
+
加号
-
减号
*
乘号
/
除号
%
取余
^
乘方
=
赋值
==
等于
~=
不等于
<=
小于等于
>=
大于等于
>
大于
<
小于
(
小括号左
)
小括号右
[
方括号左
]
方括号右
{
大括号左
}
大括号右
;
分号
,
逗号
.
点号
..
字符串连接
…
不定参
DTSAPI关键字:
1.DTS开头的标识符:
DTS开头的标识符表示DTS系统内部类型,不能做为名字(标识符)使用,例如:
DTSBasketbasket=_CreateBasket()
其中DTSBasket表示basket是一个DTSBasket类型的变量,与一般类型(不带类型定义的变量)不同,每种DTS系统内部类型的实例都拥有自己特有的方法和构造方式,这部分请参见第3章和第6章。
2.sys_开头的函数名:
sys_开头的函数都是系统内建函数,也就是系统内部提供的已经写好的函数,有自己的用法和功能。
如:
sys_format(“%f”,3.14)输出一个STRING型的”3.14”;这部分函数会在以后的各节中一一列举其形式和功能。
3.API接口关键字
类型关键字:
关键字
对应类型
关键字
对应类型
关键字
对应类型
_Boolean
bool
_Int
int
_Decimal
BDecimal
_BigInteger
BBigInteger
_String
BString
_Double
double
事件字段类型:
关键字
对应类型
关键字
对应类型
_Boolean
int
_Number
double
_String
BString
_Meta
char*
事件类型关键字:
关键字
事件类型
关键字
事件类型
_Input
对SS来说为输入事件
_Output
对SS来说为输出事件
事件时间Key类型:
关键字
含义
关键字
含义
关键字
含义
_EventYearType
按年
_EventMonthType
按月
_EventWeekType
按周
_EventDayType
按日
_EventMinuteType
按分
_EventOtherType
其他
文件索引类型关键字:
关键字
含义
关键字
含义
关键字
含义
_DataYearType
按年
_DataMonthType
按月
_DataWeekType
按周
_DataDayType
按日
_DataOtherType
其他
数据库操作辨识符:
关键字
含义
关键字
含义
关键字
含义
_Insert
插入
_Modify
修改
_Delete
删除
DTSAPI中的其他关键字:
_DefineEventObject定义一个事件。
_AS定义事件类型(in、out)。
_End回调段结束符。
_DefKeyField定义事件主键。
_DefFld定义事件字段。
_SetBufferedFlag定义事件BufferFlag。
_GetBufferedFlag得到事件BufferFlag。
_SetDataType设置事件数据类型。
_GetDataType得到事件数据类型。
_SetDataInterval设置事件数据发送间隔。
_GetDataInterval得到事件数据发送间隔。
_SetTimeKey设置事件时间键。
_GetTimeKey得到事件事件键。
_SetFld设置事件字段值。
_GetFld得到事件字段值。
_CreateEventObject创建一个事件实例。
_CreateDynamicData创建一个动态数据。
_GetFileType得到文件类型。
_SaveData保存至文件。
_Clear清空数据。
_GetDynamicData得到保存的动态数据,和OnDynamicData为同步回调。
_OnDynamicData得到动态数据的回调。
_GetCommonData获取静态数据,和OnCommonData为同步回调。
_OnCommonData得到静态数据的回调。
_UpdateCommonData更新、插入、删除静态数据。
_DefineStrategyParameters定义策略服务器参数。
_OnEventParameterChanged策略服务器参数变化回调。
_RegisterEventObject注册事件。
_OnEventDefined事件回调。
_EventName事件回调名字标识。
_EventID事件ID标识。
_OnEventTimer定时器回调。
_EndTime定时器终止事件标识。
_Interval定时器时间间隔标识。
_TimerName定时器名字标识。
_OnEventPrice价格回调。
_PriceName价格函数名字标识。
_IssueCode证券号码标识。
_MarketCode市场标识。
_OnEventPosition仓位变化回调。
_OnEventExecution成交回调。
_OnEventOrderResponse下单回复回调。
_RegisterExecution注册监听成交。
_SendToClients发送事件给客户端(监听者)。
_Stop停止策略服务。
_RegisterPrice注册监听价格。
_StopPrice停止监听单个价格。
_StopAllPrice停止监听所有价格。
_RegisterPosition注册监听仓位变化。
_StopPosition停止监听仓位变化。
_StartTimer启动定时器。
_StartTime定时开始时间标识。
_MaxNumber定时器最大跳数标识。
_StopTimer停止定时器。
_createPortfolioOrders得到模型下所有Order的Basket。
_SendOrders发送Order(下单、撤单等)。
_CancelOrders撤单(已废止,现在使用_SendOrders撤单)。
_GetPortfolioID取得模型ID。
_GetStrategyVersion取得策略版本号。
_GetStrategyID取得策略号。
_GetPortfolio取得模型数据。
_GetDealerID取得用户ID。
_GetPortfolioContent取得模型信息。
_GetFileRoot取得动态数据文件存放的根目录。
_GetHostname取得主机名。
_GetServicePort取得服务端口。
_GetProcessID取得服务进程号。
_GetWorkstationNo取得服务器号。
_GetStartTime取得服务开始事件。
_CreateBasket创建一个篮子(basket)。
_CreateBasketCancelBasket创建一个篮子撤单的篮子(basket)。
_CreateNewOrder创建一个空的NewOrder,(下单用)。
_CreateCancelOrder创建一个空的CancelOrder,(撤单用)。
_CreateManualNewAccept创建一个ManualNewAccept,(无参数时表示创建一个空容器,有参数时表示创建一个用于补委托的内部修正命令)。
_CreateManualNewReject创建一个ManualNewAccept,(撤消委托用)
_CreateManualExecuti
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 策略 编程 语言 用户 手册