期货程序化TB公式的结构与编程(5)

2019-02-15 18:14

四、参数的说明与应用

4-1、参数说明

参数是一个预先声明的地址,用来存放输入参数的值,在声明之后,您就可以在接下来的公式中使用该参数的名称来引用其值。 参数的值在公式的内部是不能够被修改,在整个程序中一直保持不变,不能对参数进行赋值操作(引用参数是个特例)。参数的好处在于可以在调用执行技术分析,交易指令的时候才指定相应的参数,而不需要重新编译。

例如,我们常用的移动平均线指标,就是通过不同的Length来控制移动平均线的周期,在调用指标时可以随意修改各个Length的值,使之能够计算出相对应的移动平均线。您可以指定4个参数为5,10,20,30计算出这4条移动平均线,也可以修改4个参数为10,22,100,250计算出另外的4条移动平均线。

参数的修改很简单,在超级图表调用指标的过程中,您可以打开指标的属性设臵框,切换到参数页面,手动修改各项参数的值,然后应用即可,交易开拓者将根据新的参数设臵计算出新的结果,在超级图表中反映出来。

另外,参数的一个额外的优点是,我们可以通过修改交易指令不同的参数,计算交易指令组合的优劣,达到优化参数的目的。 参数类型

在介绍参数类型之前,我们需要对于TradeBlazer公式的六种类型作一些说明,用户函数是六种公式中比较特殊的一类,它自身不能被超级图表,行情报价这样的模块调用,只能被其他五类公式或者用户函数调用,因此它的参数类型也和其他几种不一样。 用户函数的参数类型可以包含TradeBlazer公式的九种类型,而其他五类公式只能使用三种简单的基本类型。

三种简单类型参数通过传值的方式将参数值传入公式,公式内部通过使用参数名称,将参数值用来进行计算或赋值。

引用参数是在调用的时候传入一个变量的地址,在用户函数内部会修改参数的值,在函数执行完毕,上层调用的公式会通过变量获得修改后的值,引用参数对于需要通过用户函数返回多个值的情况非常有用。 序列参数可以通过回溯获取以前Bar的值,具体介绍可参见参数回溯。 参数声明

在使用参数之前,必须对参数进行声明,TradeBlazer公式使用关键字\来进行参数宣告,并指定参数类型。可以选择赋默认值,也可以不赋默认值。如果某个参数没有赋予默认值,则这个参数之前的其他参数的默认值都将被忽略。 参数定义的语法如下: Params

参数类型 参数名1(初值); 参数类型 参数名2(初值);

21

参数类型 参数名3(初值); 下面是一些参数定义的例子: Params Bool bTest(False); //定义布尔型参数bTest,默认值为False; Numberic Length(10); //定义数值型参数Length,默认值为10; NumericSeries Price(0); //定义数值型序列参数Price,默认值为0; NumericRef output(0); //定义数值型引用参数output,默认值为0; String strTmp(\定义字符串参数strTmp,默认值为Hi; 参数名称的命名规范详细说明参见命名规则。 整个公式中只能出现一个Params宣告,并且要放到公式的开始部分,在变量定义之前。 4-2、参数的使用与说明 参数的使用: 可使用参数有: String Name ----- 输出值的名称; Bool bPlot ----- 输出的布尔值; Numeric Number ----- 输出的数值; Numeric Locator=0 ----- 输出值的定位点; Integer Color=-1 ----- 输出值的颜色; Integer BarsBack=0 ----- 从当前BAR回溯的 BAR数 PlotNumeric – 在当前BAR输出一个数值 参数的作用 ? 假如我们要写一个均线指标,现在是用10天做周期。代码如下: Begin PlotNumeric(\End ?那如果要改用20天做周期,我们必须改程序,把10改成20,然后编译。下次想用别的周期,还得改,非常麻烦。 ?如果使用参数,就方便多了。程序写好,使用时改参数就好了。代码如下: Params

22

Numeric Length(10); Begin PlotNumeric(\End 参数在使用前必须进行声明,声明方法如下: Params Numeric Length(10); String Filename(\bool OutputToFile(false); 注意点: ?公式应用和用户函数的参数略有不同: ?公式应用的参数只支持三种基本类型,用户函数的参数支持全部九种类型; ?公式应用的参数一定要有初始值,而用户函数的参数可以没有默认值; ?参数的值在公式的脚本段中只能引用,不能修改; 4-3、参数的默认值 在声明参数时,通常会赋给参数一个默认值。例如上例中的False,10,0等就是参数的默认值。用户函数的默认值是在当用户函数被其他公式调用,省略参数时作为参数的输入值,其他五种公式的默认值是用于图表,报价等模块调用公式时默认的输入值。 参数的默认值的类型在定义的时候指定,默认值在公式调用的时候传入作为参数进行计算。只能够对排列在后面的那些参数提供默认参数,例如: Params Numeric Numeric Numeric Params Numeric Numeric MyVal1; MyVal2(0); MyVal3(0); 您不能够使用以下方式对参数的默认值进行设定: MyVal1(0); MyVal2(0); 23

Numeric MyVal3; 4-4、参数使用例子 引用参数 TB公式的用户函数可以通过返回值,返回函数的计算结果,返回值只能是三种简单类型。当我们需要通过函数进行计算,返回多个值的时候,单个的返回值就不能满足需求了。在这种情况下,我们提出了引用参数的概念,引用参数是在调用的时候传入一个变量的地址,在用户函数内部会修改参数的值,在函数执行完毕,上层调用的公式会通过变量获得修改后的值。因为引用参数的使用是没有个数限制,因此,我们可以通过引用参数返回任意多个值。 例如,用户函数MyFunc如下: Params NumericSeries Price(0); NumericRef oHigher(0); NumericRef oLower(0); Vars Numeric Tmp(0); Begin Tmp = Average(Price,10); oHigher = IIf(Tmp > High,Tmp,High); oLower = IIf(Tmp < Low,Tmp,Low); Return Tmp; End 以上代码通过两个数值型引用参数返回10个周期的Price平均值和最高价的较大值oHigher,以及10个周期的Price平均值和最低价的较小值oLower,并且通过函数返回值输出10个周期的Price平均值。在调用该用户函数的公式中,可以通过调用该函数获得3个计算返回值,示例如下: Vars Numeric AvgValue; Numeric HigherValue; Numeric LowerValue; Begin

24

AvgValue = MyFunc(Close,HigherValue,LowerValue); ... End 在声明参数之后,我们可以在脚本正文中通过参数名称使用该参数,在使用的过程中要注意保持数据类型的匹配,示例如下: Params

NumericSeries Price(1); Vars

Numeric CumValue(0); Begin

CumValue = CumValue[1] + Price; Return CumValue; End

在以上的公式中,首先定义了一个数值型序列参数Price,并将其默认值设臵为1。接着定义了一个变量CumValue。脚本正文中,将CumValue的上一个Bar值加上Price,并将值赋给CumValue,最后返回CumValue。

通过上述的公式可以看到,我们只需要调用参数名,就可以使用参数的值进行计算了,如果要对序列参数进行回溯,请参见参数回溯。

五、变量的类型与使用

5-1、变量参数

变量是一个存储值的地址,当变量被声明之后,就可以在脚本中使用变量,可以对其赋值,也可以在其他地方引用变量的值进行计算,要对变量进行操作,直接使用变量名称即可。

变量的主要用处在于它可以存放计算或比较的结果,以方便在之后的脚本中直接引用运算的值,而无需重现计算过程。 例如,我们定义一个变量Y,我们把一个收盘价(Close)乘上8%的所得的值存储在Y中,即Y = Close *8%。那么一旦计算出Close * 8%的值,便赋给变量Y。而无需在公式中输入计算过程,只需调用变量名称即可引用变量的值。

变量有助于程序的优化,这是TradeBlazer公式必须重复调用一些数据,这些数据可能是某些函数(如:Bar数据),或通过表达式执行计算和比较的值。因此,在表达式频繁使用的地方使用变量可提高程序的运行速度和节约内存空间。 使用变量也可以避免输入错误,使程序的可读性提高,示例如下:

25


期货程序化TB公式的结构与编程(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:汽车饰物项目可行性研究报告评审方案设计(2013年发改委标准案例

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: