




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图标 DTS2 0 策略编程语言 用户编程手册 Author DTS 研发部门 Version 2 08 Revision History DateVersionDescriptionAuthorApprover 2008 11 19 2 00Initial version Aaron Peng 2011 3 162 0 1增加 3 3 3 3 5 内部修正命令 3 5 2 2 注册要收听的价格 3 5 2 5 查找价格 更新 3 5 4 2 OnEventOrderResponse 回 调 Jack shiPeter cao 2011 4 22 0 2更新 3 5 3 3 OnEventPosition 回调Jack shiPeter cao 2011 5 272 0 3更新 2 1 3 的 3 API 接口关键字 2 3 1 1 nil 类型和逻辑判断 针对于指针变量作了说明 增加 3 3 3 2 3 DTSMicroTime 3 3 3 3 4 发送 Order 下单 撤单 命令 增加了单 个 Order 下单的说明 更新 3 3 3 3 5 内部修正命令 更新 3 5 2 5 查找价格 更新 3 5 4 2 OnEventOrderResponse 回调 更新 3 5 5 1 DTSMessageRecordAccess 类型 3 6 系统工具函数 增加 3 6 5 3 6 10 部分 xuebin liPeter cao 2011 6 202 0 4增加批量撤单接口 3 3 3 3 3 3 3 3 3 6Yousong ZhangPeter cao 2011 6 302 0 5增加 matlab 的接口说明 3 7 增加简单加密的说明 3 6 9 3 6 10 Jack shiPeter cao 2011 8 102 0 6增加市场逐笔行情信息 3 5 3 6 1 修改 ClosePriceInputFlag 的说明 增加 DTSQUEUEPRICE FIELD 一览 6 2 Lin gongJack shi 2011 9 152 0 7增加 2 3 1 2 sys find 的说明 更新 3 7 的 matlab 图只显示半个 6 1 增加 ETFIOPV 说明 修改 VWAPEVEPrice 说明 更新 6 3 DTSNewOrderAccess field 一览 更新 6 4 DTSCancelOrderAccess field 一览 xiang shuJack shi 2011 9 192 0 8增加 PriceCondition 的说明Jack shi 目录目录 REVISIONREVISION HISTORYHISTORY IIII 1 1 DTSDTS 策略编程语言简介策略编程语言简介 1 1 1 11 1DTSDTS 策略编程平台及其原理策略编程平台及其原理 1 1 1 21 2策略在系统平台上的生命周期和运行过程策略在系统平台上的生命周期和运行过程 2 2 1 2 1策略生命周期 2 1 2 2系统通讯和 EVENT 3 1 2 2 1事件定义 3 1 2 2 2输入输出事件 3 1 2 2 3Buffer flag 3 1 2 2 4事件回调 3 1 2 3策略参数和参数变化回调 4 1 2 4运行策略 4 2 2 DTSDTS SCRIPTSCRIPT 编程基础编程基础 7 7 2 12 1DTSDTS S SCRIPTCRIPT基本语法格式基本语法格式 7 7 2 1 1语言字符要求 7 2 1 2程序注释 7 2 1 3关键字 8 2 1 4特殊字符的表示 11 2 22 2变量及变量的作用域变量及变量的作用域 1111 2 2 1全局变量及其作用域 11 2 2 2局部变量 LOCAL 及其作用域 12 2 2 3同名的全局变量和局部变量的作用原则 12 2 32 3类型类型 1212 2 3 1变量内部的类型 12 2 3 1 1nil 类型和逻辑判断 12 2 3 1 2string 类型及针对 string 的操作 12 2 3 1 3数值类型及内建的数值计算函数 14 2 3 1 4table 类型 15 2 3 2支持的各类型间的自动转换 15 2 3 3显式转换类型 15 2 3 4类型转换时的注意事项 16 2 3 5SYS FORMAT函数 16 2 42 4函数函数 1818 2 4 1函数定义 18 2 4 2函数调用 19 2 4 3对函数的限制 19 2 4 4PCALL 函数调用 19 2 52 5运算符运算符 2020 2 5 1逻辑运算符 20 2 5 2算术运算符 20 2 5 3字符串连接运算 20 2 5 4赋值运算符 20 2 5 5比较运算符 21 2 5 6元运算符 21 2 5 7运算符优先级 21 2 62 6程序控制流程程序控制流程 2121 2 6 1顺序结构 21 2 6 2IF条件语句 21 2 6 3DO 块 22 2 6 4WHILE循环语句 22 2 6 5REPEAT循环语句 22 2 6 6一般FOR循环语句 22 2 6 7用于遍历表的FOR循环语句 GENERIC FOR 23 2 6 8RETURN和BREAK语句 23 2 72 7基本容器基本容器TABLETABLE 2424 2 7 1TABLE的基本概念 24 2 7 2创建和初始化一个TABLE 24 2 7 3TABLE下标的使用 24 2 7 4TABLE的 运算符 25 2 7 5顺序存储元素和按KEY索引元素 25 2 7 6TABLE的INSERT操作 25 2 7 7TABLE的长度 25 2 7 8TABLE的遍历 26 2 7 8 1全遍历 pairs 26 2 7 8 2自然数序遍历 ipairs 26 2 7 9TABLE的SORT算法 仅对自然数序TABLE有效 26 2 82 8参考参考 L LUAUA的基本语法的基本语法 2727 2 8 1参考部分 LUA的语法和 LUA的参考资料 27 2 8 2与 LUA的重要不同 27 3 3 DTSDTS APIAPI 2727 3 13 1DTSDTS APIAPI 简介简介 2727 3 23 2事件处理事件处理 2727 3 2 1详细的事件定义和事件属性设置 27 3 2 2事件注册 CLIENT 28 3 2 3事件回调详解 29 3 2 4策略参数事件及其回调 29 3 2 5事件内容设置和发送事件 30 3 2 6事件存盘和读取保存事件 DYNAMICDATA 30 3 33 3DTSDTS APIAPI 变量类型变量类型 3131 3 3 1用户定义的事件类型 31 3 3 2策略参数类型 DTSPARAMETER 32 3 3 3DTS 系统类型 32 3 3 3 1用于和一般 Script 逻辑交换信息的内部类型 32 3 3 3 2时间类型 32 3 3 3 2 1DTSDate 32 3 3 3 2 2DTSTime 32 3 3 3 2 3DTSMicroTime 33 3 3 3 3用于下单和撤单的类型 33 3 3 3 3 1DTSNewOrderAccess 33 3 3 3 3 2DTSCancelOrderAccess 33 3 3 3 3 3DTSBasket 容器 33 3 3 3 3 4发送 Order 下单 撤单 命令 34 3 3 3 3 5内部修正命令 35 3 3 3 3 6批量撤单接口 39 3 3 4其他系统类型 39 3 43 4存取数据库信息 存取数据库信息 S STATICTATICD DATAATA 3939 3 4 1从数据库取数据 GETCOMMONDATA 40 3 4 2更新数据 UPDATECOMMONDATA 40 3 53 5固化系统回调事件固化系统回调事件 4141 3 5 1TIMER 41 3 5 1 1启动 停止一个 Timer 41 3 5 1 2 OnEventTimer 回调 41 3 5 2收听市场价格 41 3 5 2 1DTSPrice 类型 41 3 5 2 2注册要收听的 Price 41 3 5 2 3 OnEventPrice 回调 42 3 5 2 4停止收听价格 42 3 5 2 5查找价格 42 3 5 3收听市场逐笔行情价格 43 3 5 3 1DTSQueuePrice 类型 43 3 5 3 2注册要收听的 Price 46 3 5 3 3 OnEventQueuePrice 回调 46 3 5 3 4停止收听分笔行情价格 46 3 5 3 5查找分笔行情价格 47 3 5 4监视仓位变化 47 3 5 4 1DTSPosition 类型 47 3 5 4 2注册要监听的 Position 47 3 5 4 3 OnEventPosition 回调 48 3 5 4 4停止收听 Position 48 3 5 5监听下单回复 48 3 5 5 1DTSExecution 类型 48 3 5 5 2 OnEventOrderResponse 回调 49 3 5 6监听成交信息 50 3 5 6 1DTSMessageRecordAccess 类型 50 3 5 6 2选择需要监听的成交信息 50 3 5 6 3 OnEventExecution 回调 50 3 63 6系统工具函数系统工具函数 5151 3 6 1取得策略信息 51 3 6 2取得运行信息 51 3 6 3取得用户信息 51 3 6 4取得环境信息 51 3 6 5取得错误详细描述 51 3 6 6取得下单状态 51 3 6 7取得第一条交易流水信息 51 3 6 8生成全局唯一序列号 51 3 6 9字符串加密 51 3 6 10字符串解密 51 3 6 11停止服务 52 3 6 12写LOG的函数 52 3 73 7MATLABMATLAB 支持支持 5252 3 7 1启动 MATLAB ENGINE 52 3 7 2判断 MATLAB ENGINE是否启动 52 3 7 3设置 MATLAB 变量 53 3 7 4获取 MATLAB 变量 53 3 83 8一个完整的例子一个完整的例子 5353 4 4 完整的语法规则完整的语法规则 5555 5 5 LUAEDITORLUAEDITOR 5555 5 15 1DTSDTS L LUAUA E EDITORDITOR简介简介 5555 5 25 2L LUAUAE EDITORDITOR功能介绍功能介绍 5757 5 2 1增加一个新策略 57 5 2 2语法检查 59 5 2 3提交 59 5 2 4发布 60 5 2 5策略管理 61 5 35 3L LUAUAE EDITORDITOR使用技巧使用技巧 6262 5 3 1LUAEDITOR对 DTSSCRIPT语法关键字和符号能自己编辑颜色 62 5 3 2语法错误的提示 62 6 6 附录附录 6363 6 16 1DTSPDTSPRICERICE FIELDFIELD一览一览 6363 6 26 2DTSQDTSQUEUEUEUEP PRICERICE FIELDFIELD一览一览 6565 6 36 3DTSNDTSNEWEWO ORDERRDERA ACCESSCCESS FIELDFIELD 一览一览 6565 6 46 4DTSCDTSCANCELANCELO ORDERRDERA ACCESSCCESS FIELDFIELD 一览一览 6767 6 56 5参考资料参考资料 6868 1 DTS 策略编程语言简介策略编程语言简介 DTS 系统策略编程语言是针对 DTS 程式化套利系统编写套利策略的策略编程语言 提供灵 活的 具有一般性的编程语言接口 可以为 DTS 系统编写高效的策略服务程序 DTS 策略编程语言综合了 Lua 和基于 C 的 DTS 系统 API 接口 最终将脚本翻译成 C 服务器程序编译执行 具有灵活高效的特点 DTS 策略编程语言由基本 DTSScript 和 DTS 系统 API 两部分组成 DTSScript 提供了基 本用户编程逻辑的编写接口 DTSAPI 提供了 Server 编程框架和用户策略逻辑对 DTS 后台系统 数据的访问和使用接口 本手册讨论这种语言的基本组成 语法特点和具体使用方法 同时介绍 DTS 客户端系统附带 的 LuaEditor 的基本功能和使用技巧 1 1 DTS 策略编程平台及其原理策略编程平台及其原理 DTS 策略编程平台主要由 DTSClient 下带的 DTS Script Editor Lua Editor 为客户端 配合 Strategy Control Server SCS 为服务器端组成 用户编写的策略通过 Client 端 自带的 Event 打包解包库 EventCommunicator 打包成事件 Event 发送给 SCS 由 SCS 内的 Script Translator L2C 翻译成 C 源代码后由 GNU 编译成策略服务器程序 SS 启动时 由客户端发送启动 Event 给 SCS 控制启动 SS 并告知客户端 SS 端口及 ip 地址 由客户端直 接 Socket 链接 SS 获取策略服务 停止时 也由客户端发送停止 Event 给 SCS 控制结束 SS 服 务 由于 SS 是直接编译运行的 所以拥有效率高的特点 同时每个客户有自己的策略服务器 故每个服务器程序负载不会很重 所以又有稳定 快速的优点 1 2 策略在系统平台上的生命周期和运行过程策略在系统平台上的生命周期和运行过程 1 2 1策略生命周期 要完整地编写一个能用的策略服务器 需要以下几个步骤 1 在 Script Editor 中编写完整的策略脚本 2 语法检查通过 3 提交 SVN 通过 SCS 成功 4 发布成功 编译成功 当策略被发布成功后 用户可以在自己的策略管理界面上看到相应的策略 用户可以选择加载需 要的策略版本 并且运行此策略 策略一旦运行 就开始提供既定的服务直到用户停止此策略 策略的生命周期 1 2 2系统通讯和Event DTS 系统内部各个组成部件间的通讯都是建立在事件 Event 处理上的 SCS Client 及 SS 之间信息的互换都是通过 Event 来完成的 所有的 Event 都是统一格式存放的 由包含在 Client 和 Server 端程序中的 EventCommunicatorLib 进行编码 解码 我们可以把 Event 看作是可以自定义字段的 Message 1 2 2 1 事件定义 所有用户事件都是可以在脚本中定义的 以下例程定义了一个最简单的事件 DefineEventObject DefineEventObject TestEvent AS AS Output Output DefFld DefFld TestField String 12 End End 这个 Event 被定义为包含一个名叫 TestField 的字段 字段类型为 String 类型 长度为 12 事件定义和处理被做为一种 DTSAPI 的特性将在第 3 章 节中详细介绍 1 2 2 2 输入输出事件 做为策略编程语言 DTSScript 写好的脚本最终会被编译成策略服务器程序 SS 相对 SS 来说是输入的 Event 被认为是输入事件 例如 Client 向 SS 传送的参数可以被认为是一个 In 事 件 相反的 SS 发送出去的事件被认为是 Out 事件 如上面的例程就是定义了一个 Out 事件 填写完整这个 TestEvent 后 SS 可以创建一个 Out 事件的实例并且通过 API 将这个实例发送 给所有监听这个事件的客户端 可能是 DTSClient 端或者另外一个 SS 1 2 2 3 Buffer flag 由于系统中所有的通讯都被认为是事件处理 也就是说所有的 Server Client 和 Server 之 间都是基于一方发送 Out 事件 一方接收事件并触发回调来达到交换信息的目的 这样 为了可 以使不同时间连接上来的客户端可以收到完整的 Event 流 Event 被设计成带有一个 Buffer 标 志 Buffer Flag 一共有 3 种值 0 代表没有 Buffer 即后来连接上来的 Client 不会接收到连 接上来之前 Server 已经发送过的 Event 1 代表 list 类型的 Buffer 即后来连接上来的 Client 能够收到符合条件的自 Server 启动以来发送过的所有这种类型的 Event 并且是按事件顺序排 列的 2 代表 map 类型的 Event 即后来连接上来的 Client 能够收到所有以某个字段为 Key 的 Server 已经发送过的 Event 重复 Key 的 Event 只保留最新的一个 有了这 2 种 buffer 像诸如 HDS Historical Data Sever 这种需要保留历史数据的服务器 也可以用策略来描述了 1 2 2 4 事件回调 对于接收别的 Server 或 Client 发送的事件一方的 Server 或 Client 只需要知道接收的是来 自哪里的什么 Event 就可以了 RegisterEventObject RegisterEventObject PortfolioID P2007091319484800001 StrageyID 2007091319484800001 EventID TbtPEvent condition IssueCode issueCode 1 issueCode2 issueCode3 使用 RegisterEventObject 命令可以注册与什么策略服务器连接 并取得什么 Event 当连接建立后 每当那个策略服务器向外发送既定的 Event 接收方就会收到一条 Event 的 回调 OnEventDefined OnEventDefined TbtPEvent evt 用户逻辑 End End 收到 Event 回调后 接收方就通过 OnEventDefined OnEventDefined 接口回调函数执行既定的用户逻辑 1 2 3策略参数和参数变化回调 在 DTS2 0 系统中 所有的系统间交互都是通过 Event 完成的 所以策略服务器的输入参数 实际上也是一种特殊的 Event 输入参数 Event 做为一种特殊 Event 被设计为是同时拥有 Input 和 OutPut 属性的 Event 做为 Input Event 客户端向 SS 发送参数值 其 Buffer Flag 为 0 SS 只需要最新的 参数 而做为 Output Event SS 返回给客户端的 Ack 其 Buffer Flag 为 2 Key 是一个永 远为 1 的值 这样可以保留最新一个 Ack 也能被 Client 收到 防止 Client 重启后参数不同步的 情况 所有定义的参数都会在策略服务器中对应一个同名同类型的全局变量 脚本中可以直接使用这 些参数 同时当参数值变化时 Client 端发送来的参数变化也会被同步到这些全局变量中 可以通过 DefineStrategyParameters DefineStrategyParameters 关键字定义一组策略 Server 的参数 并通过 OnEventParameterChanged OnEventParameterChanged DTSParameter parameter 回调来处理从客户端发送过来的参 数变化 DefineStrategyParameters DefineStrategyParameters String String issueCode1 String String issueCode2 String String issueCode3 Number Number factor1 Number Number factor2 Number Number factor3 Number Number constant String String periodType String String periodCount End End OnEventParameterChanged OnEventParameterChanged DTSParameter parameter 用户处理逻辑 End End 1 2 4运行策略 当策略被发布好以后 DTSClient 中的策略管理页面也就有了相应的策略列表 在需要启动此策略的模型中添加此策略 启动策略 停止策略 2 DTS Script 编程基础编程基础 2 1 DTS Script 基本语法格式基本语法格式 2 1 1语言字符要求 DTS Script 中的名字 变量名 函数名 Table 的字段名等标识符 可以由任意字母 数字和下 划线组成 但是不能以数字开头 由于 DTS API 将在第 3 章详细介绍 关键字以 开头 所 以应尽量避免使用 做为名称的起始符号 以避免和系统关键字相互冲突 DTS Script 是严格区分大小写的 比如 Text 和 text 是不同的变量名 可以用来代表不同的 2 个变量 DTS Script 中的字符串可以是以一对单引号 引起或者一对双引号 引起的一串字符 内 容里可以支持任意字符 包括中文 系统传输和翻译中不会改变字符的编码方式 但是为了终 端显示和避免编码解码方式不同带来的麻烦 建议统一使用 utf 8 编码方式 注意不要使用带 signal 的 UTF 8 编码 头标记会被认为是非法字符 对于 开头的函数 一般认为是系统保留的函数名 建议尽量避免使用 对于 DTS 开头的词 一般认为是系统 API 数据类型 请不要使用其命名一般变量和函数等 名字 函数调用和关键字 算符等之间以空白分隔 空白可以是任意的空白 不限数量和种类 包括 空格 TAB t 分割符 f 和分行 回车 r n r n DTS Script 各个段 声明 结构 语句等 间可以以分号 分隔 也可以以上述的空白分隔 但是有一种情况必须用分号分隔 locallocal a 1 b b 2 String String str b 3 由于 DTS API 允许定义带类型限定 如上例第 3 行 限定 str 为 String 类型 的变量 而某 些自定义类型名也可能使用名字 Identifier 所以对上例中 1 2 行中的 a 和 b 中的 a Script 翻译器不能确定其是 b 的类型限定名还是一个变量定义 所以这种情况下 a b 间必须加一个分 号分隔 2 个语句 locallocal a 1 b b 2 String String str b 3 DTS Script 支持各种数字表述方式 包括整数 负数 小数 带小数点 16 进制数 0 x 和科学计数法表示的数值 3 3 0 3 1416 314 16e 2 0 31416E1 0 xff 0 x56 2 1 2程序注释 DTS Script 采用 Lua 的程序注释形式 分为行注释和块注释 2 种 DTS Script 使用 来表示行注释 例如 a alo n123 Assign alo n123 to a DTS Script 采用 对来表示块注释 例如 DTS Script Comment CopyRight DragonSoft 2 1 3关键字 DTS Script 关键字分为一般关键字 运算符和系统 API 关键字 3 部分 关键字不能当作名字 标识符 使用 拥有系统给定的含义 DTS Script 一般关键字有 关键字含义关键字含义关键字含义关键字含义 and 逻辑与 break 跳出循环 do 块开始 else 非条件 end 块结束 false 布尔假 for For 循环 function 函数声明 in Table inlocal 本地声明 nil 空 not 逻辑否 repeatRepeatreturn 返回 thenThentrue 真 while While elseif else if if 条件语句 or 逻辑或 until Repeat 注意 1 nil 表示 DTS Script 的空 与 NULL 意义相近但不是 NULL 2 elseif 为连写的 else if 和其他语言不同 不能写成分开的 else if DTS Script 运算符和关键符号 关键符号含义关键符号含义关键符号含义 HUGE VAL最大数 加号 减号 乘号 除号 取余 乘方 赋值 等于 不等于 大于等于 大于 和 其中值得注意的是 和 注意等于是 2 个 号 以示区别于赋值 而不等于是 与其 他语言也有些不同 2 5 6元运算符 元运算符只有 2 个 负号 和逻辑运算符 not 2 5 7运算符优先级 DTS Script 和大部分语言的运算符优先级都相同 最优先的是 table 中的点 运算 就是取字段 操作和 table 的 也是取字段操作 这 2 种将在 table 中介绍 剩下的真正的运算符优先级如下 从上至下优先级依次递减 not 优先于 优先于 优先于 优先于 优先于 and or 2 6 程序控制流程程序控制流程 2 6 1顺序结构 DTS Script 的程序块中遵循顺序执行原则 即写在上面的语句比写在下面的语句先执行 2 6 2 If条件语句 条件语句 if if exp1 thenthen block1 elseifelseif exp2 thenthen block2 elseifelseif exp3 thenthen block3 elseelse block els endend 含义为 如果满足 exp1 即表达式 exp1 为真或非 nil 则执行 block1 块中的语句 如果不满足 exp1 而 满足 exp2 则执行 block2 中的语句 elseif 可以写多个 如果全不满足 则执行 block els 中 的语句 2 6 3 do 块 do 语句 dodo block endend 执行 block 中的语句 作用相当于 C 语言中的 2 6 4 while循环语句 while 语句 whilewhile exp dodo block endend 只要 exp 满足 就执行 block 中的语句 直到 exp 不满足为止 2 6 5 repeat循环语句 repeat 语句 repeatrepeat block untiluntil exp 执行 block 中的语句 直到 exp 满足为止 注意 这里不管 exp 满足还是不满足 一开始 block 中的语句都会被执行一遍 2 6 6一般for循环语句 for 语句 forfor ident exp1 exp2 exp3 dodo block endend exp3 表示 exp3 可有可无 先看一个有 exp3 的例子 forfor i 1 1 i 5 i 1 dodo x x 1 endend 表示创建一个 local 变量 i 赋值为 2 1 1 当 i5 这样 上例中如果 x 初值为 0 那么最终 x 将变成 3 这样 for 语句中 ident 为循环控制变量 exp1 是对 ident 赋的初值 exp2 是循环条件 exp3 是步进值 也就是 ident 在一次循环后的增量 如果要使 ident 递减 只要把 exp3 设成负值就可以了 exp3 也可以不设 forfor i 1 1 i 5 dodo x x 1 i i 1 endend 如果这样 那么必须在循环体 block 中用语句显式地给循环控制变量 i 赋值 否则 循环将一直进 行下去而成为死循环 从这里也可以看出 循环控制变量 i 的作用域是 for 循环的循环体中 2 6 7用于遍历表的for循环语句 generic for DTS Script 支持的 Generic for 语句目前有 2 种 forfor ident key ident value inin pairs table dodo block endend 和 forfor ident key ident value inin ipairs table dodo block endend 这 2 种 Generic for 语句分别对应表的全遍历和自然数下标遍历 将在后一节做详细介绍 2 6 8 return和break语句 returnreturn 用于函数定义中 后跟一个变量或常量表示返回值 也可以不跟变量或常量 这时 函数 使用默认返回值 nilnil 返回 目前不支持 returnreturn 用于 DTS API 的回调函数中 也不支持多返回值函数 breakbreak 用于一般循环体中 以中断最近的一层循环 例如 forfor i 1 i 5 1 dodo a 0 whilewhile a 3 dodo if if a 1 thenthen breakbreak endend a a a i endend endend 这里如果满足 a triggerPrice thenthen locallocal DTSEvent oevt CreateEventObject CreateEventObject ReportEvent oevt SetFld SetFld IssueCode issueCode oevt SetFld SetFld MarketCode marketCode local tdp t close oevt SetFld SetFld TradePrice tdp local qty sys format d quantity oevt SetFld SetFld TradeVolume qty SendToClients SendToClients oevt endend endend 这里最后用 SendToClients SendToClients 接口将事件发送给监听者 客户端 只要注册监听了这个事件的监 听者都能收到本事件 3 2 6事件存盘和读取保存事件 DynamicData 对于一个事件 还可以和一个动态数据绑定 由动态数据完成对这个事件的存盘 读取等操作 达到数据存储的目的 用 CreateDynamicData CreateDynamicData String TSInstanceName int fileType EventObject object 来建立一 个动态数据的实例 这里第一个参数是保存的文件名 第二个参数是文件类型 第 3 个是需要绑 定的事件 要创建动态数据 首先要有一个需要绑定的事件的实例 locallocal DTSEvent tempevt CreateEventObject CreateEventObject ReportEvent DTSDynamicData reportStore CreateDynamicData CreateDynamicData Rpt DataOtherType DataOtherType ReportEvent tempevt 相应的 动态数据也有 4 种索引类型 DataYearType DataYearType按年索引 DataMonthType DataMonthType按月索引 DataDayType DataDayType按日索引 DataOtherType DataOtherType其他 不索引 这里的索引是指文件存储格式中每行数据的 key 不需要和 EventType 对应 可以用 GetFileType GetFileType 接口函数查看文件类型 在创建了事件绑定的动态数据实例后 可以利用它读取或保存对应事件 GetDynamicData GetDynamicData String dataName String condition OnDynamicData OnDynamicData String dataName EventObject object 这组接口用来读取文件中保存的事件 这是一组同步回调 也就是说在 OnDynamicData OnDynamicData 回调结 束之前 GetDynamicData GetDynamicData 函数会被阻塞在那里 程序不会向下执行 在策略执行起来后 可能需要先 load 原先保存的数据 那么就可以使用这个接口了 reportStore GetDynamicData GetDynamicData report condition OnDynamicData OnDynamicData report ReportEvent evt local issue evt GetFld GetFld IssueCode local mkt evt GetFld GetFld MakretCode local tp evt GetFld GetFld TradePrice local qty evt GetFld GetFld TradeVolume local lg sys format s s t s t s n issue mkt tp qty WriteAplLog WriteAplLog lg End End 这样完成了一个将数据读出写 log 的动作 实际上第一个参数 report 的作用是将这 2 个动作绑定 dataName 起到了回调注册的作用 要是 这个参数写的不同 那么读取到的数据将不会通过不同 dataName 的 OnDynamicData OnDynamicData 回调 同 样 condition 参数规定了初步过滤条件 和 RegisterEventObject RegisterEventObject 的 condition 条件一样 同样 可能希望在发送事件前先保存事件 可以使用 SaveData SaveData String dataName EventObject object 接口 我们来改写 onkline 函数 使它能保存数据 functionfunction onkline t if if t close triggerPrice thenthen locallocal DTSEvent oevt CreateEventObject CreateEventObject ReportEvent oevt SetFld SetFld IssueCode issueCode oevt SetFld SetFld MarketCode marketCode local tdp t close oevt SetFld SetFld TradePrice tdp local qty sys format d quantity oevt SetFld SetFld TradeVolume qty reportStore SaveData SaveData report oevt SendToClients SendToClients oevt endend endend 当不需要保存的数据时 可以用 reportStore Clear Clear report 来删除文件 3 3 DTS API 变量类型变量类型 API 不同于 DTS Script 脚本基本语言部分 它是一个强类型的体系 使用它提供的接口功能时 必须明确类型 正因为如此 弱类型的 DTS Script 脚本语言规定 使用 API 函数时 函数的参 数部分只提供简单的变量或直接的常量参数形式 不支持表达式 API 的变量类型分为事件类型 基本类型 复杂结构类型 3 种 其中事件类型 DTSEvent 已经 在上面介绍过了 基本类型可以和 Script 一般类型变量相互转换 而复杂结构类型要么是回调回 来的数据结构 要么有专门的创建方法 下面主要就复杂结构类型进行详细的讨论 3 3 1用户定义的事件类型 上面介绍了事件 用户可以定义事件 事实上用户定义完事件后就是定义了一个以 EventID 命名 的事件类型 所有事件都是建立在基本事件类型 DTSEvent 基础上的 只是字段不同而已 所以定义和注册事 件的时候需要说明事件类型 而使用事件的时候 基本上都是 DTSEvent 类型声明 3 3 2策略参数类型 DTSParameter 策略参数是一个特殊的事件 有自己的固定类型 DTSParameter 实际上这也只是个 EventID 而已 实际使用的时候还是要把它当作 DTSEvent 来使用 3 3 3 DTS系统类型 3 3 3 1 用于和一般 Script 逻辑交换信息的内部类型 DTS API 的强类型特征使得它很难在 DTS Script 中被使用 为此 API 定义了一组可以和 Script 一般类型互相交互的简单类型 Boolean String Double Decimal Int BigInteger 其主要作用就是在对 API 复杂类型结构内的字段设值 除了事件外 其他 API 复 杂类型的字段赋值都有自己的赋值函数 赋值函数都对自己的参数规定了类型 不能使用 Script 一般类型 与一般类型交互过程在第 2 章已经详述 这里不再赘述 3 3 3 2 时间类型 DTS 系统支持 2 种时间类型 3 3 3 2 1 DTSDate 可以使用 GetNowDate GetNowDate 取得当前日期 返回值是个 DTSDate 类型 locallocal DTSDate date GetNowDate GetNowDate 也可以直接用以 YYYYMMDD 或 YYMMDD 为格式的字符串得到特定的日期 locallocal DTSDate date 20081127 DTSDate 类型支持很多方法 其中比较有用的是 locallocal year date year 获取年 注意 这里的年是一个 4 位 YYYY 整数 locallocal month date month 获取月 注意 这里的月是整数类型的数字 locallocal day date day 获取日期 注意 这里日期是当月中的日 整数类型 locallocal strDate date asString String format 按照 format 格式返回表示日期的字符 串 注意不接受 DTS Script 一般类型 必须先转成 String 类型输入 format DTSDate 类型还有一些日期相关用法 这里暂且省略 3 3 3 2 2 DTSTime 可以使用 GetNowTime GetNowTime 取得当前系统时间 精确到秒 返回值是个 DTSTime 类型 local DTSTime time GetNowTime 也可以直接以 hhmm 或 hhmmss 或 YYMMDDhhmmss 或 YYYYMMDDhhmmss 的格式的字符串直接得到指定时间 local DTSTime time 091500 同样 DTSTime 也有 year month day hour minute second asString 函数 locallocal year time year 获取年 注意 这里的年是一个 4 位 YYYY 整数 locallocal month time month 获取月 注意 这里的月是整数类型的数字 locallocal day time day 获取日期 注意 这里日期是当月中的日 整数类型 locallocal hour time hour 获取小时 整数类型 locallocal minute time minute 获取分钟 整数类型 locallocal second time second 获取秒 整数类型 locallocal strTime time asString String format 按照 format 格式返回表示时间的字 符串 注意不接受 DTS Script 一般类型 必须先转成 String 类型输入 format 3 3 3 2 3 DTSMicroTime 可以使用 GetNowMicroTime GetNowMicroTime 取得当前系统时间 精确到微妙 返回值是个 DTSMicroTime 类型 local DTSMicroTime time GetNowMicroTime 也可以直接以 hhmmssqqq 或 hhmmss qqq 或 hhmmss qqqqqq 或 hh mm ss qqq 或 hh mm ss qqqqqq 的格式的字符串直接得到指定时间 local DTSMicroTime time 091500000 同样 DTSMicroTime 也有 year month day hour minute second msecond usecond asString 函数 locallocal year time year 获取年 注意 这里的年是一个 4 位 YYYY 整数 locallocal month time month 获取月 注意 这里的月是整数类型的数字 locallocal day time day 获取日期 注意 这里日期是当月中的日 整数类型 locallocal hour time hour 获取小时 整数类型 locallocal minute time minute 获取分钟 整数类型 locallocal second time second 获取秒 整数类型 locallocal msecond time msecond 获取毫秒 整数类型 locallocal usecond time usecond 获取微秒 整数类型 locallocal strTime time asString Int length 按照 length 所规定的长度返回表示时间 的字符串 length 的值和字符串格式的对应关系如下 9 表示 hhmmssqqq 10 表示 hhmmss qqq 13 表示 hhmmss qqqqqq 15 表示 hh mm ss qqqqqq 其他值表示 hh mm ss qqq locallocal strTime time asString String format 按照 format 格式返回表示时间的字 符串 注意不接受 DTS Script 一般类型 必须先转成 String 类型输入 format 3 3 3 3 用于下单和撤单的类型 DTS API 提供了 2 种 Order 分别用于下单和撤单 3 3 3 3 1 DTSNewOrderAccess DTSNewOrderAccess 是用来下单的 API 类型 DTSNewOrderAccess 可以用 CreateNewOrder CreateNewOrder 来创建 创建出来的 Order 中 一部分必要的 下单字段都已经事先初始化完毕 不需要特意去填写
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45861-2025重载齿轮箱加速疲劳试验技术规范
- 骨性关节炎课件
- 市场推广活动总结5篇
- 吉林省长春市力旺中学2024-2025学年九年级上学期期末数学考试(含答案)
- 2025年湖北省武汉市七一华源中学九年级下学期中考模拟数学试卷(含部分答案)
- 汉字大小课件
- 快递物流行业前瞻分析
- 高科技产业发展趋势预测
- 新能源行业全球市场分析
- “人人爱上H5”-数字广告设计知到智慧树答案
- 2025年郑州银行招聘考试(行政能力测验)历年参考题库含答案详解(5套)
- 园艺生物技术应用与发展
- 子痫患者护理查房
- 2025上海市八年级升九年级数学暑假提升讲义:相似三角形压轴题(六大题型)原卷版
- 2025年工业互联网工程技术人员考核试题题库及答案
- 农行OCRM系统讲解
- 医疗护理员职业技能竞赛试题及答案
- 2025年高端美食主题餐厅餐饮服务整体外包合同
- 体育课培训课件
- 网约车停运损失赔偿协议书范文
- 药物化学(全套课件)
评论
0/150
提交评论