b编程基础知识必备.ppt

上传人:san****019 文档编号:7322866 上传时间:2020-03-19 格式:PPT 页数:75 大小:1.15MB
返回 下载 相关 举报
b编程基础知识必备.ppt_第1页
第1页 / 共75页
b编程基础知识必备.ppt_第2页
第2页 / 共75页
b编程基础知识必备.ppt_第3页
第3页 / 共75页
点击查看更多>>
资源描述
华泰长城期货有限公司HuataiGreatWallFuturesCo Ltd QQ 909118951 交易开拓者 TB 编程基础 公式篇 基本框架 什么是TradeBlazer公式 1 TradeBlazer公式是一种专为分析金融数据 时间序列而设计的高级语言 它提供直接 强大的框架将交易思想转化为用户函数 技术分析 交易指令等计算机能够识别的代码 2 TradeBlazer公式是一门语法简单但是功能强大的语言 利用它能创建自己的交易和技术分析工具 通过组合普通的交易指令和简单的语句 TradeBlazer公式能够很容易并且直接的用简单语句表达自己的交易规则和行为 3 交易开拓者能够读取TradeBlazer公式 在历史价格数据基础上进行评估 并能自动执行特定的交易动作 将交易思想转化为实际的交易操作 概述 TradeBlazer公式能做什么 通过TradeBlazer公式 能够创建自己的交易指令 技术指标 K线型态 特征走势 用户函数 TradeBlazer公式包含的公式类型如下 用户函数 用户函数是能够通过函数名称进行引用的指令集 它执行一系列操作并返回一个值 您可以在其他任何公式中使用用户函数进行计算 技术指标 技术指标是基于基础数据 通过一系列的数学运算 在每个Bar返回相应的结果值的一类公式 这些值在图表模块中输出为线条 柱状图 点等表现形式 K线型态 K线型态是类似于技术指标的一类公式 它主要着重于反映一段K线的特定型态 并通过不同的技术指标的方式输出到图表 特征走势 特征走势是类似于技术指标的一类公式 它主要着重于反映整个价格曲线的趋势 变化特征 并通过特定的表达方式输出到图表 交易指令 交易指令是包含买 卖 平仓 头寸 仓位控制的并执行交易指令的一类公式 它主要帮助您将您的交易思想转化为计算机的操作 通过调用TradeBlazer公式 您可以在交易开拓者中进行技术分析 交易策略优化测试 公式报警 自动交易等操作 概述 数据类型 Bar数据 是指商品在不同周期下形成的序列数据 在单独的每个Bar上面包含开盘价 收盘价 最高价 最低价 成交量及时间 期货等品种还有持仓量等数据 叠加数据 交易开拓者的超级图表支持商品叠加的显示 当叠加的图表调用各项公式时 可能有需要使用叠加的商品对应的基础数据 针对这样的需求 TradeBlazer公式提供了叠加数据的支持 行情数据 TradeBlazer公式还可以支持实时行情数据的调用 行情数据是指当前商品最新的报价数据 该数据和Bar无关 行情数据的回溯没有意义 属性数据 除了以上的各项数据之外 TradeBlazer公式还提供一组重要的属性数据 反映了该商品的一些基本信息 比如当前数据周期 买卖盘个数 保证金设置等信息 在所有的Bar上面获取的市场属性数据都是一样的 属性数据的回溯没有意义 数据 Bar数据 所有的Bar按照不同周期组合 并按照时间从先到后进行排列 由此形成为序列数据 整个序列称之为Bar数据 以下列出所有的Bar数据系统函数 计算方法 TradeBlazer公式在计算时按照Bar数据的Bar数目 从第一个Bar到最后一个Bar 依次进行计算 如果公式中出现了调用Bar数据函数的 则取出当前Bar的相应值 进行运算 如下图箭头所示 公式执行从上至下 Bar从左到右执行 在公式的编写中 经常会遇到当前Bar的数据和上一个Bar 上N个Bar数据进行比较 计算的情况 针对这种情况 TradeBlazer公式提供了一种处理机制 回溯 即对数据的向前引用 比如 获取上一个Bar的收盘价 Close 1 获取10天前的成交量 Vol 10 以下提供一个简单的例子来说明如何进行回溯处理 假定有如下语句 If Close Close 1 Buy 1 Close 以上公式执行一个简单的操作 当前Bar的收盘价大于上一个Bar的收盘价 即执行按照当前收盘价买入1手的动作 根据上表的数据 公式将在CurrentBar为2和3的时候调用Buy指令 如果您足够仔细的话 您会发现 对于上面的一段公式的执行 有一个小小的问题 当第一次计算公式时 即CurrentBar 0时 这个时候需要获取上一个Bar的数据 但是当前Bar已经是第一个Bar 这个时候就存在着问题 如何来获取此时的Close 1 呢 TradeBlazer公式将默认Close 1 为无效值 即系统函数中的InvalidNumeric Close Close 1 的表达式计算结果是一个Bool值 其结果也是一个无效值 对于Bool值 我们将False作为其无效值 因此 第一个Bar计算时 Buy指令不会被执行 对于技术分析这类公式来说 假定Bar数据的总数共有100 相同的代码将从CurrentBar 0到CurrentBar 99共执行100遍 分别输出公式中的结果值 注意 在执行TradeBlazer公式时 可能出现数据不存在的情况 可通过系统函数HistoryDataExist进行判断 如果该函数返回True 即为Bar数据有效 叠加数据 交易开拓者的超级图表支持商品叠加的显示 当叠加的图表调用各项公式时 可能有需要使用叠加的商品对应的基础数据假定 我们新建一个超级图表模块 其主数据对应的商品为 cu1107 在此基础上 我们叠加了cu1108和cu1109 此时 根据叠加操作的先后顺序 cu1107为Data0 cu1108为Data1 cu1109为Data2 在TradeBlazer公式中 我们可以通过Data1 Close Data2 Vol 类似方法调用叠加Bar数据 叠加Bar数据的函数和Bar数据一样 只是需要在调用的时候加上数据源 我们也可以使用Data0 Open 来调用Bar数据 默认情况下 可以省略对主数据源的指定 为了方便 一般直接使用Open 来代替Data0 Open 数据类型 TradeBlazer公式支持有三种基本数据类型 数值型 字符串 布尔型 为了通过用户函数返回多个值 我们对三种数据类型进行了扩展 增加了引用数据类型 另外 为了对变量 参数进行回溯 我们增加了序列数据类型 因此 我们的数据类型共有九种 如下表所示 数值型的表达式可以是一个数字 当然 他们也可以是一个数值型的保留字 例如 保留字 Close 或者是通过运算符号组合的一个计算表达式 该表达式的结果是数值型 下文中的例子都是数值型的表达式 154 Vol High Low 2 布尔型的表达式能够返回一个值True False 或者说它可以对表达式的值进行评估 然后返回其值 要么为True 要么为False 逻辑表达式永远要涉及到比较运算 下面我们有一些逻辑表达式 它也就是对一个表达式的值是True还是False进行判断 Close Open 5 2 字符串的表达式可以是单个字符串 也可以字符串的组合 或者返回值为字符串的系统函数 如下 就是一个字符串的表达式 Thisisateststringexpression Hello World 命名规则 公式名称规则 不区分大小写 不能超过32个英文字符 每一类公式不能出现相同的名称 公式名称不能出现字母 数字 下划线以外的其他字符 公式名称不能和系统保留字 系统函数等重名 变量 参数规则 不区分大小写 不能超过32个英文字符 每一个公式内部能不能重复命名 名称不能出现字母 数字 下划线以外的其他字符 名称不能和系统保留字 系统函数等重名 不能使用已定义的用户函数名 语句前奏 运算符 AND逻辑操作符的应用情况 OR逻辑操作符的应用情况 NOT逻辑操作符的应用情况 算术运算符号 关系运算符号 字符串操作符 是唯一的可以应用于控制字符串表达式的数学操作符 它可用于连接两个文本字符串为一个字符串 如下 这是一个字符串表达式 返回值为数值型 ThisisexpressionA andthisisexpressionB 上面字符串表达式的输出值 应该是 这是一个字符串表达式 返回值为数值型 和 ThisisexpressionAandthisisexpressionB 使用注释 注释可以标注解释语句 公式在编译执行时会忽略注释语句 注释分为单行注释和多行注释 单行注释在单行中对需要注释部分之前通过添加 使 之后的语句形成注释 以下是注释的例子 这是一个注释语句 多行注释在需要注释的部分之前添加 之后添加 形成注释 以下是注释的例子 这是一个多行注释的语句 标点符号 通常 在写语句的过程中 会用到很多的标点符号 可用来定义参数 定义变量 创建规则的优先权 例如 TradeBlazer公式用 来标注一个语句结束 标点符号也是一个保留字 因为符号也是语言结构的一部分 在下表中列出了TradeBlazer公式中所用到的标点符号 和该标点符号所表达的意思 功能关键字 数据源 数据输出 语句概念 一个语句代表一个完全的指示或描述 语句中包含有保留字 操作符 符号 并且语句总是以 作为语句结束的标志 以下为语句的一些例子 Thisisonestatement Thisisanotherstatement Thisisonestatement Thisisanotherstatement Thisisyetanother Thisisonestatement Thisisanother 语句 赋值语句 赋值语句用于给公式变量指定一个具体的值的语句 赋值语句使用赋值操作符 进行处理 以下为赋值语句的一些例子 VarsBoolb BeginB true EndVarsNumericValue1 BeginValue1 Close Open 2 EndVarsStringstr Beginstr ItIsATest End 控制语句 TradeBlazer公式支持两大类的控制语句 条件语句和循环语句 条件语句条件语句包括以下四类表达方式 IfIf ElseIf Else IfIf Else的嵌套循环语句循环语句包括两种表达方式 For和While If语句 If语句是一个条件语句 当特定的条件满足后执行一部分操作 If Condition TradeBlazer公式语句 Condition是一个逻辑表达式 当Condition为True的时候 TradeBlazer公式语句将会被执行 Condition可以是多个条件表达式的逻辑组合 Condition必须用 括起来 TradeBlazer公式语句是一些语句的组合 如果TradeBlazer公式语句是单条 您可以省略 二条或者二条以上的语句必须使用 例如 您可以计算图表中上升缺口 当前Bar的开盘价高于上一个Bar的最高价 出现了多少次 只要在图表中使用If语句 当找到一个满足条件的Bar时 即条件为真时 变量加1 脚本如下 VarsNumericSeriesCounter 0 BeginIf Open High 1 Counter Counter 1 1 End 在TradeBlazer公式中 If语句被广泛使用 如K线型态和特征走势 都需要大量的使用If语句 当条件满足的时候 在满足条件的Bar上面进行标记 例如 下面的语句就是特征走势的例子 If High High 1 ANDLowHigh 1 ANDLowHigh 1 ANDLow Low 1 PlotNumeric OutsideBar High Alert OutsideBar if Else语句 If Else语句是对指定条件进行判断 如果条件满足执行If后的语句 否则执行Else后面的语句 语法如下 If Condition TradeBlazer公式语句1 Else TradeBlazer公式语句2 Condition是一个逻辑表达式 当Condition为True的时候 TradeBlazer公式语句1将会被执行 Condition为False时 TradeBlazer公式语句2将会被执行 Condition可以是多个条件表达式的逻辑组合 Condition必须用 括起来 TradeBlazer公式语句是一些语句的组合 如果TradeBlazer公式语句是单条 您可以省略 二条或者二条以上的语句必须使用 例如 比较当前Bar和上一个Bar的收盘价 如果Close Close 1 Value1 Value1 Vol 否则Value1 Value1 Vol 脚本如下 If Colse Close 1 Value1 Value1 Vol ElseValue1 Value1 Vol If Else If语句 If Else If是在If Else的基础上进行扩展 支持条件的多重分支 语法如下 If Condition1 TradeBlazer公式语句1 ElseIf Condition2 TradeBlazer公式语句2 Else TradeBlazer公式语句3 Condition1是一个逻辑表达式 当Condition1为True的时候 TradeBlazer公式语句1将会被执行 Condition1为False时 将会继续判断Condition2的值 当Condition2为True时 TradeBlazer公式语句2将会被执行 Condition2为False时 TradeBlazer公式语句3将会被执行 Condition1 Condition2可以是多个条件表达式的逻辑组合 条件表达式必须用 括起来 If Else If的语句可以根据需要一直扩展 在最后的Else之后再加If Condition 和新的执行代码即可 当然您也可以省略最后的Else分支 语法如下 If Condition1 TradeBlazer公式语句1 ElseIf Condition2 TradeBlazer公式语句2 If Else的嵌套 If Else的嵌套是在If Else的执行语句中包含新的条件语句 即一个条件被包含在另一个条件中 语法如下 If Condition1 If Condition2 TradeBlazer公式语句1 Else TradeBlazer公式语句2 Else If Condition3 TradeBlazer公式语句3 Else TradeBlazer公式语句4 Condition1是一个逻辑表达式 当Condition1为True的时候 将会继续判断Condition2的值 当Condition2为True时 TradeBlazer公式语句1将会被执行 Condition2为False时 TradeBlazer公式语句2将会被执行 当Condition1为False的时候 将会继续判断Condition3的值 当Condition3为True时 TradeBlazer公式语句3将会被执行 Condition3为False时 TradeBlazer公式语句4将会被执行 Condition1 Condition2 Condition3可以是多个条件表达式的逻辑组合 条件表达式必须用 括起来 TradeBlazer公式语句是一些语句的组合 如果TradeBlazer公式语句是单条 您可以省略 二条或者二条以上的语句必须使用 TradeBlazer公式语句是一些语句的组合 如果TradeBlazer公式语句是单条 您可以省略 二条或者二条以上的语句必须使用 循环语句 ForFor语句是一个循环语句 重复执行某项操作 直到循环结束 语法如下 For循环变量 初始值To结束值 TradeBlazer公式语句 循环变量为在之前已经定义的一个数值型变量 For循环的执行是从循环变量从初始值到结束值 按照步长为1递增 依次执行TradeBlazer公式语句 结束值必须大于或等于初始值才有意义 初始值和结束值可以使用浮点数 但是在执行过程中会被直接取整 只计算其整数部分 TradeBlazer公式语句是一些语句的组合 如果TradeBlazer公式语句是单条 您可以省略 二条或者二条以上的语句必须使用 第一次执行时 首先将循环变量赋值为初始值 然后判断循环变量是否小于等于结束值 如果满足条件 则执行TradeBlazer公式语句 同时循环变量加1 接着重新判断循环变量是否小于等于结束值 一直到条件为False 退出循环 例如 以下的用户计算Price最近Length周期的和 ParamsNumericSeriesPrice 1 NumericLength 10 VarsNumericSumValue 0 Numerici Beginfori 0toLength 1 SumValue SumValue Price i ReturnSumValue End 如果希望For语句从大到小进行循环 可以使用以下的语法 For循环变量 初始值DownTo结束值 TradeBlazer公式语句 For DownTo让循环变量从结束值每次递减1直到等于结束值 依次调用TradeBlazer公式语句执行 初始值必须大于或等于结束值才有意义 For语句是比较常用的一种循环控制语句 它应用于知道循环次数的地方 很多内建用户函数中都使用For语句来完成相应的功能 比如Summation Highest Lowest LinearReg等 While While语句在条件为真的时候重复执行某一项操作 即 只要条件表达式的值为真 True 时 就重复执行某个动作 直到行情信息改变以致条件为假 False 时 循环才结束 语法如下 While Condition TradeBlazer公式语句 Condition是一个逻辑表达式 当Condition为True的时候 TradeBlazer公式语句将会被循环执行 Condition可以是多个条件表达式的逻辑组合 Condition必须用 括起来 TradeBlazer公式语句是一些语句的组合 如果TradeBlazer公式语句是单条 您可以省略 二条或者二条以上的语句必须使用 大于100000成交量需要最近Bar的个数 VarsNumericSumVolume 0 NumericCounter 0 BeginWhile SumVolume 100000 SumVolume SumVolume Vol Counter Counter Counter 1 End首先 我们定义两个变量SumVolume和Counter 并将其默认值设为0 当SumVolume 100000这个表达式为True时 While内的TradeBlazer公式语句一直被调用 将前Counter个Bar的Vol加到SumVolume中 当SumVolume大于等于100000时 退出循环 Break语句 在使用While循环的时候 有可能会遇到循环一直执行 永远不能退出的情况 这种情况我们称之为死循环 比如下面的语句 While True TradeBlazer公式语句 在这种情况下 循环将一直执行 导致程序不能继续工作 在这种情况 我们可以使用Break来跳出循环 详细情况参加下节 针对上节的例子 要想从死循环中跳出 我们可以在循环之中添加Break语句 如下 While True TradeBlazer公式语句 If Condition Break 循环在每次执行后 都将判断Condition的值 当Condition为True时 则执行Break语句 跳出整个循环 Continue语句 有的时候在循环中 我们可能希望跳过后面的代码 进入下一次循环 在这种情况下 可以使用Continue语句来达到目的 如下 While Condition1 TradeBlazer公式语句1 If Condition2 Continue TradeBlazer公式语句2 当Condition1满足时 循环被执行 在执行完TradeBlazer公式语句1后 将判断Condition2的值 当Condition2为True 将跳过TradeBlazer公式语句2 重新判断Condition1的值 进入下一次循环 否则将继续执行TradeBlazer公式语句2 定义 参数是一个预先声明的地址 用来存放输入参数的值 在声明之后 您就可以在接下来的公式中使用该参数的名称来引用其值 参数的值在公式的内部是不能够被修改 在整个程序中一直保持不变 不能对参数进行赋值操作 引用参数是个特例 参数的好处在于您可以在调用执行技术分析 交易指令的时候才指定相应的参数 而不需要重新编译 例如 我们常用的移动平均线指标 就是通过不同的Length来控制移动平均线的周期 在调用指标时可以随意修改各个Length的值 使之能够计算出相对应的移动平均线 您可以指定4个参数为5 10 20 30计算出这4条移动平均线 也可以修改4个参数为10 22 100 250计算出另外的4条移动平均线 参数的修改很简单 在超级图表调用指标的过程中 您可以打开指标的属性设置框 切换到参数页面 手动修改各项参数的值 然后应用即可 交易开拓者将根据新的参数设置计算出新的结果 在超级图表中反映出来 另外 参数的一个额外的优点是 我们可以通过修改交易指令不同的参数 计算交易指令组合的优劣 达到优化参数的目的 参数 参数类型 在介绍参数类型之前 我们需要对于TradeBlazer公式的六种类型 交易指令 技术指标 K线型态 特征走势 用户函数以及用户字段 作一些说明 用户函数是六种公式中比较特殊的一类 它自身不能被超级图表 行情报价这样的模块调用 只能被其他五类公式或者用户函数调用 因此它的参数类型也和其他几种不一样 用户函数的参数类型可以包含TradeBlazer公式的九种类型 而其他五类公式只能使用三种简单的基本类型 数值型 字符串 布尔型 三种简单类型参数通过传值的方式将参数值传入公式 公式内部通过使用参数名称 将参数值用来进行计算或赋值 引用参数是在调用的时候传入一个变量的地址 在用户函数内部会修改参数的值 在函数执行完毕 上层调用的公式会通过变量获得修改后的值 引用参数对于需要通过用户函数返回多个值的情况非常有用 参数声明 在使用参数之前 必须对参数进行声明 TradeBlazer公式使用关键字 Params 来进行参数宣告 并指定参数类型 可以选择赋默认值 也可以不赋默认值 如果某个参数没有赋予默认值 则这个参数之前的其他参数的默认值都将被忽略 参数定义的语法如下 Params参数类型参数名1 初值 参数类型参数名2 初值 参数类型参数名3 初值 下面是一些参数定义的例子 ParamsBoolbTest False 定义布尔型参数bTest 默认值为False NumbericLength 10 定义数值型参数Length 默认值为10 NumericSeriesPrice 0 定义数值型序列参数Price 默认值为0 NumericRefoutput 0 定义数值型引用参数output 默认值为0 StringstrTmp Hi 定义字符串参数strTmp 默认值为Hi 参数名称的命名规范详细说明参见命名规则 整个公式中只能出现一个Params宣告 并且要放到公式的开始部分 在变量定义之前 参数的默认值 在声明参数时 通常会赋给参数一个默认值 例如上例中的False 10 0等就是参数的默认值 用户函数的默认值是在当用户函数被其他公式调用 省略参数时作为参数的输入值 其他五种公式的默认值是用于图表 报价等模块调用公式时默认的输入值 参数的默认值的类型在定义的时候指定 默认值在公式调用的时候传入作为参数进行计算 只能够对排列在后面的那些参数提供默认参数 例如 ParamsNumericMyVal1 NumericMyVal2 0 NumericMyVal3 0 您不能够使用以下方式对参数的默认值进行设定 ParamsNumericMyVal1 0 NumericMyVal2 0 NumericMyVal3 参数使用 在声明参数之后 我们可以在脚本正文中通过参数名称使用该参数 在使用的过程中要注意保持数据类型的匹配 示例如下 ParamsNumericSeriesPrice 1 VarsNumericCumValue 0 BeginCumValue CumValue 1 Price ReturnCumValue End在以上的公式中 首先定义了一个数值型序列参数Price 并将其默认值设置为1 接着定义了一个变量CumValue 脚本正文中 将CumValue的上一个Bar值加上Price 并将值赋给CumValue 最后返回CumValue 通过上述的公式可以看到 我们只需要调用参数名 就可以使用参数的值进行计算 引用参数 TradeBlazer公式的用户函数可以通过返回值 返回函数的计算结果 返回值只能是三种简单类型 当我们需要通过函数进行计算 返回多个值的时候 单个的返回值就不能满足需求了 在这种情况下 我们提出了引用参数的概念 引用参数是在调用的时候传入一个变量的地址 在用户函数内部会修改参数的值 在函数执行完毕 上层调用的公式会通过变量获得修改后的值 因为引用参数的使用是没有个数限制 因此 我们可以通过引用参数返回任意多个值 例如 用户函数MyFunc如下 ParamsNumericSeriesPrice 0 NumericRefoHigher 0 NumericRefoLower 0 VarsNumericTmp 0 BeginTmp Average Price 10 oHigher IIf Tmp High Tmp High oLower IIf Tmp Low Tmp Low ReturnTmp End 以上代码通过两个数值型引用参数返回10个周期的Price平均值和最高价的较大值oHigher 以及10个周期的Price平均值和最低价的较小值oLower 并且通过函数返回值输出10个周期的Price平均值 在调用该用户函数的公式中 可以通过调用该函数获得3个计算返回值 示例如下 VarsNumericAvgValue NumericHigherValue NumericLowerValue BeginAvgValue MyFunc Close HigherValue LowerValue End新版中引用参数时只能传入普通变量和引用参数值 定义 变量是一个存储值的地址 当变量被声明之后 就可以在脚本中使用变量 可以对其赋值 也可以在其他地方引用变量的值进行计算 要对变量进行操作 直接使用变量名称即可 变量的主要用处在于它可以存放计算或比较的结果 以方便在之后的脚本中直接引用运算的值 而无需重现计算过程 例如 我们定义一个变量Y 我们把一个收盘价 Close 乘上8 的所得的值存储在Y中 即Y Close 8 那么一旦计算出Close 8 的值 便赋给变量Y 而无需在公式中输入计算过程 只需调用变量名称即可引用变量的值 变量有助于程序的优化 这是TradeBlazer公式必须重复调用一些数据 这些数据可能是某些函数 如 Bar数据 或通过表达式执行计算和比较的值 因此 在表达式频繁使用的地方使用变量可提高程序的运行速度和节约内存空间 使用变量也可以避免输入错误 使程序的可读性提高 示例如下 If Close High 1 Average Close 10 0 5 Buy 100 High 1 Average Close 10 0 5 如果使用变量 则整个代码变得简洁 Value1 High 1 Average Close 10 0 5 If Close Value1 Buy 100 Value1 如果一些表达式的组合经常在不同的公式中被调用 这个时候变量就不能实现功能 变量只能在单个公式的内部使用 这个时候我们需要建立用户函数来完成这些功能 变量 变量类型 TradeBlazer公式支持九种数据类型 但对于变量定义 引用类型是无效的 剩余六种数据类型中分为简单和序列两大类 简单类型变量是单个的值 不能对其进行回溯 序列类型变量是和Bar长度一致的数据排列 我们可以通过回溯来获取当前Bar以前的任意值 变量声明 在使用变量之前 必须对变量进行声明 TradeBlazer公式使用关键字 Vars 来进行变量宣告 并指定变量类型 可以选择赋默认值 也可以不赋默认值 变量定义的语法如下 Vars变量类型变量名1 初值 变量类型变量名2 初值 变量类型变量名3 初值 下面是一些变量定义的例子 VarsNumericSeriesMyVal1 0 定义数值型序列变量MyVal1 默认值为0 NumericMyVal2 0 定义数值型变量MyVal2 默认值为0 BoolMyVal3 False 定义布尔型变量MyVal3 默认值为False StringMyVal4 Test 定义字符串变量MyVal4 默认值为Test 变量定义的个数没有限制 变量名称的命名规范详细说明参见命名规则 整个公式中只能出现一个Vars宣告 并且要放到公式的开始部分 在参数定义之后 正文之前 变量的默认值 在声明变量时 通常会赋给变量一个默认值 例如上例中的0 False Test 等就是变量的默认值 如果某个变量没有赋予默认值 系统将会自动给该变量赋予默认值 数值型变量的默认值为0 布尔型变量的默认值为False 字符串的默认值为空串 变量的默认值是在当公式在执行时 给该变量赋予的初值 使该变量在引用时存在着有效的值 在该公式每个Bar的执行过程中 改变量的默认值都会被重新赋值 变量赋值 变量声明完成之后 您可以在脚本正文中给变量指定一个值 语法如下 Name Expression Name 是变量的名称 表达式的类型可以是数值型 布尔型 字符串中的任何一种 不过表达式的类型一定要和变量的数据类型相匹配 如果变量被指定为是数值型的 那么表达式一定要是数值型的表达式 例如 下面的语句将Close的10周期平均值赋值给变量Value1 Value1 Average Close 10 在下面这个语句中 声明了一个名为 KeyReversal 的逻辑型变量 然后又把计算的值赋给它 VarsBoolKeyReversal False BeginKeyReversal LowHigh 1 End 变量使用 变量定义 赋值之后 在表达式中直接使用变量名就可以引用变量的值 例如在下面的语句中计算了买入价格后 把值赋给数值型变量EntryPrc 在买入指令中便可直接应用变量名 通过变量名便可引用变量的值 VarsNumericEntryPrc 0 BeginEntryPrc Highest High 10 If MarkerPosition1 Buy 1 EntryPrc End 接下来的例子 我们计算最近10个Bar最高价中的最大值 不包括当前Bar 对比当前High 然后通过If语句 产生报警信息 VarsBoolCon1 False BeginCon1 High Highest High 10 1 If Con1 Alert New10 barhigh End其实我们并不一定都要应用条件为True的情况 有时候我们需要判断条件为False的时候执行某些代码 如下的例子 VarsBoolCon1 False BeginCon1 HighLowest Low 10 1 If Con1 False Alert Newhighorlow End 序列变量 序列变量是变量中的一种 可以对序列变量进行回溯获取以前Bar的变量数据 序列变量的声明和简单变量一样 只是定义的数据类型不同 您必须选择以下的3种类型来定义序列变量 NumericSeries BoolSeries StringSeries 例如 VarsNumericSeriesMyNumSVal 0 BoolSeriesMyBoolVal False StringSeriesMyStrVal 序列变量和简单变量一样 可以对其赋予默认值 序列变量定义之后 您可以象简单变量一样的对其使用 不会有任何的不同 除了支持全部简单变量的功能之外 序列变量还可以通过 nOffset 来回溯以前的变量值 对于序列变量 TradeBlazer公式在内部针对其回溯的特性作了很多的特殊处理 也需要为序列变量保存相应的历史数据 因此 和简单变量相比 执行的速度和占用内存空间方面都作了一些牺牲 因此 尽管您可以定义一个序列变量 把它当作简单变量来使用 但是 我们强烈建议您只将需要进行回溯的变量定义为序列变量 数据回溯 在TradeBlazer公式中有三种类型的数据回溯 变量回溯 参数回溯和函数回溯 数据回溯 变量回溯 TradeBlazer公式共支持九种数据类型 但对于变量定义 引用类型是无效的 剩余六种数据类型中分为简单和序列两大类 简单类型变量是单个的值 不能对其进行回溯 序列类型变量是和Bar长度一致的数据排列 我们可以通过回溯来获取当前Bar以前的任意值 要使用变量回溯 需要在变量的后面 使用中括号 nOffset nOffset是要回溯引用的Bar相对于当前Bar的偏移值 该值必须大于等于0 当nOffset 0时 即为获取当前Bar的变量值 例如 我们定义如下技术指标 VarsNumericSeriesMyVal BeginMyVal Average Close 10 PlotNumeric MyVal MyVal 3 End以上公式定义数值型序列变量MyVal MyVal等于收盘价的10个周期的平均值 然后将序列变量MyVal的前3个Bar数据输出 以上公式MyVal的前9个数据因为需要计算的Bar数据不足 返回无效值 从第10个Bar开始 MyVal获取到正确的平均值 但是我们需要输出的数据是MyVal 3 即前3个Bar的数据 因此 直到第12个Bar 有效的数据才会被输出 以上公式的12是该公式需要的最少引用周期数 如果将输出信息画到超级图表中 前11个Bar是没有图形显示的 当nOffset CurrentBar或者nOffset 0时 对于变量的回溯都将越界 这种情况下 将返回无效值 参数回溯 TradeBlazer公式支持的九种基本类型 在用户函数的参数定义中全部支持 在其他的公式中参数定义只支持三种简单类型 因此 关于参数的回溯问题 只对用户函数有效 以下我们举例说明用户函数序列参数的使用 要使用参数回溯 需要在参数的后面 使用中括号 nOffset nOffset是要回溯引用的Bar相对于当前Bar的偏移值 该值必须大于等于0 当nOffset 0时 即为获取当前Bar的参数值 例如 我们定义一个用户函数MyFunc 脚本如下 ParamsNumericSeriesPrice 0 NumericLength 10 VarsNumericMyAvg NumericMyDeviation BeginMyAvg Summation Price Length Length MyDeviation MyAvg Price Length ReturnMyDeviation End以上的例子 对输入的Price我们求其10个周期的平均值 然后求出该平均值和Price的前Length个Bar的值之间的差值 将其返回 对于Price Length 这样的参数回溯引用 其实现原理和上节所描述的变量回溯引用基本一致 函数回溯 函数回溯分为系统函数的回溯和用户函数的回溯 系统函数中回溯的使用主要是针对Bar数据 比如我们需要获取上2个Bar的收盘价 脚本为Close 2 又或者我们需要获取10个Bar前的成交量 脚本为Vol 10 对于Bar数据的回溯是系统函数中最常用的 虽然也可以对行情数据和交易数据等进行回溯 但是大部分并无实质的意义 返回的结果和不回溯是一样的 因此 不推荐如此使用 要对函数回溯引用 我们可以通过在函数名称后面添加 nOffset 获取其回溯值 nOffset是要回溯引用的Bar相对于当前Bar的偏移值 该值必须大于等于0 当nOffset 0时 即为获取当前Bar的参数值 带有参数的函数回溯 需要将 nOffset 放到参数之后 另外 无参数和使用默认参数的情况下 函数调用的括号可以省略 例如 Close 2 等同于Close 2 用户函数的回溯和系统函数原理基本一致 但考虑到系统的执行速度和效率等因素 目前 TradeBlazer公式不支持对用户函数的回溯 如果您想要获取用户函数的回溯值 建议您将函数返回值赋值给一个序列变量 通过对序列变量的回溯来达到相同的目的 如下面的脚本所示 取Close的10个Bar平均值的4个周期前的回溯值 VarsNumericSeriesAvgValue NumericTmpValue BeginAvgValue Average Close 10 TmpValue AvgValue 4 End TradeBlazer公式包含的公式类型如下 用户函数技术指标K线型态特征走势交易指令 公式 用户函数 用户函数是可以通过名称进行调用的一组语句的集合 用户函数返回一个值 这个值可以是Numeric Bool String三种类型中的任何一种 您可以在需要的任何地方调用用户函数来完成相应的功能 例如 经常使用的一个用户函数Summation Summation通过输入Price序列数据 以及Length统计周期数 计算Price最近Length周期的和 每次用户需要进行求和计算的时候 都可以调用Summation代替冗长的求和代码 输入参数并获取返回值 在调用Summation的时候 需要根据定义时候的参数列表和顺序 输入相应的输入参数 有默认值的参数可以省略输入参数 在被调用的时候格式如下 Value1 Summation Close 10 用户函数Summation ParamsNumericSeriesPrice 1 NumericLength 10 VarsNumericSumValue 0 Numerici BeginSumValue 0 fori 0toLength 1 SumValue SumValue Price i ReturnSumValue End 规则 用户函数在交易开拓者中使用有如下规则 支持九种类型的参数定义 支持指定参数默认值 支持使用引用参数 可通过引用参数返回多个数据 支持六种类型的变量定义 支持指定变量的默认值 可以访问Data0 Data49个数据源的Bar数据 可以访问行情数据 属性数据 必须通过Return返回数据 返回数据类型为三种基本类型之一 脚本中的返回数据类型必须和属性界面设置中一致 用户函数之间可以相互调用 用户函数自身也可以递归调用 用户函数可以根据设置调用部分的系统函数 如何编写用户函数 一个用户函数由三部分组成 参数定义 变量定义 脚本正文 语法如下 Params参数定义语句 Vars变量定义语句 Begin脚本正文 End参数定义和变量定义部分在前面已经详细叙述过 脚本的正文部分将输入参数进行计算 得出函数的返回值 并通过Return返回 例如 我们以Average为例 Average计算Price在Length周期内的平均值 Average调用Summation求和 并计算平均值 然后返回结果 脚本见前面 对于使用多个输出的情况 即使用引用参数的情况 我们以求N周期最大值为例进行描述 假定我们需要编写一个用户函数 该函数需要求出序列变量Price在最近Length周期内的最大值 并且要求出最大值出现的Bar和当前Bar的偏移值 脚本如下 ParamsNumericSeriesPrice 1 NumericLength 10 NumericRefHighestBar 0 VarsNumericMyVal NumericMyBar Numerici BeginMyVal Price MyBar 0 Fori 1toLength 1 If Price i MyVal MyVal Price i MyBar i HighestBar MyBar ReturnMyVal End 用户函数的调用 用户函数成功创建之后 编译 保存成功 您可以在其他的用户函数 技术分析 交易指令等公式中调用用户函数 调用用户函数时需要注意保持参数类型的匹配 即用户函数参数的声明数据类型需和调用时传入参数的数据匹配 这是所指的匹配是指基本数据类型 数值型 布尔型 字符串三种类型匹配 并且保持序列参数和传入变量类型的对应 我们可以对用户函数定义为Numeric或者NumericRef的参数使用Numeric类型的变量作为传入参数 但不能将在定义为NumericSeries类型的参数时传入Numeric 具体的对应关系如下表 技术指标 技术指标是最常用的一类公式 它通过计算一系列的数学公式 在每个Bar都返回值 这些值在图表模块中输出为线条 柱状图 点等表现形式 通过分析图形特点 走势和曲线帮助客户分析行情走势 得出合理的交易判断 当技术指标应用在图表中时 您可以设置技术指标各输出值的表现形式 以及颜色 粗细等 如下图的点 线 柱状图所示 技术指标的使用规则 技术指标的使用规则归纳如下 支持三种基本类型的参数定义 支持指定参数默认值 不支持使用引用参数 支持六种类型的变量定义 支持指定变量的默认值 可以访问Data0 Data49个数据源的Bar数据 可以访问行情数据 属性数据 必须通过PlotNumeric PlotBool PlotString返回数据 返回数据类型为三种基本类型的组合 可以输出多组数据 通过PlotNumeric PlotBool PlotString的第一个参数 即输出名称来区分输出数据 可以支持Alert来进行报警 技术指标可以调用所有的用户函数进行计算 技术指标可以根据设置调用部分的系统函数 技术指标在执行时 必须要指定相应的数据源和周期 需要调用历史数据的 只有历史数据存在的情况下才能返回正确的值 布林线的脚本 ParamsNumericLength 20 NumericOffset 2 VarsNumericUpLine 上轨NumericDownLine 下轨NumericSeriesMidLine 中间线NumericBand BeginMidLine AverageFC Close Length Band StandardDev Close Length 2 UpLine MidLine Offset Band DownLine MidLine Offset Band PlotNumeric UpLine UpLine PlotNumeric DownLine DownLine PlotNumeric MidLine MidLine End PlotNumeric用法 K线型态 K线型态是另外一种形式的技术分析公式 它对满足设定条件的Bar进行标记 使之醒目 便于客户进行分析 当K线型态应用在图表中时 您可以设置其输出值的颜色 风格和粗细 如图所示 使用规则 特征走势的使用规则归纳如下 支持三种基本类型的参数定义 支持指定参数默认值 不支持使用引用参数 支持六种类型的变量定义 支持指定变量的默认值 可以访问Data0 Data49个数据源的Bar数据 可以访问行情数据 属性数据 必须通过PlotNumeric PlotBool PlotString返回数据 返回数据类型为三种基本类型的组合 只能输出一组数据 用名称进行区分 可以支持Alert来进行报警 特征走势可以调用所有的用户函数进行计算 特征走势可以根据设置调用部分的系统函数 特征走势在执行时 必须要指定相应的数据源和周期 需要调用历史数据的 只有历史数据存在的情况下才能返回正确的值 示例 特征走势创历史新高 脚本如下 ParamsNumericLength 5 VarsBoolCondition False BeginCondition High Highest High Length If Condition PlotNumeric CLSXG High End特征走势创历史新高判断条件 条件满足的情况下用PlotNumeric PlotBool PlotString输出信息 交易指令 TradeBlazer公式提供一种简单的方法表达您的交易思想 那就是使用交易指令 一个简单的交易指令如下 If Condition Buy 1 Close 以上的语句表达的意思是 当某些条件满足了 将用当前Bar的收盘价买入1手指定商品 就像您平时通过经纪商进行交易操作一样 TradeBlazer公式提供四个系统函数和现实中的四种交易动作进行对应 如下 使用规则 交易指令的使用规则归纳如下 支持三种基本类型的参数定义 支持指定参数默认值 不支持使用引用参数 支持六种类型的变量定义 支持指定变量的默认值 可以访问Data0 Data49个数据源的Bar数据 可以访问行情数据 属性数据 通过Buy Sell SellShort和BuyToCover产生交易动作 也可以使用各种内建平仓指令产生交易动作 每个交易指令至少包含一个交易动作 交易指令可以调用所有的用户函数进行计算 交易指令可以根据设置调用部分的系统函数 交易指令在执行时 必须要指定相应的数据源和周期 需要调用历史数据的 只有历史数据存在的情况下才能返回正确的值 MACD LE在零轴之上 当MACDValue向上穿过AvgMACD值时为产生多头买入指令 示例 交易指令MACD LE 脚本如下 ParamsNumericFastLength 12 NumericSlowLength 26 NumericMACDLength 9 NumericBuyLots 1 VarsNumericSeriesMACDValue NumericSeriesAvgMACD NumericMACDDiff BoolCondition1 BoolCondition2 BeginMACDValue XAverage Close FastLength XAverage Close SlowLength AvgMACD XAverage MACDValue MACDLength MACDDiff MACDValue AvgMACD Condition1 CrossOver MACDValue AvgMACD Condition2 MACDValue 0 if Condition1AndCondition2 Buy BuyLots Close End 交易策略 通常单个交易指令只完成建仓或平仓的单个动作 而一个完整的交易策略应该至少包含建仓 平仓交易指令 并且根据需要加上止损 获利等锁定风险和收益的交易指令 多个交易指令的组合才能更加有效的帮助我们完整的进行交易 因此 我们将多个交易指令的有效组合称之为交易策略 假定我们创建一个交易策略 该交易策略由以下交易指令组成 并按照如下顺序应用到超级图表中 当我们将该交易策略应用到超级图表上时 TradeBlazer公式将会从图表的第一个Bar开始执行交易策略 在第一个Bar上首先执行多头建仓指令A 可能会产生交易委托 开仓 该委托可能被设置为在当前Bar执行 也可以被设置为延迟到下一个Bar执行 当多头建仓指令A执行完成之后 将按顺序调用多头平仓指令B 同时该指令会判断当前的持仓状态 仓位等信息 当条件满足的时候会产生交易委托 平仓 依次执行止损平仓指令C和获利平仓指令D 当四个交易指令在第一个Bar上都执行完之后 将会移到第二个Bar执行 这时候 系统会首先读取上一个Bar是否有延迟的交易委托 如果有延迟的交易委托 对这些委托先进行处理 然后像第一个Bar一样 依次调用各个交易指令 以此类推 从图表的第一个Bar到最后一个Bar 全部执行完成之后 整个交易策略执行完毕 在整个执行过程产生的所有交易委托被保存下来供超级图表模块显示或进行性能测试分析
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!