收藏 分销(赏)

期货程序化交易——交易开拓者(TradeBlazer)公式详细介.doc

上传人:仙人****88 文档编号:9399670 上传时间:2025-03-24 格式:DOC 页数:45 大小:378KB
下载 相关 举报
期货程序化交易——交易开拓者(TradeBlazer)公式详细介.doc_第1页
第1页 / 共45页
期货程序化交易——交易开拓者(TradeBlazer)公式详细介.doc_第2页
第2页 / 共45页
点击查看更多>>
资源描述
交易开拓者(TradeBlazer)公式详细介绍 概述 本章节内容是TradeBlazer公式的全面参考手册,详细介绍了TradeBlazer公式的结构、语法、特点、使用方法及功能等。 通过阅读该参考手册,您能够了解TradeBlazer公式的基本语法、操作符、表达式及控制语句等,通过手册提供的各种示例程序,掌握各种TradeBlazer公式的编写要领,最终达到能够熟练将自己的思想转化为TradeBlazer公式,并在交易开拓者中应用。 什么是TradeBlazer公式? TradeBlazer公式是一种专为分析金融数据-时间序列而设计的高级语言,它提供直接、强大的框架将交易思想转化为用户函数、用户字段、技术分析,交易指令等计算机能够识别的代码。 TradeBlazer公式是一门语法简单但是功能强大的语言,它能帮助您创建自己的交易和技术分析工具。通过组合普通的交易指令和简单的语句,TradeBlazer公式使您能够很容易并且直接的用简单语句表达自己的交易规则和行为。 交易开拓者能够读取您开发的TradeBlazer公式,在历史价格数据基础上进行评估,并能自动执行特定的交易动作,将您的交易思想转化为实际的交易操作。 TradeBlazer公式能做什么? 通过TradeBlazer公式,您能够创建自己的交易指令、技术指标、K线型态、特征走势、用户函数以及用户字段。您也可以拷贝,修改并使用系统内置几百个函数、字段、技术分析和交易指令。 TradeBlazer公式包含的公式类型如下: § 用户函数:用户函数是能够通过函数名称进行引用的指令集,它执行一系列操作并返回一个值。您可以在其他任何公式中使用用户函数进行计算; § 用户字段:用户字段是TradeBlazer公式为交易开拓者报价类窗体提供的一项数据输出公式,通过用户字段执行一系列语言指令,给报价窗体返回一个特定的显示值; § 技术指标:技术指标是基于基础数据,通过一系列的数学运算,在每个Bar返回相应的结果值的一类公式,这些值在图表模块中输出为线条、柱状图、点等表现形式; § K线型态:K线型态是类似于技术指标的一类公式,它主要着重于反映一段K线的特定型态,并通过不同的技术指标的方式输出到图表; § 特征走势:特征走势是类似于技术指标的一类公式,它主要着重于反映整个价格曲线的趋势、变化特征,并通过特定的表达方式输出到图表; § 交易指令:交易指令是包含买、卖、平仓,头寸,仓位控制的并执行交易指令的一类公式,它主要帮助您将您的交易思想转化为计算机的操作。 通过调用TradeBlazer公式,您可以在交易开拓者中进行技术分析、交易策略优化测试、公式报警、自动交易等操作。 各类数据 Bar数据 在介绍Bar数据之前,首先,我们需要讨论一下TradeBlazer公式的计算方法,针对上面介绍的各种公式类型,包含用户函数,技术分析,交易指令等,在公式进行计算时,都是建立在基本数据源(Bar数据)之上,我们这里所谓的Bar数据,是指商品在不同周期下形成的序列数据,在单独的每个Bar上面包含开盘价、收盘价、最高价、最低价、成交量及时间。期货等品种还有持仓量等数据。 所有的Bar按照不同周期组合,并按照时间从先到后进行排列,由此形成为序列数据,整个序列称之为Bar数据。 以下列出所有的Bar数据系统函数: 函数名 简写 描述 Date D 当前Bar的日期。 Time T 当前Bar的时间。 Open O 当前Bar的开盘价。 High H 当前Bar的最高价。 Low L 当前Bar的最低价。 Close C 当前Bar的收盘价。 Vol V 当前Bar的成交量。 OpenInt 无 当前Bar的持仓量。 CurrentBar 无 当前Bar的索引值,从0开始计数。 BarStatus 无 当前Bar的状态值,0表示为第一个Bar,1表示为中间的普通Bar,2表示最后一个Bar。 计算方法 TradeBlazer公式在计算时按照Bar数据的Bar数目,从第一个Bar到最后一个Bar,依次进行计算,如果公式中出现了调用Bar数据函数的,则取出当前Bar的相应值,进行运算。如下图箭头所示,公式执行从上至下,Bar从左到右执行。 例如,现在有如下语句需要执行,Bar数据如下表所示: Value1 = Close - Open; CurrentBar Date Time Open High Low Close Vol Value1 0 2005/04/04 15:00 2970 2979 2951 2974 18 4 1 2005/04/05 15:00 2960 2960 2946 2960 14 0 2 2005/04/06 15:00 2951 2980 2951 2963 30 12 3 2005/04/07 15:00 3048 3048 2968 2995 120 -57 4 2005/04/08 15:00 2985 2987 2985 2987 10 2 ... ... ... ... ... ... ... ... ... 如上表所示,从CurrentBar = 0 开始,依次计算每个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数据有效。 叠加数据 交易开拓者的超级图表支持商品叠加的显示,当叠加的图表调用各项公式时,可能有需要使用叠加的商品对应的基础数据,针对这样的需求,TradeBlazer公式提供了叠加数据的支持。 假定,我们新建一个超级图表模块,其主数据对应的商品为:cu0503,在此基础上,我们叠加了cu0504和cu0505。此时,根据叠加操作的先后顺序,cu0503为Data0,cu0504为Data1,cu0505为Data2,在TradeBlazer公式中,我们可以通过Data1.Close(),Data2.Vol()类似方法调用叠加Bar数据,叠加Bar数据的函数和Bar数据一样,只是需要在调用的时候加上数据源。 我们也可以使用Data0.Open()来调用Bar数据,默认情况下,可以省略对主数据源的指定,为了方便,一般直接使用Open()来代替Data0.Open()。 行情数据 除了Bar数据之外,TradeBlazer公式还可以支持实时行情数据的调用,行情数据是指当前商品最新的报价数据,该数据和Bar无关,行情数据的回溯没有意义。 行情数据只在最后Bar是有意义的,其他Bar会返回无效值。因此,在调用行情数据函数时,为了提高效率,最好按照以下方法: If(BarStatus()==2) { //调用行情数据函数 } 行情数据函数都按照以下格式命名Q_XXXXX,比如Q_Close,Q_BidPrice。在调用行情数据的时候,需要判断当前行情数据是否有效,系统提供函数QuoteDataExist来对有效性进行判断。如果行情数据已经准备好,返回True,否则,返回False。 属性数据 除了以上的各项数据之外,TradeBlazer公式还提供一组重要的属性数据,反映了该商品的一些基本信息,比如当前数据周期,买卖盘个数、保证金设置等信息。在所有的Bar上面获取的市场属性数据都是一样的,属性数据的回溯没有意义。 关于属性数据的详细说明参见帮助文件附录。  数据类型 TradeBlazer公式支持有三种基本数据类型:数值型、字符串、布尔型。 为了通过用户函数返回多个值,我们对三种数据类型进行了扩展,增加了引用数据类型。另外,为了对变量,参数进行回溯,我们增加了序列数据类型。因此,我们的数据类型共有九种,如下表所示: 名称 说明 Bool 布尔型。 BoolRef 布尔型引用。 BoolSeries 和周期长度一致的Bool型序列值。 Numeric 数值型。 NumericRef 数值型引用。 NumericSeries 和周期长度一致的Numeric型序列值。 String 字符串。 StringRef 字符串引用。 StringSeries 和周期长度一致的String型序列值。 命名规则 公式名称规则: § 不区分大小写; § 不能超过32个英文字符; § 每一类公式不能出现相同的名称; § 公式名称不能出现字母、数字、下划线以外的其他字符; § 公式名称不能和系统保留字,系统函数等重名。 变量,参数规则: § 不区分大小写; § 不能超过32个英文字符; § 每一个公式内部能不能重复命名; § 名称不能出现字母、数字、下划线以外的其他字符; § 名称不能和系统保留字,系统函数等重名; § 不能使用已定义的用户函数名。 注意: 建议采取匈牙利命名规则命名变量,匈牙利命名规则是 Charles Simonyi 发明的一种给变量取名字的方式。他 在变量前加上变量的类型,这样,看看变量的名字就知道变量的类型了。 语句 一个语句代表一个完全的指示或描述,语句中包含有保留字、操作符、符号。并且语句总是以";"作为语句结束的标志。 以下为语句的一些例子: 1. This is one statement; 2. This is another statement; 3. This is one statement; 4. This is another statement ; 5. This is yet another; 6. This is one statement;This is another; 赋值语句 赋值语句用于给公式变量指定一个具体的值的语句,赋值语句使用赋值操作符(=)进行处理。 以下为赋值语句的一些例子: Vars Bool b; Begin B = true; ... End Vars Numeric Value1; Begin Value1 = (Close + Open)/2; ... End Vars String str; Begin str ="It Is A Test!"; ... End 变量在赋值的时候忽略其扩展数据类型,只考虑其基本数据类型,即NumericSeries,NumericRef,Numeric之间可以相互赋值。此时序列数据类型只是对当前Bar的值进行操作。 保留字 保留字都有自己独特的意思或用途,主要是一些功能关键字,系统函数,以及数据类型等。 下面分类列举出系统主要的保留字。 数据类型 包含3种基本类型,共9种数据类型能够,详细说明参见数据类型。 运算符 类型 保留字 算术运算符 + - * / % ^ 关系运算符 > >= < <= == <> 逻辑运算符 AND/&& OR/|| NOT/! 括号 (){} [] 其它 . , 功能关键字 保留字 说明 Params 用该关键字宣告参数定义的起始,参数必须填写默认值。 Vars 用该关键字宣告变量定义的起始(可以赋初值), 变量不填写初值时,系统将自动为其填充初值。 If 条件语句。 Else 条件语句。 Begin 用该关键字宣告程序主体的起始。 End 用该关键字宣告程序主体的结束。 For 循环语句。 To 循环语句。 DownTo 循环语句。 While 循环语句。 Break 循环语句。 Continue 循环语句。 True 真。 False 假。 数据源 保留字 说明 Data0-Data49 支持50个数据源。 数据输出 保留字 说明 FieldBool 用户字段的布尔型返回数据。 FieldNumeric 用户字段的数值型返回数据。 FieldString 用户字段的字符串返回数据。 PlotBool 输出布尔型值。 PlotNumeric 输出数值型值。 PlotString 输出字符串值。 PlotBar 画K线型态。 UnPlot 取消指定位置的输出。 Alert 报警输出。 Buy 买入操作。 Sell 卖出操作。 ... 其他系统函数。 操作符 操作符是一些象征具体操作运算行为的符号,例如操作符"+"代表对两个数求和,这些操作符适用于数值型、字符串、布尔型的数据。 TradeBlazer公式为您提供了多种操作运算符,便于您对保留字的操作和生成更复杂的数据类型、逻辑型、字符串类型的值。下面有四种不同类型的操作符可用于逻辑表达式、数值表达式、字符串表达式中。 数学操作符 数值型表达式的操作符有几种,如下表所示: 操作符 说明 + 加 - 减 * 乘 / 除 % 求模 ^ 求幂 () 括号 这些数学操作按其特定的优先级来进行计算,"^"(求幂)最先,其次是"*"(乘法),"/"(除法)和"%"(求模),加和减最后,如果有多个乘法/除发(或者是加法或减法),那么计算顺序是从左边到右边。 例如,在数值型的表达式中: High+2*range/2; 它首先计算的是range(此处range是指High-Low)与2的积,接着计算与2的商(除法),最后求2*range/2与最高价(High)的和。 如果要找到一个Bar的中间位置,可以尝试写成如下语句: High+Low/2; 然而在上面语句中,首先运算的是以最低价(Low)除于2,然后再与最高价求和。最后的值不是我们所需要的,并且和原来预想中的值是不一致的。 为了处理上述这样的情况,我们在运算符号中引入了括号"()",可以用括号来操作和控制运算的规则,先计算括号里面的表达式,不考虑外面的操作符和常量。因此,获取某一个Bar上的中间位置(MidPoint)的语句可如下: (High+Low)/2; 该语句就是返回最高价和最低价之和的1/2,即Bar的中间位置。 对于除法,有一些特别的提示,众所周知,0不能作为除数,否则将会导致系统溢出。TradeBlazer公式在对脚本进行执行时,碰到除法符号时,都需要对除数进行是否为0的检查,以保证脚本能够正确的执行下去,当遇到除数为0的情况下,我们将会返回一个无效值。 上面描述到求中间位置(MidPoint)的表达式,其实我们可以用另外一种形式来代替它: (High+Low)*0.5; 对于A/B这样的一个表达式,因为不知道B是否为0,所以总是需要对其进行有效性验证,计算的速度会受到一定的影响,因此,对于除法表达式,我们强烈建议使用时尽可能转换为乘法处理,即提高执行速度,也可以避免未知的错误发生。 字符串操作符 "+"是唯一的可以应用于控制字符串表达式的数学操作符,它可用于连接两个文本字符串为一个字符串。如下: "这是一个字符串表达式,"+"返回值为数值型。"; "This is expression A"+" and this is expression B."; 上面字符串表达式的输出值,应该是"这是一个字符串表达式,返回值为数值型。"和"This is expression A and this is expression B."。 关系操作符 逻辑运算符使用下列标准的比较符号,大于、小于、等于、小于等于、大于等于和不等于。 下列的关系操作符号都可以应用到逻辑表达式中。 操作符 说明 < 小于 > 大于 <= 小于等于 >= 大于等于 <> 不等于 == 等于 应用上述的关系运算符,我们可以对两个数值或字符串表达式进行对比,在下列的语句中,我们就是找到一个Bar,它的前一个Bar收盘价要高于前一个Bar最高价: Close>High[1]; 在字符串的比较运算中,首先是把每一个字符用它的ASCII来代替,其次对两个表达式中的字符逐一比较其ASCII值,从第一个开始,直到两个表达式中的所有字符都已经被计算完为止。例如: "abcd" < "zyxw"; 在这个例子中,我们对把第一个字符串表达式中的字符和第二个表达式中的字符进行比较运算,字母"a"的ASCII值是小于"z"的,同样其它的字符也是一样,所有该表达式的值为True。 逻辑操作符 逻辑运算符常常用于比较两个True/False的表达式,共有三个逻辑操作符:AND(&&),OR(||),NOT(!)。 下表列出AND逻辑操作符的应用情况: 表达式1 表达式2 表达式1 AND 表达式2 True True True True False False False True False False False False 下表列出OR逻辑操作符的应用情况: 表达式1 表达式2 表达式1 OR 表达式2 True True True True False True False True True False False False 下表列出NOT逻辑操作符的应用情况: 表达式1 NOT表达式1 True False False True 在上面的表格中,应用OR可以增加表达式的值为True的可能性,仅仅只要两个表达式中,只要有一个的值为True,那么整个表达式的值就为True。 其实在应用的过程中,还包含有一些复杂的组合运算。为了获得一个的关键反转Bar,可以使用如下的表达式: Low < Low[1] AND Close > High[1]; 在上面的表达式中,我们使用了AND逻辑运算符,因而要表达式的值为True,那么当前Bar的最低价一定要小于前一个Bar的最低价,而且当前Bar的收盘价还必须高于前一个Bar的最高价。只有当这两个条件都满足的时候,表达式的值才为True。 再看下面一个例子: High > 10 OR Vol > 5000; 在上面的表达式中,如果要其值为True,那么只需要任意一个条件满足即值为True,那么表达式的值便为True,如果当前bar的最高价大于10,或者成交量大于5000,那么表达式的值便为True。而如果需要表达式的值为False时,则两个条件都必须为False,表达式的值才为False。 逻辑操作符的优先级低于数学操作符和关系操作符。逻辑操作符也遵循先括号的原则,如果没有括号,那么其运算顺序也是从左边到右边。 对于逻辑表达式中不同条件的先后顺序,可能会产生不同的运算逻辑,执行的效率也会有所不同。 以Con1 AND Con2这样的表达式举例,系统从左到右进行逻辑判断,当Con1为True时,需要继续判断Con2是否为True,只有当Con1,Con2都为True时,整个表达式才为True。但是只要当Con1为False时,就不再需要判断Con2的值,而是直接返回False。 因此,以下的两个表达式在执行效率方面是有差异的: 5 < 4 AND Close > Open; Close > Open AND 5 < 4; 第一条语句的执行速度大部分情况下都比第二条要快。 对于Con1 OR Con2表达式,情况也比较类似,当Con1为False时,需要继续判断Con2是否为False,只有当Con1,Con2都为False时,整个表达式才为False。但是只要当Con1为True时,就不再需要判断Con2的值,而是直接返回True。 以下两条语句的执行效率也是不一样的: 5 > 4 OR Close > Open; Close > Open OR 5 > 4; 通过上述的说明,我们应该知道,逻辑表达式的组合时,应该尽可能的把容易判别整个表达式逻辑的条件放在前面,以减少整个表达式的计算时间。 表达式 表达式是操作符和保留字的有机组合,任意表达式都代表了一个值,表达式的值只能是以下的三种类型: § 数值型: 即Numeric,NumericRef,NumericSeries三种数据类型。 § 布尔型: 即Bool,BoolRef,BoolSeries三种数据类型。 § 字符串: 即String,StringRef,StringSeries三种数据类型。 当您使用TradeBlazer公式的过程中,便可应用三种广泛数据类型的表达式,来完成您自己的程序。 数值型的表达式可以是一个数字,当然,他们也可以是一个数值型的保留字,例如:保留字"Close"。或者是通过运算符号组合的一个计算表达式,该表达式的结果是数值型。下文中的例子都是数值型的表达式。 154; Vol; (High+Low)/2; 布尔型的表达式能够返回一个值True/False,或者说它可以对表达式的值进行评估,然后返回其值,要么为True,要么为False。逻辑表达式永远要涉及到比较运算,下面我们有一些逻辑表达式,它也就是对一个表达式的值是True还是False进行判断。 Close > Open; 5 < 2; 字符串的表达式可以是单个字符串,也可以字符串的组合,或者返回值为字符串的系统函数,如下,就是一个字符串的表达式: "This is a test string expression" ; "Hello"+"World" ; Trim(" I Love This Game! "); 使用注释 注释可以标注解释语句,公式在编译执行时会忽略注释语句。 注释分为单行注释和多行注释。 单行注释 在单行中对需要注释部分之前通过添加//,使//之后的语句形成注释。以下是注释的例子: //这是一个注释语句; 多行注释 在需要注释的部分之前添加/*,之后添加*/,形成注释。以下是注释的例子: /*这是一个多行 注释的 语句; */ 系统函数 TradeBlazer公式的系统函数,可根据使用范围在相应类型的公式中直接调用,计算后返回结果值。 目前的系统函数支持四种数据类型,除了TradeBlazer公式中定义的三种基本数据类型:Bool,Numeric,String之外,新加入Long(长整型)类型,使系统函数能够更加快捷的进行计算,TradeBlazer公式在处理的时候自动将Numeric和Long进行转化,用户无需进行特别的处理。 TradeBlazer公式现有的系统函数主要分为:数据函数、时间函数、数学函数、其它函数、交易函数、属性函数、账户函数、颜色函数、字符串函数等。每个系统函数都有自己的适用范围和使用规范,详细说明参见附录。  标点符号 通常,在写语句的过程中,会用到很多的标点符号。可用来定义参数、定义变量、创建规则的优先权。 例如,TradeBlazer公式用";"来标注一个语句结束。标点符号也是一个保留字,因为符号也是语言结构的一部分,在下表中列出了TradeBlazer公式中所用到的标点符号,和该标点符号所表达的意思: 符号 名称 说明 ; 分号 语句结束的标志。 , 逗号 当函数带有多个参数时,用于分隔多个参数。 () 小括号 括号之内的表达式有计算的优先权。 "" 双引号 字符串常量。 [] 中括号 回溯数据,引用以前的数据,或者数组中的元素。 {} 大括号 控制语句的起始。 . 点 扩展数据源的数据调用。 控制语句 TradeBlazer公式支持两大类的控制语句:条件语句和循环语句。 条件语句 条件语句包括以下四类表达方式: If If语句是一个条件语句,当特定的条件满足后执行一部分操作。 语法如下: If (Condition) { TradeBlazer公式语句; } Condition是一个逻辑表达式,当Condition为True的时候,TradeBlazer公式语句将会被执行,Condition可以是多个条件表达式的逻辑组合,Condition必须用()括起来。 TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。 例如,您可以计算图表中上升缺口(当前Bar的开盘价高于上一个Bar的最高价)出现了多少次,只要在图表中使用If语句,当找到一个满足条件的Bar时,即条件为真时,变量加1,脚本如下: Vars NumericSeries Counter(0); Begin If ( Open > High[1]) { Counter = Counter[1] + 1; ... } ... End 在TradeBlazer公式中,If语句被广泛使用,如K线型态和特征走势,都需要大量的使用If语句,当条件满足的时候,在满足条件的Bar上面进行标记。例如,下面的语句就是特征走势的例子: If(High > High[1] AND Low < Low[1]) { PlotNumeric("Outside Bar",High); } If语句在不是用括号的情况,只执行下面的第一条语句,如下的语句,Alert不会只在条件为True时执行,而是每次都执行。 If(High > High[1] AND Low < Low[1]) PlotNumeric("Outside Bar",High); Alert("Outside Bar"); 要想Alert只在条件为True时执行,您需要按照下面的格式编写: If(High > High[1] AND Low < Low[1]) { PlotNumeric("Outside Bar",High); Alert("Outside Bar"); } 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; Else Value1 = Value1 - Vol; If-Else-If If-Else-If是在If-Else的基础上进行扩展,支持条件的多重分支。 语法如下: If (Condition1) { TradeBlazer公式语句1; }Else If(Condition2) { TradeBlazer公式语句2; }Else { TradeBlazer公式语句3; } Condition1是一个逻辑表达式,当Condition1为True的时候,TradeBlazer公式语句1将会被执行,Condition1为False时,将会继续判断Condition2的值,当Condition2为True时,TradeBlazer公式语句2将会被执行。Condition2为False时,TradeBlazer公式语句3将会被执行。Condition1,Condition2可以是多个条件表达式的逻辑组合,条件表达式必须用()括起来。 TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。 If-Else-If的语句可以根据需要一直扩展,在最后的Else之后再加If(Condition)和新的执行代码即可。当然您也可以省略最后的Else分支,语法如下: If (Condition1) { TradeBlazer公式语句1; }Else If(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公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。 例如,在一个交易指令中,条件设置如下:当前行情上涨的时候,如果收盘价高于开盘价时,则产生一个以收盘价买入1张合约;否则产生一个以开盘价买入1张合约。当前行情没有上涨的时候,如果收盘价高于开盘价,则产生一个以收盘价卖出1张合约;否则产生一个以开盘价卖出1张合约。脚本如下: If (Open > High[1]) { If (Close>Open) { Buy(1,Open); }Else { Buy(1,Close); } }Else { If (Close > Open) { Sell(1,Open); }Else { Sell (1,Close); } } 循环语句 循环语句包括两种表达方式:For和While。 For For语句是一个循环语句,重复执行某项操作,直到循环结束。 语法如下: For 循环变量 = 初始值 To 结束值 { TradeBlazer公式语句; } 循环变量为在之前已经定义的一个数值型变量,For循环的执行是从循环变量从初始值到结束值,按照步长为1递增,依次执行TradeBlazer公式语句。结束值必须大于或等于初始值才有意义,初始值和结束值可以使用浮点数,但是在执行过程中会被直接取整。只计算其整数部分。 TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。 第一次执行时,首先将循环变量赋值为初始值,然后判断循环变量是否小于等于结束值,如果满足条件,则执行TradeBlazer公式语句,同时循环变量加1。接着重新判断循环变量是否小于等于结束值,一直到条件为False,退出循环。 例如,以下的用户计算Price最近Length周期的和。 Params NumericSeries Price(1); Numeric Length(10); Vars Numeric SumValue(0); Numeric i; Begin for i = 0 to Length - 1 { SumValue = SumValue + Price[i]; } Return SumValue; End 如果希望For语句从大到小进行循环,可以使用以下的语法: For 循环变量 = 初始值 DownTo 结束值 { TradeBlazer公式语句; } For-DownTo让循环变量从结束值每次递减1直到等于结束值,依次调用TradeBlazer公式语句执行,初始值必须大于或等于结束值才有意义。 For语句是比较常用的一种循环控制语句,它应用于知道循环次数的地方,很多内建用户函数中都使用For语句来完成相应的功能,比如Summation,Highest,Lowest,LinearReg等。 While While语句在条件为真的时候重复执行某一项操作。即,只要条件表达式的值为真(True)时,就重复执行某个动作。直到
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服